Known Issues
Jump to navigation
Jump to search
liblfds
- 7th June 2016 - The porting abstraction layer for x64, with GCC versions >= 4.1.2 and < 4.7.3, is missing the LFDS720_PAL_ATOMIC_DWCAS macro, i.e. is broken and the code will not compile. This is my fault - I have a GCC in that version range, but only on MIPS32. To fix this, add the following code on line 314 of lfds710_porting_abstraction_layer_compiler.h;
#if( defined __x86_64__ ) /* TRD : On 64 bit platforms, unsigned long long int is 64 bit, so we must manually use cmpxchg16b, as the atomic intrinsics will only emit cmpxchg8b */ // TRD : lfds710_pal_uint_t volatile (*destination)[2], lfds710_pal_uint_t (*compare)[2], lfds710_pal_uint_t (*new_destination)[2], enum lfds710_misc_cas_strength cas_strength, char unsigned result #define LFDS710_PAL_ATOMIC_DWCAS( pointer_to_destination, pointer_to_compare, pointer_to_new_destination, cas_strength, result ) \ { \ (result) = 0; \ \ __asm__ __volatile__ \ ( \ "lock;" /* make cmpxchg16b atomic */ \ "cmpxchg16b %0;" /* cmpxchg16b sets ZF on success */ \ "setz %4;" /* if ZF set, set result to 1 */ \ \ /* output */ \ : "+m" ((pointer_to_destination)[0]), "+m" ((pointer_to_destination)[1]), "+a" ((pointer_to_compare)[0]), "+d" ((pointer_to_compare)[1]), "=q" (result) \ \ /* input */ \ : "b" ((pointer_to_new_destination)[0]), "c" ((pointer_to_new_destination)[1]) \ \ /* clobbered */ \ : \ ); \ } #endif
- 23rd June 2016 - build on MIPS64 is broken, as on that platform the #ifdefs select both the MIPS32 abstraction and the MIPS64 abstraction.
- 17th Feburary 2017 - major bug in the unbounded, many, many queue. A bug was introduced in 7.1.0 in the code, outside of the lock-free code, which handles exponential backoff. This means that a race condition now exists where a queue can end up seemingly dequeuing an empty element when a non-empty element was expected, or an element which has already been dequeued. Release 7.1.1 fixes this bug. Full details here; http://www.liblfds.org/wordpress/?p=884
- 31st May 2016 - The Linux kernel abstraction layer port is incomplete.
libtest
- 18th Feburary 2017 - some test will spuriously fail if they do not complete at least one internal iteration of the data test; this has been observed on the ringbuffer write test, on ARM32, on a Raspberry Pi 2. Currently there is a performance issue with the unbounded/many/many queue on ARM32 (this was missed when 7.1.0 was released - too many bars on the bar graph!) and this in particular causes this problem on ARM32.
libbenchmark
- 31st May 2016 - The Linux kernel abstraction layer port is incomplete.
- 31st May 2016 - The btree test is a bit unfair - it does a bit more work as the number of logical cores increases, so as such, it is underplaying performance for higher core counts.
test
- 31st May 2016 - If using shared object versions of liblfds libraries, cannot link on ARM32. Quite possibly not a liblfds bug, but still an issue.
benchmark
- 31st May 2016 - If using shared object versions of liblfds libraries, cannot link on ARM32. Quite possibly not a liblfds bug, but still an issue.
- 19th Aug 2016 - huge bug; builds using "gcc_gnumake_hosted_liblfds710_liblfds700" all crash, because some code involved in benchmark init effectively assumes NUMA. To work around this, install libnuma-devel (name varies a little by platform) and compile the "gcc_gnumake_hosted_liblfds710_liblfds700_libnuma" variant.