On 04/05/13 03:53, Daniel-Constantin Mierla wrote:
She fallback to user space can happen even during a
call? Or is just
about when the call is initialized, the application detects is some
problem when setting up forwarding rules in the kernel and goes for user
space.
It can happen any time. The socket remains open and the daemon continues
to listen for packets on it. If the daemon receives a packet, it will
process it, which in the normal case will result in it being forwarded.
With the kernel module active and working, the daemon will simply not
see the packets coming in on the socket.
Indeed, this is kind of general feeling, at least
based on theoretical
aspects, but I haven't seen any kind of numbers just to compare and see
how much is worth to go for kernel forwarding.
I did a very simple test, one pseudo-call (one port in, one port out)
with about 35,000 UDP packets per second going each way. Each packet had
150 bytes payload and the test was done on an 8-core Xeon 2.53 GHz
machine running kernel 2.6.32. Under this workload, the daemon registers
with about 90% single-CPU load without kernel forwarding. The daemon is
multi-threaded and so can use multiple cores, but if it weren't, then it
would be about maxed out at this point. Averaged over the 8 cores this
leaves the system around 88% idle. With kernel forwarding enabled,
system CPU usage drops to >99% idle.
cheers