Multiqueue support for bpf
Luigi Rizzo
rizzo at iet.unipi.it
Tue Jul 2 13:38:29 UTC 2013
On Mon, Jul 1, 2013 at 2:01 PM, Takuya ASADA <syuu at dokukino.com> wrote:
> Hi all,
>
> I'd like to propose multiqueue support for bpf.
> It's result of GSoC'11, and proposed on freebsd-net at Aug.2011 but not yet
> merged:
>
> http://www.google-melange.com/gsoc/proposal/review/google/gsoc2011/syuu1228/1
> http://lists.freebsd.org/pipermail/freebsd-net/2011-August/029585.html
Do you have an updated URL for the diffs ? The link below from your
original message
seems not working now (NXDOMAIN)
http://www.dokukino.com/mq_bpf_20110813.diff
Specifically, I am curious about the type of mbuf changes, because there
are many
pending changes to the mbufs we'd like to have (such as some local
room/leading space
to store metadata instead of using expensive mtags), and in the interest of
API stability
we should try and make those changes at once.
ifnet changes are also a concern but less important (they are only a
compile time
issue, whereas mbuf changes potentially have an impact on runtime)
cheers
luigi
>
> The objectives of the patch is to support multiqueue NICs on BPF, and
> provide interfaces for multithreaded packet processing using BPF.
> To get optimal performance and to reduce lock contention, multiqueue BPF
> provides a feature to specify hardware queues.
> Following is basic usage of multiqueue BPF:
>
> void *bpf_thread(void *arg) {
> cpu = (int)arg;
> CPU_ZERO(&cpuset);
> CPU_SET(cpu, &cpuset);
> cpuset_setaffinity(CPU_LEVEL_WHICH, CPU_WHICH_TID, -1, sizeof(cpuset),
> &cpuset);
> fd = open("/dev/bpf0", O_RDWR);
> ioctl(fd, BIOCSTRXQMASK, &cpu);
> ioctl(fd, BIOCSTTXQMASK, &cpu);
> /* actual works */
> }
>
> int main(void)
> {
> for (i = 0; i < maxcpus; i++)
> pthread_create(&threads[i], NULL, bpf_thread, (void *)i);
> for (i = 0; i < maxcpus; i++)
> pthread_join(&threads[i], NULL);
> }
>
> In this example, threads[n] bind to CPUn, receives packets from rxqueue n
> and txqueue n.
>
> To implement it, the patch modifies bpf_*tap*() and extends struct ifnet,
> struct mbuf to notify hardware queue information.
>
> The changes are in this branch:
> http://svnweb.freebsd.org/base/user/syuu/mq_bpf/
>
> API descriptions and benchmark results are on previous post:
> http://lists.freebsd.org/pipermail/freebsd-net/2011-August/029585.html
>
> Benchmark program is on this repository:
> https://github.com/syuu1228/mq_bpf_test
> _______________________________________________
> freebsd-net at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-net
> To unsubscribe, send any mail to "freebsd-net-unsubscribe at freebsd.org"
>
--
-----------------------------------------+-------------------------------
Prof. Luigi RIZZO, rizzo at iet.unipi.it . Dip. di Ing. dell'Informazione
http://www.iet.unipi.it/~luigi/ . Universita` di Pisa
TEL +39-050-2211611 . via Diotisalvi 2
Mobile +39-338-6809875 . 56122 PISA (Italy)
-----------------------------------------+-------------------------------
More information about the freebsd-net
mailing list