> -----Original Message----- > From: Ilya Maximets <i.maxim...@ovn.org> > Sent: Wednesday, July 15, 2020 2:28 PM > To: Van Haaren, Harry <harry.van.haa...@intel.com>; Ilya Maximets > <i.maxim...@ovn.org>; William Tu <u9012...@gmail.com>; Gregory Rose > <gvrose8...@gmail.com>; Stokes, Ian <ian.sto...@intel.com> > Cc: d...@openvswitch.org > Subject: Re: [PATCH] rpm-fedora: Add missing dist library > > On 7/15/20 2:36 PM, Van Haaren, Harry wrote: > >> -----Original Message----- > >> From: Ilya Maximets <i.maxim...@ovn.org> > >> Sent: Wednesday, July 15, 2020 1:22 PM > >> To: Van Haaren, Harry <harry.van.haa...@intel.com>; Ilya Maximets > >> <i.maxim...@ovn.org>; William Tu <u9012...@gmail.com>; Gregory Rose > >> <gvrose8...@gmail.com>; Stokes, Ian <ian.sto...@intel.com> > >> Cc: d...@openvswitch.org > >> Subject: Re: [PATCH] rpm-fedora: Add missing dist library > >> > >> On 7/15/20 1:45 PM, Van Haaren, Harry wrote: > >>>> -----Original Message----- > >>>> From: Ilya Maximets <i.maxim...@ovn.org> > >>>> Sent: Wednesday, July 15, 2020 10:16 AM > >>>> To: William Tu <u9012...@gmail.com>; Gregory Rose > >> <gvrose8...@gmail.com>; > >>>> Van Haaren, Harry <harry.van.haa...@intel.com>; Stokes, Ian > >>>> <ian.sto...@intel.com> > >>>> Cc: d...@openvswitch.org; Ilya Maximets <i.maxim...@ovn.org>; > >>>> i.maxim...@ovn.org > >>>> Subject: Re: [PATCH] rpm-fedora: Add missing dist library > >>>> > >>>> On 7/15/20 1:33 AM, William Tu wrote: > >>>>> On Tue, Jul 14, 2020 at 03:40:39PM -0700, Gregory Rose wrote: > >>>>>> > >>>>>> > >>>>>> On 7/14/2020 1:49 PM, Greg Rose wrote: > >>>>>>> libopenvswitchavx512.a is needed for the fedora rpm spec. > >>>>>>> > >>>>>>> Signed-off-by: Greg Rose <gvrose8...@gmail.com> > >>>>>>> --- > >>>>>>> rhel/openvswitch-fedora.spec.in | 1 + > >>>>>>> 1 file changed, 1 insertion(+) > >>>>>>> > >>>>>>> diff --git a/rhel/openvswitch-fedora.spec.in b/rhel/openvswitch- > >>>> fedora.spec.in > >>>>>>> index 7bc8c34..154b49e 100644 > >>>>>>> --- a/rhel/openvswitch-fedora.spec.in > >>>>>>> +++ b/rhel/openvswitch-fedora.spec.in > >>>>>>> @@ -457,6 +457,7 @@ fi > >>>>>>> %{_bindir}/ovs-pki > >>>>>>> %{_bindir}/vtep-ctl > >>>>>>> %{_libdir}/lib*.so.* > >>>>>>> +%{_libdir}/libopenvswitchavx512.a > >>>>> How come before the avx512 patch series, we don't need to put > >>>> libopenvswitch.a here? > >>>>> And now we need to add libopenvswitchavx512.a? > >>>>> Do we need to also add other .a files such as libsflow.a, > >>>>> libopenvswitch.a? > >>>> > >>>> It seems like the real issue is that rpm build requests to build shared > >>>> libraries only, but we're building this static library for some reason. > >>>> > >>>> We should not include it into the package. I think, we need to fix the > >>>> build process and avoid building it in a first place. > >>> > >>> Hey folks! > >>> > >>> As you know the AVX512 patchset enables CPU ISA detection. ISA detection > >>> and building is a little more complex, and indeed this is the first time > >>> that it > >>> is being done in OVS - so we're all on a learning curve here. > >>> > >>> OVS supports an --enable-shared build mode, where OVS itself is built > >>> as a > >>> shared object. When this is enabled, components in OVS are built as .so > >>> files, > >>> and LD handles linking them together. This is a pretty standard shared > >>> build > >>> usage, and likely very familiar to everyone. > >>> > >>> When enabling CPU ISA detection in OVS, we were very careful to not build > >>> the whole OVS code with CPU specific CFLAGS like -mavx512f. To limit scope > of > >>> these CFLAGS, it is common practice to build a static library. The > >>> resulting .a > >>> archive file (containing CPU specific ISA) is then static linked into the > vswitchd > >> binary. > >> > >> Isn't it better to link libopenvswitchavx512.a to libopenvswitch.{a,so} > >> instead > >> of linking it to the vswitchd binary? This should allow us to not > >> distribute > >> it separately inside the package. > >> > >> There are few issues here: > >> 1. libopenvswitchavx512.a is a confusing name, because it contains only one > >> object > >> lib/dpif-netdev-lookup-avx512-gather.c and not the whole library. > >> 2. vswitchd by itself doesn't use dpif-netdev-lookup-* stuff. These > >> things are > >> only used by libopenvswitch. So, linking of libopenvswitchavx512.a into > >> vswitchd doesn't make much logical sense. > >> 3. If someone will try to create a different application on top of > libopenvswitch > >> shared library, they will need to additionally statically link > >> libopenvswitchavx512.a. Otherwise build will fail, right? > > > > Apologies - a mistake on my side in the email description above. > > All 3 of your concerns are resolved by the correction I think? > > Clarifying here: > > > > libopenvswitchavx512 is linked into libopenvswitch. > > > > vswitchd always links against libopenvswitch. > > Other binaries also link against libopenvswitch. > > > > No specific changes are required to pick up the avx512 for binaries (eg > vswitchd). > > This is apparent from the build-system changes - no patches to vswitchd > makefiles. > > Hmm. OK. So, we should not ship this static library as it already linked > into libopenvswitch and should not be used by anyone. > > Maybe I'm missing something obvious, but I see following while building > with static libs: > > - https://travis-ci.org/github/openvswitch/ovs/jobs/707655283#L2179 > This line doesn't seem to include libopenvswitchavx512 anyhow. > > - And I do see libopenvswitchavx512.a in a linker command while linking ovs- > vswitchd: > https://travis-ci.org/github/openvswitch/ovs/jobs/707655283#L2572
Correct. From the automake.mk file; # plain vswitch library compiled as normal library, without CPU specific ISA CFLAGS lib_LTLIBRARIES += lib/libopenvswitch.la lib_libopenvswitch_la_SOURCES = <all lib/* source files here> # Define avx512 library, with CPU ISA specific flags lib_LTLIBRARIES += lib/libopenvswitchavx512.la lib_libopenvswitchavx512_la_CFLAGS = <CPU ISA CFLAGS here, -mavx512f etc> # plain vswitch library has a dependency on vswitchavx512 lib_libopenvswitch_la_LIBADD += lib/libopenvswitchavx512.la I'm losing track of the actual issue here. What is the concern that we're discussing? If packaging ignores the static archive libopenvswitchavx512.a then all is OK? > >>> The approach of building application as shared or static, but always > statically > >> linking > >>> in ISA specialized static libraries into the result is common in other > >>> packet > >> processing > >>> projects. For example, DPDK's ethdev drivers take a similar approach. > >>> > >>> As a result, it is expected that static archive files will be linked into > >>> the > >> vswitchd binary, and the > >>> above patch solves exactly that for the .spec file. Regardless of the > >>> type of > >> build (shared/static) of > >>> OVS, the same .a files will require linking, so I see this as a potential > >>> fix. > >>> > >>> > >>> If OVS community feels that all object files must be .so if using > >>> --enable- > shared, > >>> then we can revert to the previous method quite easily, just removing the > >>> - > >> static flag > >>> should do from lib/automake.mk. Commenting the below line achieves this: > >>> # lib_libopenvswitchavx512_la_LDFLAGS = -static > >>> > >>> With that above change, the shared build of OVS links to a separate .so > >>> for > >> avx512. > >>> $ ldd lib/.libs/libopenvswitch.so > >>> libopenvswitchavx512.so.0 => > >> ~/path/to/ovs/lib/.libs/libopenvswitchavx512.so.0 (0x00007f2a2c55d000) > >>> > >>> Note in this case, the .spec file handles the .so with the > >>> %{_libdir}/lib*.so.* > >> glob, > >>> so no changes would be required due to the wildcarding in place already. > >>> > >>> > >>>> Harry, Ian, could you, please, take a look? > >>> > >>> Thanks for flagging, detailed response above. We have two solutions: > >>> 1) Keep static linking as today, and add the proposed line in the .spec > >>> file as > >> per patch > >>> 2) Remove the -static flag, doing shared builds of ISA optimized code and > >> linking with LD. > >>> > >>> I took approach 1) in the patchset, but switching to 2) is a one-line > >>> change as > >> above. > >>> > >>> Developers/testers: please run "make clean" and "boot.sh" before > >>> configure, > >> the build gets > >>> confused without make clean, and will give strange linker errors on the SO > >> version otherwise. > >>> > >>> > >>>> Best regards, Ilya Maximets. > >>> > >>> Regards, -Harry > >>> > > _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev