> On Nov 10, 2015, at 7:28 AM, Zoltan Kiss <zoltan.k...@linaro.org> wrote:
> 
> 
> 
>> On 10/11/15 15:08, Grant Likely wrote:
>>> On Tue, Nov 10, 2015 at 3:04 PM, Zoltan Kiss <zoltan.k...@linaro.org> wrote:
>>> 
>>> 
>>>> On 10/11/15 12:04, Grant Likely wrote:
>>>> 
>>>> On Tue, Nov 10, 2015 at 11:08 AM, Maxim Uvarov <maxim.uva...@linaro.org>
>>>> wrote:
>>>>> 
>>>>>> On 10 November 2015 at 13:41, Zoltan Kiss <zoltan.k...@linaro.org> wrote:
>>>>>> 
>>>>>>> On 10/11/15 07:39, Maxim Uvarov wrote:
>>>>>>> 
>>>>>>> And it looks like it's problem in OVS, not in ODP. I.e. OVS should
>>>>>>> allow
>>>>>>> to  use library functions for fast path (where inlines are critical).
>>>>>>> I.e. not just call odp_packet_len(),  but move hole OVS function to
>>>>>>> dynamic library.
>>>>>> 
>>>>>> 
>>>>>> I'm not sure I get your point here, but OVS allows to use dynamic
>>>>>> library
>>>>>> functions on fast path. The problem is that it's slow, because of the
>>>>>> function call overhead.
>>>>> 
>>>>> 
>>>>> I'm not familiar with ovs code. But for example ovs has something like:
>>>>> 
>>>>> ovs_get_and_packet_process()
>>>>> {
>>>>> // here you use some inlines:
>>>>>    pkt = odp_recv();
>>>>>    len = odp_packet_len(pkt);
>>>>> 
>>>>> ... etc.
>>>>> 
>>>>> }
>>>>> 
>>>>> So it's clear for each target arch you needs it's own variant of
>>>>> ovs_get_and_packet_process() function. That function should go from ovs
>>>>> to
>>>>> dynamic library.
>>>> 
>>>> 
>>>> Which library? A library specific to OVS? Or some common ODP library
>>>> that everyone uses? In either case the solution is not scalable. In
>>>> the first case it still requires the app vendor to have a separate
>>>> build for each and every supported target. In the second, it is
>>>> basically argues for all fast-path application-specific code to go
>>>> into a non-app-specific library. That really won't fly.
>>>> 
>>>> I have two answers to this question. One for the short term, and one
>>>> for the long.
>>>> 
>>>> In the short term we have no choice. If we're going to support
>>>> portable application binaries, then we cannot do inlines. ODP simply
>>>> isn't set up to support that. Portable binaries will have to take the
>>>> hit of doing a function call each and every time. It's not fast, but
>>>> it *works*, which at least will set a lowest common denominator. To
>>>> mitigate the problem we could encourage application packages to
>>>> include a generic version (no-inlines, but works everywhere) plus one
>>>> or more optimized builds (with inlines) and the correct binary is
>>>> selected at runtime. Not great, but it is a reasonable answer for the
>>>> short term.
>>> 
>>> 
>>> I would argue for the short term to produce platform specific packages as
>>> well, at least for ODP-OVS. As ODP-OVS is not upstream, we need to produce
>>> an openvswitch-odp package anyway (which would set to conflict with the
>>> normal openvswitch package). My idea is to create openvswitch-odp-[platform]
>>> packages, though I don't know if you can set a wildcard conflict rule during
>>> packaging to make sure only one of them are installed at a time.
>>> 
>>>> 
>>>> For the long term to get away from per-platform builds, I see two
>>>> viable options. Bill suggested the first: Use LLVM to optimize at
>>>> runtime so that thing like inlines get picked up when linked to the
>>>> platform library. There is some precedence of other projects already
>>>> doing this, so this isn't as far fetched as it may seem.
>>> 
>>> 
>>> But wouldn't it tie us down with LLVM?
>> 
>> Does that worry you?
> 
> Only that then we require our applications to use LLVM if they want 
> performance. I don't know the impact of that.

Or they recompile the programs to get the speed. I am sorry but this is not a 
new problem. Most of the embedded folks are use to this. What a vendor of odp 
could do is provide an optimized version of the programs they think are 
important. 

Thanks,
Andrew


> 
>> LLVM is a mature project, open source, and lots
>> of momentum behind it. There are worse things we can do than align
>> with LLVM when it brings capability that we cannot get anywhere else.
>> 
>> g.
> _______________________________________________
> linaro-toolchain mailing list
> linaro-toolchain@lists.linaro.org
> https://lists.linaro.org/mailman/listinfo/linaro-toolchain
_______________________________________________
linaro-toolchain mailing list
linaro-toolchain@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/linaro-toolchain

Reply via email to