RE: [PATCH] xps-mq: Transmit Packet Steering for multiqueue
From: Loke, Chetan <hidden>
Date: 2010-09-02 23:17:13
From: Tom Herbert [mailto:therbert@google.com] Sent: September 02, 2010 3:53 PM To: Loke, Chetan Cc: Stephen Hemminger; David Miller; eric.dumazet@gmail.com; netdev@vger.kernel.org Subject: Re: [PATCH] xps-mq: Transmit Packet Steering for multiqueuequoted
userland folks who actually try to exploit the MQ/MSIX-ness willalmostquoted
always pin down their high-prio[or subset of] threads/processes.I don't really see that. Pinning is a last resort and in this context we could only do that on a dedicated server. On a shared server, with many different apps, pinning for MQ/MSIX is not an easy option; meeting scheduler constraints will be the first priority and its up to networking to work with the scheduler to to the right thing. Scheduler aware networking (or vice versa) is important.
For my use-case it's an appliance. Newer adapters might have like 64+(?) h/w queues and not just f/w emulated queues. With these many queues you could partition your threads/queues, no? It's easier to get started that way. All you need is a shim(or just a driver stub because you can then load it on any box that had older kernels) in the kernel that will tell you which queue-set(for a MQ-capable adapter) is still under the high-watermark. If all are full then it should just round-robin(across queues and nodes).So make a syscall(or shoot a mbx-cmd or pick your trick), find out which queue you could use, get the binding info and then launch your threads. So once you narrow down the scope, the scheduler will have less work to do. If the worker threads are short lived then there's no point in this binding. And for long-lived tasks, a couple of initial prep-calls will not hurt performance that much.And if you still care about syscalls at runtime then you could have a dedicated mgmt-thread that will receive async-events from the shim. And all other user-land logic could consult this mgmt-thread.
Tom
Chetan Loke