On Tue, Dec 8, 2009 at 4:32 PM, erik quanstrom <quans...@quanstro.net> wrote: >> but the former does two operations and the latter >> only one. your claim was that _xinc is slower >> than incref (== lock(), x++, unlock()). but you are >> timing xinc+xdec against incref. > > sure. i was looking it as a kernel version of a > semaphore.
no, your original claim was that incref/decref was faster than _xinc/_xdec. the numbers don't support that claim. > the reference > counting is a heavy price to pay on every network > block, when it is only used by ip/gre.c. has the network gotten fast enough that an extra bus transaction per block slows it down? it seems like gigabit ethernet would be around 100k packets per second, so the extra 50ns or so per packet would be 5ms per second in practice, which is significantly but hardly seems prohibitive. > before allocb/freeb > did 2 lock/unlocks. now it does 2 unlock/locks > + 2 xinc/xdec, and is, in the best case 31% slower. > and in the worst case 90% slower. i don't know how you get those numbers but anything even approaching that would mean that the kernel is spending all its time in igberballoc, at which point you probably have other things to fix. russ