if_var.h micro-optimization

rihad rihad at mail.ru
Fri May 30 16:00:43 UTC 2008


Bruce M. Simpson wrote:
> rihad wrote:
>> Not sure if this is a worthwhile optimization? FreeBSD 7.0
>>
>> --- /usr/src/sys/net/if_var.h   2007-12-07 09:46:08.000000000 +0400
>> +++ if_var.h    2008-05-30 18:10:25.000000000 +0500
>> @@ -282,7 +282,8 @@
>>         if (m) {                                                \
>>                 if (((ifq)->ifq_head = (m)->m_nextpkt) == NULL) \
>>                         (ifq)->ifq_tail = NULL;                 \
>> -               (m)->m_nextpkt = NULL;                          \
>> +               else                                            \
>> +                       (m)->m_nextpkt = NULL;                  \
>>                 (ifq)->ifq_len--;                               \
>>         }                                                       \
>>  } while (0)
> 
> It could save dirtying an L2 data cache line at the expense of taking a 
> conditional branch,
Whoa, why don't you take it easy on me :) I'm not that much into kernel 
(or hardware) programming. It's just that reading Ch. 3 of TCP/IP 
Illustrated Vol.2 by Rich Stevens got me digging around FreeBSD source 
code dealing with struct ifnet, where this piece of code caught my 
attention.


> but to evaluate your suggested change requires a lot 
> more data. Do you plan to do this? 
Perhaps there is already a framework for trying out changes in -CURRENT 
and seeing their relative impact, so perhaps someone more experienced 
than I am can see to this?


> Given how _IF_DEQUEUE() is normally 
> used the impact is likely negligible.
Oh, I see. A nice first attempt of mine anyway ;) Thanks.


More information about the freebsd-net mailing list