Date: Wed, 07 Sep 2011 18:52:17 +0400 From: "Alexander V. Chernikov" <melifaro@yandex-team.ru> To: freebsd-net@freebsd.org, jfvogel@gmail.com, melifaro@ipfw.ru Subject: igb/ixgbe RSS/RX queues for non-IP traffic Message-ID: <4E678521.7080006@yandex-team.ru>
next in thread | raw e-mail | index | archive | help
Hello list! (CC'in Jack Vogel since this is intel drivers/hardware specific question) There are some techniques for assigning network traffic to different NIC RX queues (bound to different CPUs/cores). The main problem for all techniques is avoiding any possible packet reordering in single flow. Most obvious (and most used) are described in Microsoft NDIS driver specification: Hashing is done on various tuples like: * IPv46 src/dst + TCP/UDP src/dst port for TCP/UDP * IPv46 src/dst for general IPv46 traffic igb's have a bit more options like assigning selected ethertype or TCP SYN to different queue (See section 7.1.1 of 82576EB datasheet) ixgbe (82599) goes even more far: flow director functionality permits 8K 'perfect match' filters allowing to select any subset in: * vlan * IPv46 src/dst * L4 proto * TCP/UDP/SCTP protocol ports and even 'flexible 2-byte tuple anywhere in the first 64 bytes of the packet' There are other possibilities to assign traffic to different queues in ixbge like using .1q priority filed (DCB functionality) More information can be found in sections 7.1.2 (RX queues assignment), 7.1.2.7(Flow Director), 7.7.1 (DCB) of 82599 datasheet However, there are many setups where PC can be used as platform for routing/dispatching non-IP traffic. PPPoE server is a typical example. People have to do some tricks (link aggregation, non-direct ISR) to get traffic dispatched by more than single CPU/core, but this much less efficient. I'm a bit curious: why some generic hashing mechanism based on something like 'flexible 2-byte tuple anywhere in the first 64 bytes of the packet' were not added? It can be (at least from my point of view) easily based on (for example) flow director functionality. Particularly I'm trying to figure out how can I use all this variety of filters to get MPLS traffic split to different RX queues. Maybe someone can point me to the right direction? -- Alexander V. Chernikov Yandex NOC
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4E678521.7080006>