The root cause appears to be this call sysconf(_SC_LEVEL1_DCACHE_LINESIZE);
https://github.com/mysql/mysql-server/blob/ea7087d885006918ad54458e7aad215b1650312c/sql/memory/aligned_atomic.h#L82
It returns 0 on armhf. In fact:
$ getconf -a | grep CACHE LEVEL1_ICACHE_SIZE 0 LEVEL1_ICACHE_ASSOC 0 LEVEL1_ICACHE_LINESIZE 0 LEVEL1_DCACHE_SIZE 0 LEVEL1_DCACHE_ASSOC 0 LEVEL1_DCACHE_LINESIZE 0 LEVEL2_CACHE_SIZE 0 LEVEL2_CACHE_ASSOC 0 LEVEL2_CACHE_LINESIZE 0 LEVEL3_CACHE_SIZE 0 LEVEL3_CACHE_ASSOC 0 LEVEL3_CACHE_LINESIZE 0 LEVEL4_CACHE_SIZE 0 LEVEL4_CACHE_ASSOC 0 LEVEL4_CACHE_LINESIZE 0
Maybe the error checking in the next line should be "if (size <= 0) return 64;"?
This is the call chain
(gdb) bt #0 memory::_cache_line_size () at ../../sql/memory/aligned_atomic.h:82 #1 memory::cache_line_size () at ../../sql/memory/aligned_atomic.h:102 #2 memory::_cacheline_for<std::atomic<long> > () at ../../sql/memory/aligned_atomic.h:116 #3 memory::minimum_cacheline_for<std::atomic<long> > () at ../../sql/memory/aligned_atomic.h:133 #4 memory::Aligned_atomic<long>::Aligned_atomic (this=0x308bd1c <delegates_init()::place_trans_mem+56>) at ../../sql/memory/aligned_atomic.h:309 #5 0x0176b764 in memory::Aligned_atomic<long>::Aligned_atomic (value=0, this=<optimized out>) at ../../sql/memory/aligned_atomic.h:315 #6 lock::Shared_spin_lock::Shared_spin_lock (this=<optimized out>) at ../../sql/locks/shared_spin_lock.h:170 #7 Delegate::Delegate (this=this@entry=0x308bce4 <delegates_init()::place_trans_mem>, key=0) at ../../sql/rpl_handler.cc:89 #8 0x0176b8a4 in Trans_delegate::Trans_delegate (this=0x308bce4 <delegates_init()::place_trans_mem>) at ../../sql/rpl_handler.h:285 #9 delegates_init () at ../../sql/rpl_handler.cc:363 #10 0x00ceb76c in init_server_components () at ../../sql/mysqld.cc:6211 #11 0x00cf03a4 in mysqld_main (argc=<optimized out>, argv=<optimized out>) at ../../sql/mysqld.cc:7832 #12 0xb653c7da in __libc_start_call_main (main=main@entry=0xca7c51 <main(int, char**)>, argc=argc@entry=3, argv=0xbefff604, argv@entry=0xb662e000) at ../sysdeps/nptl/libc_start_call_main.h:58 #13 0xb653c87e in __libc_start_main_impl (main=0xca7c51 <main(int, char**)>, argc=3, argv=0xb662e000, init=<optimized out>, fini=0x0, rtld_fini=0xb6fe5539 <_dl_fini>, stack_end=0xbefff604) at libc-start.c:360 #14 0x00cda0f8 in _start () (gdb) l 77 return line_size; 78 } 79 80 #elif defined(__linux__) 81 static inline size_t _cache_line_size() { 82 long size = sysconf(_SC_LEVEL1_DCACHE_LINESIZE); 83 if (size == -1) return 64; 84 #if defined(__s390x__) 85 // returns 0 on s390x RHEL 7.x 86 if (size == 0) {
The root cause appears to be this call sysconf( _SC_LEVEL1_ DCACHE_ LINESIZE) ;
https:/ /github. com/mysql/ mysql-server/ blob/ea7087d885 006918ad54458e7 aad215b1650312c /sql/memory/ aligned_ atomic. h#L82
It returns 0 on armhf. In fact:
$ getconf -a | grep CACHE ICACHE_ LINESIZE 0 DCACHE_ LINESIZE 0 CACHE_LINESIZE 0 CACHE_LINESIZE 0 CACHE_LINESIZE 0
LEVEL1_ICACHE_SIZE 0
LEVEL1_ICACHE_ASSOC 0
LEVEL1_
LEVEL1_DCACHE_SIZE 0
LEVEL1_DCACHE_ASSOC 0
LEVEL1_
LEVEL2_CACHE_SIZE 0
LEVEL2_CACHE_ASSOC 0
LEVEL2_
LEVEL3_CACHE_SIZE 0
LEVEL3_CACHE_ASSOC 0
LEVEL3_
LEVEL4_CACHE_SIZE 0
LEVEL4_CACHE_ASSOC 0
LEVEL4_
Maybe the error checking in the next line should be "if (size <= 0) return 64;"?
This is the call chain
(gdb) bt :_cache_ line_size () at ../../sql/ memory/ aligned_ atomic. h:82 :cache_ line_size () at ../../sql/ memory/ aligned_ atomic. h:102 :_cacheline_ for<std: :atomic< long> > () at ../../sql/ memory/ aligned_ atomic. h:116 :minimum_ cacheline_ for<std: :atomic< long> > () at ../../sql/ memory/ aligned_ atomic. h:133 :Aligned_ atomic< long>:: Aligned_ atomic (this=0x308bd1c <delegates_ init(): :place_ trans_mem+ 56>) at ../../sql/ memory/ aligned_ atomic. h:309 :Aligned_ atomic< long>:: Aligned_ atomic (value=0, this=<optimized out>) at ../../sql/ memory/ aligned_ atomic. h:315 spin_lock: :Shared_ spin_lock (this=<optimized out>) at ../../sql/ locks/shared_ spin_lock. h:170 entry=0x308bce4 <delegates_ init(): :place_ trans_mem> , key=0) at ../../sql/ rpl_handler. cc:89 :Trans_ delegate (this=0x308bce4 <delegates_ init(): :place_ trans_mem> ) at ../../sql/ rpl_handler. h:285 rpl_handler. cc:363 components () at ../../sql/ mysqld. cc:6211 mysqld. cc:7832 start_call_ main (main=main@ entry=0xca7c51 <main(int, char**)>, argc=argc@entry=3, argv=0xbefff604, argv@entry= 0xb662e000) at ../sysdeps/ nptl/libc_ start_call_ main.h: 58 start_main_ impl (main=0xca7c51 <main(int, char**)>, argc=3, argv=0xb662e000, init=<optimized out>, fini=0x0, rtld_fini= 0xb6fe5539 <_dl_fini>, stack_end= 0xbefff604) at libc-start.c:360 _SC_LEVEL1_ DCACHE_ LINESIZE) ;
#0 memory:
#1 memory:
#2 memory:
#3 memory:
#4 memory:
#5 0x0176b764 in memory:
#6 lock::Shared_
#7 Delegate::Delegate (this=this@
#8 0x0176b8a4 in Trans_delegate:
#9 delegates_init () at ../../sql/
#10 0x00ceb76c in init_server_
#11 0x00cf03a4 in mysqld_main (argc=<optimized out>, argv=<optimized out>) at ../../sql/
#12 0xb653c7da in __libc_
#13 0xb653c87e in __libc_
#14 0x00cda0f8 in _start ()
(gdb) l
77 return line_size;
78 }
79
80 #elif defined(__linux__)
81 static inline size_t _cache_line_size() {
82 long size = sysconf(
83 if (size == -1) return 64;
84 #if defined(__s390x__)
85 // returns 0 on s390x RHEL 7.x
86 if (size == 0) {