Em sex., 26 de jan. de 2024 às 09:21, Frode Nordahl <
frode.nord...@canonical.com> escreveu:

>
>
> fre. 26. jan. 2024, 13:03 skrev Roberto Bartzen Acosta <
> roberto.aco...@luizalabs.com>:
>
>>
>>
>> Em sex., 26 de jan. de 2024 às 04:37, Frode Nordahl <
>> frode.nord...@canonical.com> escreveu:
>>
>>> On Thu, Jan 25, 2024 at 10:44 PM Frode Nordahl
>>> <frode.nord...@canonical.com> wrote:
>>> >
>>> >
>>> >
>>> > tor. 25. jan. 2024, 22:32 skrev Roberto Bartzen Acosta <
>>> roberto.aco...@luizalabs.com>:
>>> >>
>>> >>
>>> >>
>>> >> Em qui., 25 de jan. de 2024 às 17:01, Frode Nordahl <
>>> frode.nord...@canonical.com> escreveu:
>>> >>>
>>> >>> Apologies for the tardy response to this thread, freeze deadlines and
>>> >>> PTO has prevented me from responding sooner.
>>> >>>
>>> >>> On Mon, Jan 15, 2024 at 12:14 PM Roberto Bartzen Acosta
>>> >>> <roberto.aco...@luizalabs.com> wrote:
>>> >>> >
>>> >>> >
>>> >>> >
>>> >>> > Em qua., 10 de jan. de 2024 às 15:37, Ilya Maximets <
>>> i.maxim...@redhat.com> escreveu:
>>> >>> > >
>>> >>> > > On 1/9/24 13:53, Simon Horman wrote:
>>> >>> > > > On Mon, Jan 08, 2024 at 08:34:36AM -0300, Roberto Bartzen
>>> Acosta via dev wrote:
>>> >>> > > >> Current version of debian/rules simply uses the default lto
>>> GCC
>>> >>> > > >> optimization settings during the linkage process.
>>> >>> > > >>
>>> >>> > > >> The main problem with this approach is that GCC on OS like
>>> Ubuntu
>>> >>> > > >> Jammy, for example, can enable the -flto=auto option during
>>> the
>>> >>> > > >> openvswitch building and linking process. In this case, the
>>> linked
>>> >>> > > >> dynamic libraries would need to be builded based on the same
>>> lto
>>> >>> > > >> optimization options, at the risk of not working, according to
>>> >>> > > >> documentation [1].
>>> >>>
>>> >>> The documentation also says:
>>> >>> "When producing the final binary, GCC only applies link-time
>>> >>> optimizations to those files that contain bytecode. Therefore, you
>>> can
>>> >>> mix and match object files and libraries with GIMPLE bytecodes and
>>> >>> final object code. GCC automatically selects which files to optimize
>>> >>> in LTO mode and which files to link without further processing."
>>> >>>
>>> >>> Which to me reads like it is supported to mix LTO optimized and
>>> >>> non-optimized objects?
>>> >>
>>> >>
>>> >> Yeah, that makes sense but another important doc reference is "The
>>> important thing to keep in mind is that to enable link-time optimizations
>>> you need to use the GCC driver to perform the link step. GCC automatically
>>> performs link-time optimization if any of the objects involved were
>>> compiled with the -flto command-line option." . So, my assumption is that
>>> LTO was automatically enabled because some of the objects involved in
>>> compiling with the jammy dev environment support it.
>>> >>
>>> >> In that case, the LTO documentation suggests that we always used
>>> -flto with some optimization flag (e.g. -O2) both at compile time and at
>>> link time. So, AFAIU, you should link the code using exactly the same
>>> optimization flags used at compile time, and the statement about
>>> "automatically selects which files to optimize in LTO" is correct as long
>>> as it is possible to read the GIMPLE bytecode of the objects involved for
>>> the optimization option passed (in our case: jemalloc).  As detailed in the
>>> doc, the idea of -flto is to inject in the object files some internal
>>> (GIMPLE-bytecode) representation of the source code, and that is also used
>>> at link time because, for optimization steps, the inlining bytecode happens
>>> again when linking your whole program. The libjemalloc has its own
>>> headers/inline (or inlinable) functions that also need to use LTO with some
>>> optimization option (e.g. -O2) when compiling that library from its source
>>> code (and in that case its GIMPLE bytecode is stored in the library).
>>> >>
>>> >> In summary, my assumption is that, probably, libjemalloc installed on
>>> OS didn't generate the GIMPLE bytecode properly to be used in the complete
>>> build and linking process with the optimization option passed by
>>> openvswitch. In other words, the issue seems to be with the jemalloc lib in
>>> the OS Jammy.
>>> >
>>> >
>>> > If that is the case, should we not fix the jemalloc build instead?
>>> >
>>> >> So, why am I making a possible change to remove the LTO flag from the
>>> openvswitch build process?  because the linkage process is susceptible to
>>> OS-GCC decisions that can generate incoherent results in some cases.
>>> >>
>>> >>>
>>> >>>
>>> >>> > > >>
>>> >>> > > >> I'm not sure of the real benefits of using this link-time
>>> optimization
>>> >>> > >
>>> >>> > > At least for DPDK-enabled builds LTO usually provides noticeable
>>> >>> > > performance improvement.  In the past I measured up to 10% packet
>>> >>> > > rate increase with LTO.  Though the gap went a bit lower with
>>> modern
>>> >>> > > compilers.  I think, it should still provide noticeable
>>> performance
>>> >>> > > improvements at least for the userspace datapath.
>>> >>> > >
>>> >>> > > >> option, and since when it is enabled it causes problems with
>>> shared
>>> >>> > > >> libs link libjemalloc, for example, it seems safer overwritten
>>> >>> > > >> compiler decision by passing -fno-lto command.
>>> >>> > >
>>> >>> > > Building shared libraries with LTO is indeed a bit problematic.
>>> >>> > > I agree that correctness should have a priority over potential
>>> >>> > > performance benefits.
>>> >>> > >
>>> >>> > > Just out of curiosity, how do you add jemalloc into dependencies?
>>> >>> > > Using one of the environment variables?
>>> >>> >
>>> >>> > yeap, I'm just using the standard libs flag on a Ubuntu OS as
>>> suggested by the OpenvSwitch documentation (LIBS=-ljemalloc ) [1]
>>> >>> >
>>> >>> > override_dh_auto_configure:
>>> >>> > test -d _debian || mkdir _debian
>>> >>> > cd _debian && ( \
>>> >>> > test -e Makefile || \
>>> >>> > ../configure --prefix=/usr --localstatedir=/var --enable-ssl
>>> LIBS=-ljemalloc \
>>> >>> > --sysconfdir=/etc \
>>> >>> > $(DATAPATH_CONFIGURE_OPTS) \
>>> >>> > $(EXTRA_CONFIGURE_OPTS) \
>>> >>> > )
>>> >>> >
>>> >>> >
>>> >>> > [1] https://docs.openvswitch.org/en/latest/intro/install/general/
>>> >>>
>>> >>> This made me scratch my head, because in recent development efforts I
>>> >>> found the need to rebuild a package linking OVS to libunwind, which
>>> is
>>> >>> not the default for the package. And this worked fine, despite having
>>> >>> the default Ubuntu LTO settings applied. Furthermore both the
>>> >>> libunwind and libjemalloc packages appear to be built with the
>>> default
>>> >>> LTO settings as well.
>>> >>
>>> >>
>>> >> Please, could you check if you can build and link correctly with
>>> jemalloc in your environment?
>>> >
>>> >
>>> > It does not, and my point is that this appears to be specifically
>>> about jemalloc and not about shared libraries and LTO in general, which is
>>> why I'm arguing not to change the LTO settings.
>>> >
>>> >>
>>> >>>
>>> >>> > >
>>> >>> > > >>
>>> >>> > > >> [1]
>>> https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-flto
>>> >>> > > >>
>>> >>> > > >> Reported-at:
>>> https://bugs.launchpad.net/ubuntu/+source/openvswitch/+bug/2015748
>>> >>> > > >> Signed-off-by: Roberto Bartzen Acosta <rbart...@gmail.com>
>>> >>> > > >
>>> >>> > > > Hi,
>>> >>> > > >
>>> >>> > > > for one reason or another our automation was unable to apply
>>> this patch.
>>> >>> > > > But I have done so locally in my own tree (it is not upstream)
>>> >>> > > > and run the GitHub based tests with success:
>>> >>> > > >
>>> >>> > > > https://github.com/horms/ovs/actions/runs/7448358289
>>> >>> > > >
>>> >>> > > > From my point of view this patch seems reasonable.
>>> >>> > > >
>>> >>> > > > Acked-by: Simon Horman <ho...@ovn.org>
>>> >>> > > >
>>> >>> > > > But I would be interested to hear feedback from others before
>>> applying it
>>> >>> > > > to the upstream tree.
>>> >>> > >
>>> >>> > > @Frode, do you have any thoughts on this change?  Is it a problem
>>> >>> > > also for the main (in-distribution) Ubuntu/Debian builds?
>>> >>>
>>> >>> TBH, I'm not convinced the LTO configuration is the root of the
>>> issue,
>>> >>> and I'd prefer if we left the LTO options alone and figured out
>>> what's
>>> >>> really going on here.
>>> >>
>>> >>
>>> >> I would really appreciate your help figuring this out ;)
>>> >
>>> >
>>> > Sure, let's try to figure it out.
>>>
>>> Building the package with:
>>>
>>>     EXTRA_CONFIGURE_OPTS='CFLAGS=-fno-builtin LIBS=-ljemalloc'
>>>
>>> appears to fix this for me, does that work for you?
>>>
>>>
>> yeah! Thank you!
>> I tested using a bit different export flags but with the same idea, and
>> it works!
>>
>> So, my initial assumption about jemalloc issue with inline functions +
>> LTO seems to be right! However, enable buildin flag represents to use link
>> using Inline functions, instead of generating a function call. This saves a
>> function call and can be more optimized and useful for a large improvement
>> in terms of performances.
>>
>> My question then would be what is the best approach: disable LTO or
>> disable built in...
>>
>> What do you think about this?
>>
>
> It depends a bit on what your goal is. The default for the package will
> remain using malloc from libc, for which the current defaults are fine,
> meaning no change is necessary.
>
> If you will be rebuilding the package anyway you're free to choose the
> path that appears best to you.
>
> To help future travelers we should probably mention this in the
> documentation around the same place where LIBS=-ljemalloc is currently
> mentioned.
>
> Would you be interested in repurposing your patch submission for that?
>

