在 2020/11/25 3:24, Jakub Kicinski 写道:
> On Fri, 20 Nov 2020 07:38:36 +0800 we...@ucloud.cn wrote:
>> +int tcf_dev_queue_xmit(struct sk_buff *skb, int (*xmit)(struct sk_buff 
>> *skb))
>> +{
>> +    xmit_hook_func *xmit_hook;
>> +
>> +    xmit_hook = rcu_dereference(tcf_xmit_hook);
>> +    if (xmit_hook)
>> +            return xmit_hook(skb, xmit);
>> +    else
>> +            return xmit(skb);
>> +}
>> +EXPORT_SYMBOL_GPL(tcf_dev_queue_xmit);
> I'm concerned about the performance impact of these indirect calls.
>
> Did you check what code compiler will generate? What the impact with
> retpolines enabled is going to be?
>
> Now that sch_frag is no longer a module this could be simplified.
>
> First of all - xmit_hook can only be sch_frag_xmit_hook, so please use
> that directly. 
>
>       if (READ_ONCE(tcf_xmit_hook_count)) 
>               sch_frag_xmit_hook(...
>       else
>               dev_queue_xmit(...
>
> The abstraction is costly and not necessary right now IMO.
>
> Then probably the counter should be:
>
>       u32 __read_mostly tcf_xmit_hook_count;
>
> To avoid byte loads and having it be places in an unlucky cache line.
Maybe a static key replace  tcf_xmit_hook_count is more simplified?

DEFINE_STATIC_KEY_FALSE(tcf_xmit_hook_in_use);

Reply via email to