From: Rick Jones <rick.jones2@hp.com>
To: netdev <netdev@oss.sgi.com>
Subject: Re: [RFC] netif_rx: receive path optimization
Date: Thu, 31 Mar 2005 14:42:36 -0800 [thread overview]
Message-ID: <424C7CDC.8050801@hp.com> (raw)
In-Reply-To: <1112305084.1073.94.camel@jzny.localdomain>
>>At the risk of again chewing on my toes (yum), if multiple CPUs are pulling
>>packets from the per-device queue there will be packet reordering.
>
>
> ;-> This happens already _today_ on Linux on non-NAPI.
>
> Take the following scenario in non-NAPI.
> -packet 1 arrives
> -interupt happens, NIC bound to CPU0
> - in the meantime packets 2,3 arrive
> - 3 packets put on queue for CPU0
> - interupt processing done
>
> - packet 4 arrives, interupt, CPU1 is bound to NIC
> - in the meantime packets 5,6 arrive
> - CPU1 backlog queue used.
> - interupt processing done
>
> Assume CPU0 is overloaded with other systenm work and CPU1 rx processing
> kicks in first ...
> TCP sees packet 4, 5, 6 before 1, 2, 3 ..
I "never" see that because I always bind a NIC to a specific CPU :) Just about
every networking-intensive benchmark report I've seen has done the same.
> Note Linux is quiet resilient to reordering compared to other OSes (as
> you may know) but avoiding this is a better approach - hence my
> suggestion to use NAPI when you want to do serious TCP.
Would the same apply to NIC->CPU interrupt assignments? That is, bind the NIC to
a single CPU.
>> HP-UX 10.0
>>did just that and it was quite nasty even at low CPU counts (<=4). It was
>>changed by HP-UX 10.20 (ca 1995) to per-CPU queues with queue selection computed
>>from packet headers (hash the IP and TCP/UDP header to pick a CPU) It was called
>>IPS for Inbound Packet Scheduling. 11.0 (ca 1998) later changed that to "find
>>where the connection last ran and queue to that CPU" That was called TOPS -
>>Thread Optimized Packet Scheduling.
>>
>
>
> Dont think we can do that unfortunately: We are screwed by the APIC
> architecture on x86.
The IPS and TOPS stuff was/is post-NIC-interrupt. Low-level driver processing
still happened/s on a specific CPU, it is the higher-level processing which is
done on another CPU. The idea - with TOPS at least, is to try to access the ULP
(TCP, UDP etc) structures on the same CPU as last accessed by the app to
minimize that cache to cache migration.
rick jones
next prev parent reply other threads:[~2005-03-31 22:42 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-03-30 21:28 [PATCH] netif_rx: receive path optimization Stephen Hemminger
2005-03-30 21:57 ` jamal
2005-03-30 22:08 ` jamal
2005-03-30 23:53 ` Stephen Hemminger
2005-03-31 3:16 ` jamal
2005-03-31 20:04 ` [RFC] " Stephen Hemminger
2005-03-31 21:10 ` Jamal Hadi Salim
2005-03-31 21:17 ` Stephen Hemminger
2005-03-31 21:25 ` Jamal Hadi Salim
2005-03-31 21:43 ` Eric Lemoine
2005-03-31 22:02 ` Stephen Hemminger
2005-03-31 21:24 ` Rick Jones
2005-03-31 21:38 ` jamal
2005-03-31 22:42 ` Rick Jones [this message]
2005-03-31 23:03 ` Nivedita Singhvi
2005-03-31 23:28 ` Rick Jones
2005-04-01 0:10 ` Stephen Hemminger
2005-04-01 0:42 ` Rick Jones
2005-04-01 0:30 ` Nivedita Singhvi
2005-03-31 23:36 ` jamal
2005-04-01 0:07 ` Rick Jones
2005-04-01 1:17 ` jamal
2005-04-01 18:22 ` Rick Jones
2005-04-01 16:40 ` Andi Kleen
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=424C7CDC.8050801@hp.com \
--to=rick.jones2@hp.com \
--cc=netdev@oss.sgi.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).