All of lore.kernel.org
 help / color / mirror / Atom feed
* Best way to set kernel thread affinity for handling a socket?
@ 2012-08-22 16:10 Roland Dreier
  2012-08-22 16:21 ` Ben Hutchings
  0 siblings, 1 reply; 5+ messages in thread
From: Roland Dreier @ 2012-08-22 16:10 UTC (permalink / raw)
  To: netdev

Hi everyone,

Let's say I have kernel code that's sitting in a loop doing
kernel_accept() on a TCP socket.  As each connection comes in, it
forks off a kernel thread to deal with that socket.

If I have a modern NIC with RSS and multiple queues, each TCP flow is
going to be steered to one queue, which is probably bound to one CPU.
So when I fork off that kernel thread, I'd like to bind it to the CPU
where its NIC queues are going to be processed.  My question is, how
do I find out which CPU that is?  Is there anything in the new socket
structure I get back from kernel_accept() that I can look at to know
which CPU the packets came in on?

I'm thinking about this in the context of the kernel's iSCSI target
code (drivers/target/iscsi), which creates threads to handle each
iSCSI connection and sets their CPU affinity pretty much randomly
(well, based on some "thread id", cf iscsit_thread_get_cpumask()).
And with a modern NIC, this leads to packets being received on one CPU
but the data being consumed on another CPU, all the time, which is
obviously far from optimal.

Thanks!
  Roland

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2012-08-23 17:56 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-08-22 16:10 Best way to set kernel thread affinity for handling a socket? Roland Dreier
2012-08-22 16:21 ` Ben Hutchings
2012-08-23 17:04   ` Roland Dreier
2012-08-23 17:51     ` Ben Hutchings
2012-08-23 17:56     ` Chris Friesen

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.