|
|
About ::
TODO ::
Blog ::
RSS ::
Old blog ::
Projects ::
GIT ::
Gallery ::
Notes
Tue, 05 Dec 2006
Badness in postponing work.
RCU is not a perfect solution for existing schemas actually.
Lets consider synchronous situation when object freeing does not only
return memory to the cache, but also perform some additional state machine changes -
like putting reference counters and so on - obviously postponing of such work
likely will not be very good solution, since when we work with fast path, we want
the whole sequence be completed quickly, but not fast first half and postpone
other for a long time.
But even pure memory freeing - i.e. returning mempory to the cache, if being postponed
to RCU callback, can lead to very noticeble performance degradation.
Thinking about better and faster skb processing for netchannels I created
simple patch which just postpones skb freeing (kfree_skbmem(), i.e. pure
releasing memory back to skb cache) to RCU callback invoked from __kfree_skb().
This leads to the following performance degradation (receiving of small packets):

Speed is about 2.5 times slower, although CPU usage is smaller too - likely due to the increased
work of RCU tasklet and increased number of context switches.
As a conclusion: using RCU protected lists of skbs for sockets will lead to major performance
degradation.
As a second conclusion: RCU is not a panacea, so its usage will be limited in netchannels.
/devel/networking :: Link / Comments ()
|