On 23 May 2015 at 18:14, Roman Bogorodskiy
<bogorodskiy(a)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(a)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-...
"...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
--
|: