mirror of
https://github.com/samba-team/samba.git
synced 2024-12-23 17:34:34 +03:00
Wrap the DEBUG checks in a "unlikely"
On my Laptop with some limited netbench runs this gains about 1.5% of
performance. When looking at the assembler output I would suspect the biggest
gain is by the fact that with this in place the calls to the debug functions is
moved to the function end, out of the way of the normal code paths. valgrind
tests pending I would suspect this to be much more cache friendly.
Comments?
Volker
(This used to be commit 51448a9dca
)
This commit is contained in:
parent
5413ad4aca
commit
ee8212472d
@ -161,9 +161,24 @@ extern bool *DEBUGLEVEL_CLASS_ISSET;
|
||||
* will remove the extra conditional test.
|
||||
*/
|
||||
|
||||
/*
|
||||
* From talloc.c:
|
||||
*/
|
||||
|
||||
/* these macros gain us a few percent of speed on gcc */
|
||||
#if (__GNUC__ >= 3)
|
||||
/* the strange !! is to ensure that __builtin_expect() takes either 0 or 1
|
||||
as its first argument */
|
||||
#define likely(x) __builtin_expect(!!(x), 1)
|
||||
#define unlikely(x) __builtin_expect(!!(x), 0)
|
||||
#else
|
||||
#define likely(x) x
|
||||
#define unlikely(x) x
|
||||
#endif
|
||||
|
||||
#define DEBUGLVL( level ) \
|
||||
( ((level) <= MAX_DEBUG_LEVEL) && \
|
||||
((DEBUGLEVEL_CLASS[ DBGC_CLASS ] >= (level))|| \
|
||||
unlikely((DEBUGLEVEL_CLASS[ DBGC_CLASS ] >= (level))|| \
|
||||
(!DEBUGLEVEL_CLASS_ISSET[ DBGC_CLASS ] && \
|
||||
DEBUGLEVEL_CLASS[ DBGC_ALL ] >= (level)) ) \
|
||||
&& dbghdr( level, DBGC_CLASS, __FILE__, FUNCTION_MACRO, (__LINE__) ) )
|
||||
@ -171,7 +186,7 @@ extern bool *DEBUGLEVEL_CLASS_ISSET;
|
||||
|
||||
#define DEBUGLVLC( dbgc_class, level ) \
|
||||
( ((level) <= MAX_DEBUG_LEVEL) && \
|
||||
((DEBUGLEVEL_CLASS[ dbgc_class ] >= (level))|| \
|
||||
unlikely((DEBUGLEVEL_CLASS[ dbgc_class ] >= (level))|| \
|
||||
(!DEBUGLEVEL_CLASS_ISSET[ dbgc_class ] && \
|
||||
DEBUGLEVEL_CLASS[ DBGC_ALL ] >= (level)) ) \
|
||||
&& dbghdr( level, DBGC_CLASS, __FILE__, FUNCTION_MACRO, (__LINE__) ) )
|
||||
@ -179,7 +194,7 @@ extern bool *DEBUGLEVEL_CLASS_ISSET;
|
||||
|
||||
#define DEBUG( level, body ) \
|
||||
(void)( ((level) <= MAX_DEBUG_LEVEL) && \
|
||||
((DEBUGLEVEL_CLASS[ DBGC_CLASS ] >= (level))|| \
|
||||
unlikely((DEBUGLEVEL_CLASS[ DBGC_CLASS ] >= (level))|| \
|
||||
(!DEBUGLEVEL_CLASS_ISSET[ DBGC_CLASS ] && \
|
||||
DEBUGLEVEL_CLASS[ DBGC_ALL ] >= (level)) ) \
|
||||
&& (dbghdr( level, DBGC_CLASS, __FILE__, FUNCTION_MACRO, (__LINE__) )) \
|
||||
@ -187,7 +202,7 @@ extern bool *DEBUGLEVEL_CLASS_ISSET;
|
||||
|
||||
#define DEBUGC( dbgc_class, level, body ) \
|
||||
(void)( ((level) <= MAX_DEBUG_LEVEL) && \
|
||||
((DEBUGLEVEL_CLASS[ dbgc_class ] >= (level))|| \
|
||||
unlikely((DEBUGLEVEL_CLASS[ dbgc_class ] >= (level))|| \
|
||||
(!DEBUGLEVEL_CLASS_ISSET[ dbgc_class ] && \
|
||||
DEBUGLEVEL_CLASS[ DBGC_ALL ] >= (level)) ) \
|
||||
&& (dbghdr( level, DBGC_CLASS, __FILE__, FUNCTION_MACRO, (__LINE__) )) \
|
||||
@ -195,14 +210,14 @@ extern bool *DEBUGLEVEL_CLASS_ISSET;
|
||||
|
||||
#define DEBUGADD( level, body ) \
|
||||
(void)( ((level) <= MAX_DEBUG_LEVEL) && \
|
||||
((DEBUGLEVEL_CLASS[ DBGC_CLASS ] >= (level))|| \
|
||||
unlikely((DEBUGLEVEL_CLASS[ DBGC_CLASS ] >= (level))|| \
|
||||
(!DEBUGLEVEL_CLASS_ISSET[ DBGC_CLASS ] && \
|
||||
DEBUGLEVEL_CLASS[ DBGC_ALL ] >= (level)) ) \
|
||||
&& (dbgtext body) )
|
||||
|
||||
#define DEBUGADDC( dbgc_class, level, body ) \
|
||||
(void)( ((level) <= MAX_DEBUG_LEVEL) && \
|
||||
((DEBUGLEVEL_CLASS[ dbgc_class ] >= (level))|| \
|
||||
unlikely((DEBUGLEVEL_CLASS[ dbgc_class ] >= (level))|| \
|
||||
(!DEBUGLEVEL_CLASS_ISSET[ dbgc_class ] && \
|
||||
DEBUGLEVEL_CLASS[ DBGC_ALL ] >= (level)) ) \
|
||||
&& (dbgtext body) )
|
||||
|
Loading…
Reference in New Issue
Block a user