All of lore.kernel.org
 help / color / mirror / Atom feed
From: James Chapman <jchapman@katalix.com>
To: Jan-Bernd Themann <ossthema@de.ibm.com>
Cc: tklein@de.ibm.com, themann@de.ibm.com, stefan.roscher@de.ibm.com,
	netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
	raisch@de.ibm.com, linuxppc-dev@ozlabs.org, akepner@sgi.com,
	meder@de.ibm.com, shemminger@linux-foundation.org,
	David Miller <davem@davemloft.net>
Subject: Re: RFC: issues concerning the next NAPI interface
Date: Tue, 28 Aug 2007 15:55:42 +0100	[thread overview]
Message-ID: <46D4376E.3000900@katalix.com> (raw)
In-Reply-To: <200708281348.21302.ossthema@de.ibm.com>

Jan-Bernd Themann wrote:
> On Tuesday 28 August 2007 11:22, James Chapman wrote:
>>> So in this scheme what runs ->poll() to process incoming packets?
>>> The hrtimer?
>> No, the regular NAPI networking core calls ->poll() as usual; no timers 
>> are involved. This scheme simply delays the napi_complete() from the 
>> driver so the device stays in the poll list longer. It means that its 
>> ->poll() will be called when there is no work to do for 1-2 jiffies, 
>> hence the optimization at the top of ->poll() to efficiently handle that 
>> case. The device's ->poll() is called by the NAPI core until it has 
>> continuously done no work for 1-2 jiffies, at which point it finally 
>> does the netif_rx_complete() and re-enables its interrupts.
>>
> I'm not sure if I understand your approach correctly.
> This approach may reduce the number of interrupts, but it does so
> by blocking the CPU for up to 1 jiffy (that can be quite some time
> on some platforms). So no other application / tasklet / softIRQ type
> can do anything in between.

I think I've misread the reworked NAPI net_rx_action code. I thought 
that it ran each device ->poll() just once, rescheduling the NET_RX 
softirq again if a device stayed in polled mode. I can see now that it 
loops while one or more devices stays in the poll list for up to a 
jiffy, just like it always has. So by keeping the device in the poll 
list and not consuming quota, net_rx_action() spins until the next jiffy 
tick unless another device consumes quota, like you say.

I can only assume that the encouraging results that I get with this 
scheme are specific to my test setups (measuring packet forwarding 
rates). I agree that it isn't desirable to tie up the CPU for up to a 
jiffy in net_rx_action() in order to do this. I need to go away and 
rework my ideas. Perhaps it is possible to get the behavior I'm looking 
for by somehow special-casing the zero return from ->poll() in 
net_rx_action(), but I'm not sure.

Thanks for asking questions.

-- 
James Chapman
Katalix Systems Ltd
http://www.katalix.com
Catalysts for your Embedded Linux software development

WARNING: multiple messages have this Message-ID (diff)
From: James Chapman <jchapman@katalix.com>
To: Jan-Bernd Themann <ossthema@de.ibm.com>
Cc: David Miller <davem@davemloft.net>,
	shemminger@linux-foundation.org, akepner@sgi.com,
	netdev@vger.kernel.org, raisch@de.ibm.com, themann@de.ibm.com,
	linux-kernel@vger.kernel.org, linuxppc-dev@ozlabs.org,
	meder@de.ibm.com, tklein@de.ibm.com, stefan.roscher@de.ibm.com
Subject: Re: RFC: issues concerning the next NAPI interface
Date: Tue, 28 Aug 2007 15:55:42 +0100	[thread overview]
Message-ID: <46D4376E.3000900@katalix.com> (raw)
In-Reply-To: <200708281348.21302.ossthema@de.ibm.com>

Jan-Bernd Themann wrote:
> On Tuesday 28 August 2007 11:22, James Chapman wrote:
>>> So in this scheme what runs ->poll() to process incoming packets?
>>> The hrtimer?
>> No, the regular NAPI networking core calls ->poll() as usual; no timers 
>> are involved. This scheme simply delays the napi_complete() from the 
>> driver so the device stays in the poll list longer. It means that its 
>> ->poll() will be called when there is no work to do for 1-2 jiffies, 
>> hence the optimization at the top of ->poll() to efficiently handle that 
>> case. The device's ->poll() is called by the NAPI core until it has 
>> continuously done no work for 1-2 jiffies, at which point it finally 
>> does the netif_rx_complete() and re-enables its interrupts.
>>
> I'm not sure if I understand your approach correctly.
> This approach may reduce the number of interrupts, but it does so
> by blocking the CPU for up to 1 jiffy (that can be quite some time
> on some platforms). So no other application / tasklet / softIRQ type
> can do anything in between.

I think I've misread the reworked NAPI net_rx_action code. I thought 
that it ran each device ->poll() just once, rescheduling the NET_RX 
softirq again if a device stayed in polled mode. I can see now that it 
loops while one or more devices stays in the poll list for up to a 
jiffy, just like it always has. So by keeping the device in the poll 
list and not consuming quota, net_rx_action() spins until the next jiffy 
tick unless another device consumes quota, like you say.

I can only assume that the encouraging results that I get with this 
scheme are specific to my test setups (measuring packet forwarding 
rates). I agree that it isn't desirable to tie up the CPU for up to a 
jiffy in net_rx_action() in order to do this. I need to go away and 
rework my ideas. Perhaps it is possible to get the behavior I'm looking 
for by somehow special-casing the zero return from ->poll() in 
net_rx_action(), but I'm not sure.

Thanks for asking questions.

-- 
James Chapman
Katalix Systems Ltd
http://www.katalix.com
Catalysts for your Embedded Linux software development


  parent reply	other threads:[~2007-08-28 14:57 UTC|newest]

