Re: [PATCH net-next 2/2] net: exit busy loop when another process is runnable
From: Jason Wang <jasowang@redhat.com>
Date: 2014-09-02 03:35:56
Also in:
lkml
On 09/01/2014 02:55 PM, Eliezer Tamir wrote:
On 26/08/2014 10:16, Jason Wang wrote:quoted
On 08/25/2014 09:16 PM, Eliezer Tamir wrote:quoted
Here are my 2 cents: I think Ingo's suggestion of only yielding to tasks with same or higher priority makes sense.I'm not sure I get your meaning. Do you mean calling yield_to() directly in sk_busy_loop?Think about the case where two processes are busy polling on the same CPU and the same device queue. Since busy polling processes incoming packets on the queue from any process, this scenario works well currently,
I see, but looks like we can simply do this by exiting the busy loop when ndo_busy_poll() finds something but not for current socket?
and will not work at all when polling yields to other processes that are of the same priority that are running on the same CPU.
So yielding has its limitation, we need let scheduler to do the choice instead.
As a side note, there is a lot of room for improvement when two processes on the same CPU want to busy poll on different device queues. The RFC code I published for epoll support showed one possible way of solving this, but I'm sure that there are other possibilities. Maybe the networking subsystem should maintain a list of device queues that need busypolling and have a thread that would poll all of them when there's nothing better to do.
Not sure whether this method will scale considering thousands of sockets and processes.
I'm aware of similar work on busy polling on NVMe devices, so maybe there should be a global busypoll thread for all devices that support it. BTW, I have someone inside Intel that wants to test future patches. Feel free to send me patches for testing, even if they are not ready for publishing yet. Cheers, Eliezer
Ok, will do it, thanks a lot.