[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20180923.122915.2174284095784692286.davem@davemloft.net>
Date: Sun, 23 Sep 2018 12:29:15 -0700 (PDT)
From: David Miller <davem@...emloft.net>
To: edumazet@...gle.com
Cc: netdev@...r.kernel.org, michael.chan@...adcom.com,
ariel.elior@...ium.com, eric.dumazet@...il.com,
tariqt@...lanox.com, saeedm@...lanox.com,
jeffrey.t.kirsher@...el.com, jakub.kicinski@...ronome.com,
songliubraving@...com, j.vosburgh@...il.com, vfalico@...il.com,
andy@...yhouse.net
Subject: Re: [PATCH net 00/15] netpoll: avoid capture effects for NAPI
drivers
From: Eric Dumazet <edumazet@...gle.com>
Date: Fri, 21 Sep 2018 15:27:37 -0700
> As diagnosed by Song Liu, ndo_poll_controller() can
> be very dangerous on loaded hosts, since the cpu
> calling ndo_poll_controller() might steal all NAPI
> contexts (for all RX/TX queues of the NIC).
>
> This capture, showing one ksoftirqd eating all cycles
> can last for unlimited amount of time, since one
> cpu is generally not able to drain all the queues under load.
>
> It seems that all networking drivers that do use NAPI
> for their TX completions, should not provide a ndo_poll_controller() :
>
> Most NAPI drivers have netpoll support already handled
> in core networking stack, since netpoll_poll_dev()
> uses poll_napi(dev) to iterate through registered
> NAPI contexts for a device.
I'm having trouble understanding the difference.
If the drivers are processing all of the RX/TX queue draining by hand
in their ndo_poll_controller() method, how is that different from the
generic code walking all of the registererd NAPI instances one by one?
Powered by blists - more mailing lists