On 03/02/17 03:47, David Miller wrote:
> From: Nikolay Aleksandrov <niko...@cumulusnetworks.com>
> Date: Tue, 31 Jan 2017 16:31:58 +0100
> 
>> @@ -197,7 +197,8 @@ int br_handle_frame_finish(struct net *net, struct sock 
>> *sk, struct sk_buff *skb
>>              if (dst->is_local)
>>                      return br_pass_frame_up(skb);
>>  
>> -            dst->used = jiffies;
>> +            if (br->used_enabled)
>> +                    dst->used = jiffies;
> 
> Have you tried:
> 
>       if (dst->used != jiffies)
>               dst->used = jiffies;
> 
> If that isn't effective, you can tweak the test to decrease the
> granularity of the value.  Basically, if dst->used is within
> 1 HZ of jiffies, don't do the write.
> 
> I suspect this might help a lot, and not require a new bridging
> option.
> 

After running a ton of tests with different granularity settings and 
improvements
similar to:

br->jiffy_update_mask = rounddown_pow_of_two(clock_t_to_jiffies(1)) - 1

fast_path:
if (!(jiffies & br->jiffy_update_mask) && dst->used != jiffies)
        dst->used = jiffies;

in order to bring down the updates even lower, it seems that just going with the
comparison is enough - I can't see any measurable win by bringing it even lower 
(e.g.
HZ / USER_HZ granularity).

So I'm going with the simpler approach and just doing the comparison.

Thanks,
 Nik


Reply via email to