On 11 December 2017 at 19:14, Maxim Uvarov <maxim.uva...@linaro.org> wrote:
> odp_init_global() allocates shm, then odp_init_local() / odp_term_local()
> allocates/destroys per thread contexts in array in that shm. I think that
> has to work.

The problem lies in OpenSSL 1.1 "opaque structures" approach. They stopped
providing exact struct definitions which can be embedded somewhere. Another
option would be to switch to libnettle licensed under LGPL-2.1+. It may be
however less optimized compared to OpenSSL.

> On 11 December 2017 at 17:02, Francois Ozog <francois.o...@linaro.org>
> wrote:
>
>> I favor finishing ODP (ex 2.0) integration rather than optimizing
>> linux-generic at this stage.
>>
>> On 11 December 2017 at 14:39, Peltonen, Janne (Nokia - FI/Espoo) <
>> janne.pelto...@nokia.com> wrote:
>>
>> > Hi,
>> >
>> > When playing with IPsec I noticed that the Linux generic
>> > ODP implementation creates a separate OpenSSL crypto context
>> > for each crypto-operation as opposed to doing it at ODP
>> > crypto session creation. With IPsec this adds a lot of
>> > overhead for every packet processed and significantly
>> > reduces packet throughput.
>> >
>> > I wonder what, if anything, should be done about it.
>> >
>> > I already almost sent a patch to create and initialize
>> > crypto contexts only once per session but realized that
>> > it is not that easy.
>> >
>> > Here are some alternatives that came to my mind, but all
>> > of them have their own problems:
>> >
>> > a) Create per-thread OpenSSL contexts at crypto session
>> >    creation time.
>> >    - Does not work with ODP threads that do not share
>> >      their address space since OpenSSL is allocating
>> >      memory through malloc() during context creation.
>> >
>> > b) Do a) plus provide OpenSSL a custom memory allocator
>> >    on top of shared memory.
>> >    - There is no generic heap allocator in ODP code base.
>> >
>> > c) Create per-thread contexts lazily when needed.
>> >    - Creation would work as it would happen in the right
>> >      thread but there would be no way to delete the
>> >      contexts. The thread destroying the ODP crypto
>> >      session cannot delete the per-thread contexts that
>> >      might reside in a different address spaces. That
>> >      thread could ask every other thread to do the
>> >      per-thread cleanup, except that there is no mechanism
>> >      for that without application assistance or big
>> >      changes in the generic ODP code.
>> >
>> > d) Create a limited-size cache of per-thread contexts.
>> >    - This would allow postponing the deletion of each
>> >      context either to the point the cache slot needs
>> >      to be reused or all the way to ODP termination,
>> >      both occuring in the right thread. But this is
>> >      getting complicated and sizing the cache is nasty.
>> >
>> > Any thoughts?
>> >
>> >         Janne
>> >
>> >
>> >
>>
>>
>> --
>> [image: Linaro] <http://www.linaro.org/>
>> François-Frédéric Ozog | *Director Linaro Networking Group*
>> T: +33.67221.6485
>> francois.o...@linaro.org | Skype: ffozog
>>



-- 
With best wishes
Dmitry

Reply via email to