Details
-
Type:
Bug
-
Status: Closed
-
Priority:
Minor
-
Resolution: Fixed
-
Affects Version/s: 10.1
-
Fix Version/s: 10.1.5
-
Component/s: Storage Engine - InnoDB, Storage Engine - XtraDB
-
Labels:None
-
Epic Link:
Description
UNIV_LIKELY()/UNIV_UNLIKELY() hints are supposed to improve branch prediction. They're defined in InnoDB as following:
/* Tell the compiler that 'expr' probably evaluates to 'constant'. */ # define UNIV_EXPECT(expr,constant) __builtin_expect(expr, constant) /* Tell the compiler that cond is likely to hold */ #define UNIV_LIKELY(cond) UNIV_EXPECT(cond, TRUE) /* Tell the compiler that cond is unlikely to hold */ #define UNIV_UNLIKELY(cond) UNIV_EXPECT(cond, FALSE)
In other words they're expected to work only if cond evaluates to TRUE or FALSE,
see https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html.
However there're a few conditions that may evaluate to different values, e.g.:
page/page0zip.cc: if (UNIV_LIKELY(c_stream->avail_in)) {
page/page0zip.cc: if (UNIV_LIKELY(c_stream->avail_in)) {
dict/dict0mem.cc: if (UNIV_LIKELY(i) && UNIV_UNLIKELY(!table->col_names)) {
Either fix condition or fix UNIV_LIKELY() to evaluate condition to bool (see likely() in my_global.h).
Note: we'll gain little to nothing in terms of performance out of this. But at least we'll have correct use of these compiler hints.
Gliffy Diagrams
Attachments
Activity
- All
- Comments
- Work Log
- History
- Activity
- Transitions
commit 58e8db2eb398a812e2894d28db4173a4f67fea06
Author: Jan Lindström <jan.lindstrom@mariadb.com>
Date: Mon May 11 14:29:14 2015 +0300
MDEV-7942: InnoDB: abuse of UNIV_LIKELY()/UNIV_UNLIKELY()UNIV_LIKELY()/UNIV_UNLIKELY() hints are supposed to improve branch prediction.
Currently, they're expected to work only if cond evaluates to TRUE or FALSE.
However there're a few conditions that may evaluate to different values, e.g.:
page/page0zip.cc: if (UNIV_LIKELY(c_stream->avail_in)) {
&& UNIV_UNLIKELY(!table->col_names)) {
page/page0zip.cc: if (UNIV_LIKELY(c_stream->avail_in)) {
dict/dict0mem.cc: if (UNIV_LIKELY
Fixed these conditions so that they evaluate TRUE/FALSE.