Thread overview: 94+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-08-24 13:59 RFC: issues concerning the next NAPI interface Jan-Bernd Themann
2007-08-24 13:59 ` Jan-Bernd Themann
2007-08-24 15:37 ` akepner
2007-08-24 15:37   ` akepner
2007-08-24 15:47   ` Jan-Bernd Themann
2007-08-24 15:47     ` Jan-Bernd Themann
2007-08-24 15:52     ` Stephen Hemminger
2007-08-24 15:52       ` Stephen Hemminger
2007-08-24 16:50       ` David Stevens
2007-08-24 16:50         ` David Stevens
2007-08-24 21:44         ` David Miller
2007-08-24 21:44           ` David Miller
2007-08-24 21:51           ` Linas Vepstas
2007-08-24 21:51             ` Linas Vepstas
2007-08-24 16:51       ` Linas Vepstas
2007-08-24 16:51         ` Linas Vepstas
2007-08-24 17:07         ` Rick Jones
2007-08-24 17:07           ` Rick Jones
2007-08-24 17:45         ` Shirley Ma
2007-08-24 17:45           ` Shirley Ma
2007-08-24 17:16       ` James Chapman
2007-08-24 17:16         ` James Chapman
2007-08-24 18:11         ` Jan-Bernd Themann
2007-08-24 18:11           ` Jan-Bernd Themann
2007-08-24 21:47         ` David Miller
2007-08-24 21:47           ` David Miller
2007-08-24 22:06           ` akepner
2007-08-24 22:06             ` akepner
2007-08-26 19:36           ` James Chapman
2007-08-26 19:36             ` James Chapman
2007-08-27  1:58             ` David Miller
2007-08-27  1:58               ` David Miller
2007-08-27  9:47               ` Jan-Bernd Themann
2007-08-27  9:47                 ` Jan-Bernd Themann
2007-08-27 20:37                 ` David Miller
2007-08-27 20:37                   ` David Miller
2007-08-28 11:19                   ` Jan-Bernd Themann
2007-08-28 11:19                     ` Jan-Bernd Themann
2007-08-28 20:21                     ` David Miller
2007-08-28 20:21                       ` David Miller
2007-08-29  7:10                       ` Jan-Bernd Themann
2007-08-29  7:10                         ` Jan-Bernd Themann
2007-08-29  8:15                         ` James Chapman
2007-08-29  8:15                           ` James Chapman
2007-08-29  8:43                           ` Jan-Bernd Themann
2007-08-29  8:43                             ` Jan-Bernd Themann
2007-08-29  8:29                         ` David Miller
2007-08-29  8:29                           ` David Miller
2007-08-29  8:31                           ` Jan-Bernd Themann
2007-08-29  8:31                             ` Jan-Bernd Themann
2007-08-27 15:51               ` James Chapman
2007-08-27 15:51                 ` James Chapman
2007-08-27 16:02                 ` Jan-Bernd Themann
2007-08-27 16:02                   ` Jan-Bernd Themann
2007-08-27 17:05                   ` James Chapman
2007-08-27 17:05                     ` James Chapman
2007-08-27 21:02                 ` David Miller
2007-08-27 21:02                   ` David Miller
2007-08-27 21:41                   ` James Chapman
2007-08-27 21:41                     ` James Chapman
2007-08-27 21:56                     ` David Miller
2007-08-27 21:56                       ` David Miller
2007-08-28  9:22                       ` James Chapman
2007-08-28  9:22                         ` James Chapman
2007-08-28 11:48                         ` Jan-Bernd Themann
2007-08-28 11:48                           ` Jan-Bernd Themann
2007-08-28 12:16                           ` Evgeniy Polyakov
2007-08-28 12:16                             ` Evgeniy Polyakov
2007-08-28 14:55                           ` James Chapman [this message]
2007-08-28 14:55                             ` James Chapman
2007-08-28 11:21                   ` Jan-Bernd Themann
2007-08-28 11:21                     ` Jan-Bernd Themann
2007-08-28 20:25                     ` David Miller
2007-08-28 20:25                       ` David Miller
2007-08-28 20:27                     ` David Miller
2007-08-28 20:27                       ` David Miller
2007-08-24 16:45 ` Linas Vepstas
2007-08-24 16:45   ` Linas Vepstas
2007-08-24 21:43   ` David Miller
2007-08-24 21:43     ` David Miller
2007-08-24 21:32 ` David Miller
2007-08-24 21:32   ` David Miller
2007-08-24 21:37 ` David Miller
2007-08-24 21:37   ` David Miller
     [not found] <8VHRR-45R-17@gated-at.bofh.it>
     [not found] ` <8VKwj-8ke-27@gated-at.bofh.it>
2007-08-24 19:04   ` Bodo Eggert
2007-08-24 19:04     ` Bodo Eggert
2007-08-24 20:42     ` Linas Vepstas
2007-08-24 20:42       ` Linas Vepstas
2007-08-24 21:11       ` Jan-Bernd Themann
2007-08-24 21:11         ` Jan-Bernd Themann
2007-08-24 21:35         ` Linas Vepstas
2007-08-24 21:35           ` Linas Vepstas
     [not found]   ` <E1IOeSm-0000bm-Jo__24045.532072387$1187982363$gmane$org@be1.lrz>
2007-08-24 20:24     ` Stephen Hemminger
  -- strict thread matches above, loose matches on Subject: below --
2007-08-25  2:10 Mitchell Erblich

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=46D4376E.3000900@katalix.com \
    --to=jchapman@katalix.com \
    --cc=akepner@sgi.com \
    --cc=davem@davemloft.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@ozlabs.org \
    --cc=meder@de.ibm.com \
    --cc=netdev@vger.kernel.org \
    --cc=ossthema@de.ibm.com \
    --cc=raisch@de.ibm.com \
    --cc=shemminger@linux-foundation.org \
    --cc=stefan.roscher@de.ibm.com \
    --cc=themann@de.ibm.com \
    --cc=tklein@de.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.