[dpdk-dev] [dpdk-users] Broken hash table functions with CFLAGS -O3

De Lara Guarch, Pablo pablo.de.lara.guarch at intel.com
Mon Jan 18 15:18:00 CET 2016


Wrong list, sorry

> -----Original Message-----
> From: De Lara Guarch, Pablo
> Sent: Monday, January 18, 2016 1:48 PM
> To: bombermag at gmail.com
> Cc: dev at dpdk.org; De Lara Guarch, Pablo
> Subject: RE: [dpdk-users] Broken hash table functions with CFLAGS -O3
> 
> > -----Original Message-----
> > From: users [mailto:users-bounces at dpdk.org] On Behalf Of Dmitriy
> Yakovlev
> > Sent: Friday, January 15, 2016 1:20 AM
> > To: users at dpdk.org
> > Subject: [dpdk-users] Broken hash table functions with CFLAGS -O3
> >
> > Hello.
> > I trying to use hash tables for adding struct ip:port as key.
> > When trying to add duplicated key it's successfuly added second time, not
> > always, but sometimes.
> > Please see this youtube video, where I'm demonstrating this bug:
> > https://www.youtube.com/watch?v=vsXVxISpmnU
> > Code on github: https://github.com/BombermaG/bug-app
> >
> > When using CFLAGS -O2 this problem cannot be repeated.
> > It's problem with -O3 flag and I must use O2 or how can I solve it?
> > Thank you for helping.
> > (Sorry if this message double posting).
> >
> > Spec info. Tell me, if you need more info.
> > dpdk 2.2.0
> 
> Hello Dmitriy,
> 
> Thanks for the detailed report. I am able to reproduce the issue with
> gcc 4.7 and 4.8. The problem is that the signature sometimes changes,
> due to a different key and therefore the bucket where it should be stored
> is the wrong one.
> 
> Actually, the hash table is fine. The issue is that your key is a structure
> of a 4-byte and 2-byte integers, so your key size should be 6, but instead,
> it is 8, because sizeof(struct...) includes padding to have it multiple of 4.
> Most times, that padding is 0, so it is fine, but when that padding is not 0,
> the key is different and then it looks like you are adding a duplicate
> (but actually you are adding a different key!).
> So, either add padding manually in the key or manually set the key size to 6.
> 
> Regards,
> Pablo
> >
> > Linux 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015 x86_64
> > x86_64 x86_64 GNU/Linux
> >
> > gcc -v
> > Using built-in specs.
> > COLLECT_GCC=gcc
> > COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/lto-
> wrapper
> > Target: x86_64-redhat-linux
> > Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --
> > infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla
> > --enable-bootstrap --enable-shared --enable-threads=posix --enable-
> > checking=release --with-system-zlib --enable-__cxa_atexit --disable-
> > libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id -
> > -with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-
> > c++,java,fortran,ada,go,lto
> > --enable-plugin --enable-initfini-array --disable-libgcj --with-
> > isl=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/isl-
> > install
> > --with-cloog=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-
> > linux/cloog-install
> > --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 -
> > -build=x86_64-redhat-linux Thread model: posix gcc version 4.8.5 20150623
> > (Red Hat 4.8.5-4) (GCC)
> >
> > Intel(R) Xeon(R) CPU E5-2643 v2 @ 3.50GHz



More information about the dev mailing list