Sure, will do!
I'll just update the documentation by mentioning the additional flags that
may be required to link with jemalloc.


>
> PS: One alternative might be to patch in jemalloc at runtime without any
> rebuilding using the LD_PRELOAD trick [2], have not confirmed whether it
> works in this specific case.
>
> 2: https://github.com/jemalloc/jemalloc/wiki/Getting-Started
>
> --
> Frode Nordahl
>
>
>>
>> export DEB_CFLAGS_MAINT_APPEND = -fPIC -fno-builtin
>> override_dh_auto_configure:
>> test -d _debian || mkdir _debian
>> cd _debian && ( \
>> test -e Makefile || \
>> ../configure --prefix=/usr --localstatedir=/var --enable-ssl
>> LIBS=-ljemalloc \
>> --sysconfdir=/etc \
>> $(DATAPATH_CONFIGURE_OPTS) \
>> $(EXTRA_CONFIGURE_OPTS) \
>> )
>>
>> readelf -a
>> ./debian/openvswitch-switch/usr/lib/openvswitch-switch/ovs-vswitchd | grep
>> jemalloc -B 20 -A 5
>>    03     .init .plt .plt.got .plt.sec .text .fini
>>    04     .rodata .eh_frame_hdr .eh_frame
>>    05     .tdata .init_array .fini_array .data.rel.ro .dynamic .got
>> .data .bss
>>    06     .dynamic
>>    07     .note.gnu.property
>>    08     .note.gnu.build-id .note.ABI-tag
>>    09     .tdata .tbss
>>    10     .note.gnu.property
>>    11     .eh_frame_hdr
>>    12
>>    13     .tdata .init_array .fini_array .data.rel.ro .dynamic .got
>>
>> Dynamic section at offset 0x26b348 contains 37 entries:
>>   Tag        Type                         Name/Value
>>  0x0000000000000001 (NEEDED)             Shared library: [libssl.so.3]
>>  0x0000000000000001 (NEEDED)             Shared library: [libcrypto.so.3]
>>  0x0000000000000001 (NEEDED)             Shared library: [libcap-ng.so.0]
>>  0x0000000000000001 (NEEDED)             Shared library: [libnuma.so.1]
>>  0x0000000000000001 (NEEDED)             Shared library: [libbpf.so.0]
>>  0x0000000000000001 (NEEDED)             Shared library: [libm.so.6]
>>  0x0000000000000001 (NEEDED)             Shared library:
>> [libjemalloc.so.2]
>>  0x0000000000000001 (NEEDED)             Shared library: [libunbound.so.8]
>>  0x0000000000000001 (NEEDED)             Shared library: [libunwind.so.8]
>>  0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
>>  0x0000000000000001 (NEEDED)             Shared library:
>> [ld-linux-x86-64.so.2]
>>  0x000000000000000c (INIT)               0x22000
>>
>>
>>
>>> --
>>> Frode Nordahl
>>>
>>> > --
>>> > Frode Nordahl
>>> >
>>> >> Thanks
>>> >> Roberto
>>> >>>
>>> >>>
>>> >>> --
>>> >>> Frode Nordahl
>>> >>>
>>> >>> > > >
>>> >>> > > >> ---
>>> >>> > > >>  debian/rules | 2 +-
>>> >>> > > >>  1 file changed, 1 insertion(+), 1 deletion(-)
>>> >>> > > >>
>>> >>> > > >> diff --git a/debian/rules b/debian/rules
>>> >>> > > >> index dc5cc8a65..de8771813 100755
>>> >>> > > >> --- a/debian/rules
>>> >>> > > >> +++ b/debian/rules
>>> >>> > > >> @@ -2,7 +2,7 @@
>>> >>> > > >>  # -*- makefile -*-
>>> >>> > > >>  #export DH_VERBOSE=1
>>> >>> > > >>  export DEB_BUILD_MAINT_OPTIONS = hardening=+all
>>> >>> > > >> -export DEB_CFLAGS_MAINT_APPEND = -fPIC
>>> >>> > > >> +export DEB_CFLAGS_MAINT_APPEND = -fPIC -fno-lto
>>> >>> > >
>>> >>> >
>>> >>> >
>>> >>> > ‘Esta mensagem é direcionada apenas para os endereços constantes
>>> no cabeçalho inicial. Se você não está listado nos endereços constantes no
>>> cabeçalho, pedimos-lhe que desconsidere completamente o conteúdo dessa
>>> mensagem e cuja cópia, encaminhamento e/ou execução das ações citadas estão
>>> imediatamente anuladas e proibidas’.
>>> >>> >
>>> >>> >  ‘Apesar do Magazine Luiza tomar todas as precauções razoáveis
>>> para assegurar que nenhum vírus esteja presente nesse e-mail, a empresa não
>>> poderá aceitar a responsabilidade por quaisquer perdas ou danos causados
>>> por esse e-mail ou por seus anexos’.
>>> >>
>>> >>
>>> >>
>>> >> ‘Esta mensagem é direcionada apenas para os endereços constantes no
>>> cabeçalho inicial. Se você não está listado nos endereços constantes no
>>> cabeçalho, pedimos-lhe que desconsidere completamente o conteúdo dessa
>>> mensagem e cuja cópia, encaminhamento e/ou execução das ações citadas estão
>>> imediatamente anuladas e proibidas’.
>>> >>
>>> >>  ‘Apesar do Magazine Luiza tomar todas as precauções razoáveis para
>>> assegurar que nenhum vírus esteja presente nesse e-mail, a empresa não
>>> poderá aceitar a responsabilidade por quaisquer perdas ou danos causados
>>> por esse e-mail ou por seus anexos’.
>>>
>>
>>
>> *‘Esta mensagem é direcionada apenas para os endereços constantes no
>> cabeçalho inicial. Se você não está listado nos endereços constantes no
>> cabeçalho, pedimos-lhe que desconsidere completamente o conteúdo dessa
>> mensagem e cuja cópia, encaminhamento e/ou execução das ações citadas estão
>> imediatamente anuladas e proibidas’.*
>>
>>  *‘Apesar do Magazine Luiza tomar todas as precauções razoáveis para
>> assegurar que nenhum vírus esteja presente nesse e-mail, a empresa não
>> poderá aceitar a responsabilidade por quaisquer perdas ou danos causados
>> por esse e-mail ou por seus anexos’.*
>>
>

-- 




_‘Esta mensagem é direcionada apenas para os endereços constantes no 
cabeçalho inicial. Se você não está listado nos endereços constantes no 
cabeçalho, pedimos-lhe que desconsidere completamente o conteúdo dessa 
mensagem e cuja cópia, encaminhamento e/ou execução das ações citadas estão 
imediatamente anuladas e proibidas’._


* **‘Apesar do Magazine Luiza tomar 
todas as precauções razoáveis para assegurar que nenhum vírus esteja 
presente nesse e-mail, a empresa não poderá aceitar a responsabilidade por 
quaisquer perdas ou danos causados por esse e-mail ou por seus anexos’.*



_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to