[libvirt] Strange test build failure

Daniel P. Berrange berrange at redhat.com
Tue May 26 11:39:20 UTC 2015


On Tue, May 26, 2015 at 11:54:38AM +0100, Dimitri John Ledkov wrote:
> On 23 May 2015 at 18:14, Roman Bogorodskiy <bogorodskiy at gmail.com> wrote:
> >   Daniel P. Berrange wrote:
> >
> >> On Fri, May 22, 2015 at 05:59:49PM +0200, Michal Privoznik wrote:
> >> > On 22.05.2015 16:39, Dimitri John Ledkov wrote:
> >> > > On 22 May 2015 at 13:53, Michal Privoznik <mprivozn at redhat.com> wrote:
> >> > >> On 22.05.2015 14:18, Daniel P. Berrange wrote:
> >> > >>> On Fri, May 22, 2015 at 01:13:40PM +0100, Dimitri John Ledkov wrote:
> >> > >>>> # VIR_TEST_VERBOSE=1 VIR_TEST_DEBUG=1 ./qemuxml2argvtest 2>&1 | grep NUMA
> >> > >>>> 61) QEMU XML-2-ARGV hugepages-pages
> >> > >>>> ... libvirt:  error : unsupported configuration: NUMA node 1 is
> >> > >>>> unavailable
> >> > >>>> 64) QEMU XML-2-ARGV hugepages-shared
> >> > >>>> ... libvirt:  error : unsupported configuration: NUMA node 1 is
> >> > >>>> unavailable
> >> > >>>> 331) QEMU XML-2-ARGV numatune-memnode
> >> > >>>> ... libvirt:  error : unsupported configuration: NUMA node 1 is
> >> > >>>> unavailable
> >> > >>>> 333) QEMU XML-2-ARGV numatune-memnode-no-memory
> >> > >>>> ... libvirt:  error : unsupported configuration: NUMA node 3 is
> >> > >>>> unavailable
> >> > >>>> 336) QEMU XML-2-ARGV numatune-auto-prefer
> >> > >>>> ... libvirt:  error : unsupported configuration: NUMA node 1 is
> >> > >>>> unavailable
> >> > >>>> 449) QEMU XML-2-ARGV memory-hotplug-dimm
> >> > >>>> ... libvirt:  error : unsupported configuration: NUMA node 1 is
> >> > >>>> unavailable
> >> > >>>> 450) QEMU XML-2-ARGV memory-hotplug-dimm-addr
> >> > >>>> ... libvirt:  error : unsupported configuration: NUMA node 1 is
> >> > >>>> unavailable
> >> > >>>>
> >> > >>>> So the test fails, but I don't believe I'm compiling libvirt with
> >> > >>>> numad support... So I don't understand what is being asserted here.
> >> > >>>
> >> > >>> Can you tell us more about what platform you are building on, and
> >> > >>> particularly what compiler & linker you are using
> >> > >>
> >> > >> And what arguments do you pass to configure.
> >
> > <snip>
> >
> >> > >
> >> >
> >> > So even though you are building with numactl, it seems to me like you
> >> > don't have numa_bitmask_isbitset(). Can you check config.log to see if
> >> > HAVE_NUMA_BITMASK_ISBITSET is defined to 1? If my guess is right, this
> >> > causes us to not mock virNumaNodeIsAvailable() and therefore we run the
> >> > original function which checks real host the build is ran on.
> >>
> >> Or is this not the same as the issue with inline that was seen with
> >> clang before ?
> >
> > Yeah, it looks quite similar to that one.
> >
> > By the way, clang doesn't do much inlining with -O0, I guess that could
> > be similar in gcc, so it should be a quick check to see if that's a
> > compiler problem.
> 
> It appears to be caused by optimisation flag, specifically:
> 
> export CFLAGS='-fno-semantic-interposition'
> ./configure --with-libvirtd --with-interface --with-numactl
> --with-test=yes && make clean; make -j4 V=1; make -C tests check -j4
> V=1
> 
> fails, yet:
> 
> export CFLAGS='-fsemantic-interposition'
> ./configure --with-libvirtd --with-interface --with-numactl
> --with-test=yes && make clean; make -j4 V=1; make -C tests check -j4
> V=1
> 
> Passes with gcc-5.1.
> 
> The docs for the flag are at:
> https://gcc.gnu.org/onlinedocs/gcc-5.1.0/gcc/Optimize-Options.html#index-fsemantic-interposition-972
> 
> "...With -fno-semantic-interposition the compiler assumes that if
> interposition happens for functions the overwriting function will have
> precisely the same semantics (and side effects). Similarly if
> interposition happens for variables, the constructor of the variable
> will be the same. The flag has no effect for functions explicitly
> declared inline (where it is never allowed for interposition to change
> semantics) and for symbols explicitly declared weak."
> 
> I will stop using "-fno-semantic-interposition" for now, but do you
> think this is something that could be fixed in either numactl and/or
> libvirt codebase? It is desirable to use -fno-semantic-interposition.

To me, with limited understanding of compiler/linker internals, the docs
are pretty unclear on what this -f flag is actually doing. I will say
though, that the ability to have LD_PRELOADs which replace arbitrary
libvirt functions is pretty critical to the way our unit test suite
is designed. So if you want to continue using -fno-semantic-interposition
then I think you'd just have to skip running the test suite with those
builds. I imagine it would be fine to use this flag when doing production
builds though, so you could simply skip it during development when you
need todo testing.

Regards,
Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list