sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget./translations/zh_CN/networking/multi-pf-netdevmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget./translations/zh_TW/networking/multi-pf-netdevmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget./translations/it_IT/networking/multi-pf-netdevmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget./translations/ja_JP/networking/multi-pf-netdevmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget./translations/ko_KR/networking/multi-pf-netdevmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget./translations/sp_SP/networking/multi-pf-netdevmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhH/var/lib/git/docbuild/linux/Documentation/networking/multi-pf-netdev.rsthKubh)}(h4This data file has been placed in the public domain.h]h4This data file has been placed in the public domain.}hhsbah}(h]h ]h"]h$]h&]hhuh1hhhhhho/srv/docbuild/lib/venvs/build-kernel-docs/lib64/python3.9/site-packages/docutils/parsers/rst/include/isonum.txthKubh)}(hDerived from the Unicode character mappings available from . Processed by unicode2rstsubs.py, part of Docutils: .h]hDerived from the Unicode character mappings available from . Processed by unicode2rstsubs.py, part of Docutils: .}hhsbah}(h]h ]h"]h$]h&]hhuh1hhhhhhhhKubhsubstitution_definition)}(h*.. |amp| unicode:: U+00026 .. AMPERSANDh]h&}hhsbah}(h]h ]h"]ampah$]h&]uh1hhhhKhhhhubh)}(h+.. |apos| unicode:: U+00027 .. APOSTROPHEh]h'}hhsbah}(h]h ]h"]aposah$]h&]uh1hhhhKhhhhubh)}(h).. |ast| unicode:: U+0002A .. ASTERISKh]h*}hhsbah}(h]h ]h"]astah$]h&]uh1hhhhK hhhhubh)}(h+.. |brvbar| unicode:: U+000A6 .. BROKEN BARh]h¦}hjsbah}(h]h ]h"]brvbarah$]h&]uh1hhhhK hhhhubh)}(h0.. |bsol| unicode:: U+0005C .. REVERSE SOLIDUSh]h\}hjsbah}(h]h ]h"]bsolah$]h&]uh1hhhhK hhhhubh)}(h*.. |cent| unicode:: U+000A2 .. CENT SIGNh]h¢}hjsbah}(h]h ]h"]centah$]h&]uh1hhhhK hhhhubh)}(h&.. |colon| unicode:: U+0003A .. COLONh]h:}hj-sbah}(h]h ]h"]colonah$]h&]uh1hhhhK hhhhubh)}(h&.. |comma| unicode:: U+0002C .. COMMAh]h,}hj<sbah}(h]h ]h"]commaah$]h&]uh1hhhhKhhhhubh)}(h... |commat| unicode:: U+00040 .. COMMERCIAL ATh]h@}hjKsbah}(h]h ]h"]commatah$]h&]uh1hhhhKhhhhubh)}(h/.. |copy| unicode:: U+000A9 .. COPYRIGHT SIGNh]h©}hjZsbah}(h]h ]h"]copyah$]h&]uh1hhhhKhhhhubh)}(h... |curren| unicode:: U+000A4 .. CURRENCY SIGNh]h¤}hjisbah}(h]h ]h"]currenah$]h&]uh1hhhhKhhhhubh)}(h0.. |darr| unicode:: U+02193 .. DOWNWARDS ARROWh]h↓}hjxsbah}(h]h ]h"]darrah$]h&]uh1hhhhKhhhhubh)}(h,.. |deg| unicode:: U+000B0 .. DEGREE SIGNh]h°}hjsbah}(h]h ]h"]degah$]h&]uh1hhhhKhhhhubh)}(h... |divide| unicode:: U+000F7 .. DIVISION SIGNh]h÷}hjsbah}(h]h ]h"]divideah$]h&]uh1hhhhKhhhhubh)}(h,.. |dollar| unicode:: U+00024 .. DOLLAR SIGNh]h$}hjsbah}(h]h ]h"]dollarah$]h&]uh1hhhhKhhhhubh)}(h,.. |equals| unicode:: U+0003D .. EQUALS SIGNh]h=}hjsbah}(h]h ]h"]equalsah$]h&]uh1hhhhKhhhhubh)}(h1.. |excl| unicode:: U+00021 .. EXCLAMATION MARKh]h!}hjsbah}(h]h ]h"]exclah$]h&]uh1hhhhKhhhhubh)}(h9.. |frac12| unicode:: U+000BD .. VULGAR FRACTION ONE HALFh]h½}hjsbah}(h]h ]h"]frac12ah$]h&]uh1hhhhKhhhhubh)}(h<.. |frac14| unicode:: U+000BC .. VULGAR FRACTION ONE QUARTERh]h¼}hjsbah}(h]h ]h"]frac14ah$]h&]uh1hhhhKhhhhubh)}(h;.. |frac18| unicode:: U+0215B .. VULGAR FRACTION ONE EIGHTHh]h⅛}hjsbah}(h]h ]h"]frac18ah$]h&]uh1hhhhKhhhhubh)}(h?.. |frac34| unicode:: U+000BE .. VULGAR FRACTION THREE QUARTERSh]h¾}hjsbah}(h]h ]h"]frac34ah$]h&]uh1hhhhKhhhhubh)}(h>.. |frac38| unicode:: U+0215C .. VULGAR FRACTION THREE EIGHTHSh]h⅜}hjsbah}(h]h ]h"]frac38ah$]h&]uh1hhhhKhhhhubh)}(h=.. |frac58| unicode:: U+0215D .. VULGAR FRACTION FIVE EIGHTHSh]h⅝}hjsbah}(h]h ]h"]frac58ah$]h&]uh1hhhhKhhhhubh)}(h>.. |frac78| unicode:: U+0215E .. VULGAR FRACTION SEVEN EIGHTHSh]h⅞}hj,sbah}(h]h ]h"]frac78ah$]h&]uh1hhhhKhhhhubh)}(h2.. |gt| unicode:: U+0003E .. GREATER-THAN SIGNh]h>}hj;sbah}(h]h ]h"]gtah$]h&]uh1hhhhKhhhhubh)}(h9.. |half| unicode:: U+000BD .. VULGAR FRACTION ONE HALFh]h½}hjJsbah}(h]h ]h"]halfah$]h&]uh1hhhhK hhhhubh)}(h/.. |horbar| unicode:: U+02015 .. HORIZONTAL BARh]h―}hjYsbah}(h]h ]h"]horbarah$]h&]uh1hhhhK!hhhhubh)}(h'.. |hyphen| unicode:: U+02010 .. HYPHENh]h‐}hjhsbah}(h]h ]h"]hyphenah$]h&]uh1hhhhK"hhhhubh)}(h:.. |iexcl| unicode:: U+000A1 .. INVERTED EXCLAMATION MARKh]h¡}hjwsbah}(h]h ]h"]iexclah$]h&]uh1hhhhK#hhhhubh)}(h7.. |iquest| unicode:: U+000BF .. INVERTED QUESTION MARKh]h¿}hjsbah}(h]h ]h"]iquestah$]h&]uh1hhhhK$hhhhubh)}(hJ.. |laquo| unicode:: U+000AB .. LEFT-POINTING DOUBLE ANGLE QUOTATION MARKh]h«}hjsbah}(h]h ]h"]laquoah$]h&]uh1hhhhK%hhhhubh)}(h0.. |larr| unicode:: U+02190 .. LEFTWARDS ARROWh]h←}hjsbah}(h]h ]h"]larrah$]h&]uh1hhhhK&hhhhubh)}(h3.. |lcub| unicode:: U+0007B .. LEFT CURLY BRACKETh]h{}hjsbah}(h]h ]h"]lcubah$]h&]uh1hhhhK'hhhhubh)}(h;.. |ldquo| unicode:: U+0201C .. LEFT DOUBLE QUOTATION MARKh]h“}hjsbah}(h]h ]h"]ldquoah$]h&]uh1hhhhK(hhhhubh)}(h).. |lowbar| unicode:: U+0005F .. LOW LINEh]h_}hjsbah}(h]h ]h"]lowbarah$]h&]uh1hhhhK)hhhhubh)}(h1.. |lpar| unicode:: U+00028 .. LEFT PARENTHESISh]h(}hjsbah}(h]h ]h"]lparah$]h&]uh1hhhhK*hhhhubh)}(h4.. |lsqb| unicode:: U+0005B .. LEFT SQUARE BRACKETh]h[}hjsbah}(h]h ]h"]lsqbah$]h&]uh1hhhhK+hhhhubh)}(h;.. |lsquo| unicode:: U+02018 .. LEFT SINGLE QUOTATION MARKh]h‘}hjsbah}(h]h ]h"]lsquoah$]h&]uh1hhhhK,hhhhubh)}(h/.. |lt| unicode:: U+0003C .. LESS-THAN SIGNh]h<}hj sbah}(h]h ]h"]ltah$]h&]uh1hhhhK-hhhhubh)}(h+.. |micro| unicode:: U+000B5 .. MICRO SIGNh]hµ}hjsbah}(h]h ]h"]microah$]h&]uh1hhhhK.hhhhubh)}(h+.. |middot| unicode:: U+000B7 .. MIDDLE DOTh]h·}hj+sbah}(h]h ]h"]middotah$]h&]uh1hhhhK/hhhhubh)}(h/.. |nbsp| unicode:: U+000A0 .. NO-BREAK SPACEh]h }hj:sbah}(h]h ]h"]nbspah$]h&]uh1hhhhK0hhhhubh)}(h).. |not| unicode:: U+000AC .. NOT SIGNh]h¬}hjIsbah}(h]h ]h"]notah$]h&]uh1hhhhK1hhhhubh)}(h,.. |num| unicode:: U+00023 .. NUMBER SIGNh]h#}hjXsbah}(h]h ]h"]numah$]h&]uh1hhhhK2hhhhubh)}(h).. |ohm| unicode:: U+02126 .. OHM SIGNh]hΩ}hjgsbah}(h]h ]h"]ohmah$]h&]uh1hhhhK3hhhhubh)}(h;.. |ordf| unicode:: U+000AA .. FEMININE ORDINAL INDICATORh]hª}hjvsbah}(h]h ]h"]ordfah$]h&]uh1hhhhK4hhhhubh)}(h<.. |ordm| unicode:: U+000BA .. MASCULINE ORDINAL INDICATORh]hº}hjsbah}(h]h ]h"]ordmah$]h&]uh1hhhhK5hhhhubh)}(h-.. |para| unicode:: U+000B6 .. PILCROW SIGNh]h¶}hjsbah}(h]h ]h"]paraah$]h&]uh1hhhhK6hhhhubh)}(h-.. |percnt| unicode:: U+00025 .. PERCENT SIGNh]h%}hjsbah}(h]h ]h"]percntah$]h&]uh1hhhhK7hhhhubh)}(h*.. |period| unicode:: U+0002E .. FULL STOPh]h.}hjsbah}(h]h ]h"]periodah$]h&]uh1hhhhK8hhhhubh)}(h*.. |plus| unicode:: U+0002B .. PLUS SIGNh]h+}hjsbah}(h]h ]h"]plusah$]h&]uh1hhhhK9hhhhubh)}(h0.. |plusmn| unicode:: U+000B1 .. PLUS-MINUS SIGNh]h±}hjsbah}(h]h ]h"]plusmnah$]h&]uh1hhhhK:hhhhubh)}(h+.. |pound| unicode:: U+000A3 .. POUND SIGNh]h£}hjsbah}(h]h ]h"]poundah$]h&]uh1hhhhK;hhhhubh)}(h... |quest| unicode:: U+0003F .. QUESTION MARKh]h?}hjsbah}(h]h ]h"]questah$]h&]uh1hhhhKhhhhubh)}(h1.. |rarr| unicode:: U+02192 .. RIGHTWARDS ARROWh]h→}hjsbah}(h]h ]h"]rarrah$]h&]uh1hhhhK?hhhhubh)}(h4.. |rcub| unicode:: U+0007D .. RIGHT CURLY BRACKETh]h}}hj*sbah}(h]h ]h"]rcubah$]h&]uh1hhhhK@hhhhubh)}(h<.. |rdquo| unicode:: U+0201D .. RIGHT DOUBLE QUOTATION MARKh]h”}hj9sbah}(h]h ]h"]rdquoah$]h&]uh1hhhhKAhhhhubh)}(h0.. |reg| unicode:: U+000AE .. REGISTERED SIGNh]h®}hjHsbah}(h]h ]h"]regah$]h&]uh1hhhhKBhhhhubh)}(h2.. |rpar| unicode:: U+00029 .. RIGHT PARENTHESISh]h)}hjWsbah}(h]h ]h"]rparah$]h&]uh1hhhhKChhhhubh)}(h5.. |rsqb| unicode:: U+0005D .. RIGHT SQUARE BRACKETh]h]}hjfsbah}(h]h ]h"]rsqbah$]h&]uh1hhhhKDhhhhubh)}(h<.. |rsquo| unicode:: U+02019 .. RIGHT SINGLE QUOTATION MARKh]h’}hjusbah}(h]h ]h"]rsquoah$]h&]uh1hhhhKEhhhhubh)}(h-.. |sect| unicode:: U+000A7 .. SECTION SIGNh]h§}hjsbah}(h]h ]h"]sectah$]h&]uh1hhhhKFhhhhubh)}(h*.. |semi| unicode:: U+0003B .. SEMICOLONh]h;}hjsbah}(h]h ]h"]semiah$]h&]uh1hhhhKGhhhhubh)}(h,.. |shy| unicode:: U+000AD .. SOFT HYPHENh]h­}hjsbah}(h]h ]h"]shyah$]h&]uh1hhhhKHhhhhubh)}(h(.. |sol| unicode:: U+0002F .. SOLIDUSh]h/}hjsbah}(h]h ]h"]solah$]h&]uh1hhhhKIhhhhubh)}(h,.. |sung| unicode:: U+0266A .. EIGHTH NOTEh]h♪}hjsbah}(h]h ]h"]sungah$]h&]uh1hhhhKJhhhhubh)}(h0.. |sup1| unicode:: U+000B9 .. SUPERSCRIPT ONEh]h¹}hjsbah}(h]h ]h"]sup1ah$]h&]uh1hhhhKKhhhhubh)}(h0.. |sup2| unicode:: U+000B2 .. SUPERSCRIPT TWOh]h²}hjsbah}(h]h ]h"]sup2ah$]h&]uh1hhhhKLhhhhubh)}(h2.. |sup3| unicode:: U+000B3 .. SUPERSCRIPT THREEh]h³}hjsbah}(h]h ]h"]sup3ah$]h&]uh1hhhhKMhhhhubh)}(h4.. |times| unicode:: U+000D7 .. MULTIPLICATION SIGNh]h×}hjsbah}(h]h ]h"]timesah$]h&]uh1hhhhKNhhhhubh)}(h0.. |trade| unicode:: U+02122 .. TRADE MARK SIGNh]h™}hj sbah}(h]h ]h"]tradeah$]h&]uh1hhhhKOhhhhubh)}(h... |uarr| unicode:: U+02191 .. UPWARDS ARROWh]h↑}hjsbah}(h]h ]h"]uarrah$]h&]uh1hhhhKPhhhhubh)}(h... |verbar| unicode:: U+0007C .. VERTICAL LINEh]h|}hj)sbah}(h]h ]h"]verbarah$]h&]uh1hhhhKQhhhhubh)}(h*.. |yen| unicode:: U+000A5 .. YEN SIGN h]h¥}hj8sbah}(h]h ]h"]yenah$]h&]uh1hhhhKRhhhhubhsection)}(hhh](htitle)}(hMulti-PF Netdevh]hMulti-PF Netdev}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjIhhhhhKubjH)}(hhh](jM)}(hContentsh]hContents}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj\hhhhhK ubh bullet_list)}(hhh](h list_item)}(h `Background`_h]h paragraph)}(hjvh]h reference)}(hjvh]h Background}(hjhhhNhNubah}(h]h ]h"]h$]h&]name Backgroundrefid backgrounduh1j}hjzresolvedKubah}(h]h ]h"]h$]h&]uh1jxhhhK hjtubah}(h]h ]h"]h$]h&]uh1jrhjohhhhhNubjs)}(h `Overview`_h]jy)}(hjh]j~)}(hjh]hOverview}(hjhhhNhNubah}(h]h ]h"]h$]h&]nameOverviewjoverviewuh1j}hjjKubah}(h]h ]h"]h$]h&]uh1jxhhhK hjubah}(h]h ]h"]h$]h&]uh1jrhjohhhhhNubjs)}(h`mlx5 implementation`_h]jy)}(hjh]j~)}(hjh]hmlx5 implementation}(hjhhhNhNubah}(h]h ]h"]h$]h&]namemlx5 implementationjmlx5-implementationuh1j}hjjKubah}(h]h ]h"]h$]h&]uh1jxhhhK hjubah}(h]h ]h"]h$]h&]uh1jrhjohhhhhNubjs)}(h`Channels distribution`_h]jy)}(hjh]j~)}(hjh]hChannels distribution}(hjhhhNhNubah}(h]h ]h"]h$]h&]nameChannels distributionjchannels-distributionuh1j}hjjKubah}(h]h ]h"]h$]h&]uh1jxhhhKhjubah}(h]h ]h"]h$]h&]uh1jrhjohhhhhNubjs)}(h`Observability`_h]jy)}(hjh]j~)}(hjh]h Observability}(hj hhhNhNubah}(h]h ]h"]h$]h&]name Observabilityj observabilityuh1j}hj jKubah}(h]h ]h"]h$]h&]uh1jxhhhKhjubah}(h]h ]h"]h$]h&]uh1jrhjohhhhhNubjs)}(h `Steering`_h]jy)}(hj+h]j~)}(hj+h]hSteering}(hj0hhhNhNubah}(h]h ]h"]h$]h&]nameSteeringjsteeringuh1j}hj-jKubah}(h]h ]h"]h$]h&]uh1jxhhhKhj)ubah}(h]h ]h"]h$]h&]uh1jrhjohhhhhNubjs)}(h`Mutually exclusive features`_ h]jy)}(h`Mutually exclusive features`_h]j~)}(hjRh]hMutually exclusive features}(hjThhhNhNubah}(h]h ]h"]h$]h&]nameMutually exclusive featuresjmutually-exclusive-featuresuh1j}hjPjKubah}(h]h ]h"]h$]h&]uh1jxhhhKhjLubah}(h]h ]h"]h$]h&]uh1jrhjohhhhhNubeh}(h]h ]h"]h$]h&]bullet-uh1jmhhhK hj\hhubeh}(h]contentsah ]h"]contentsah$]h&]uh1jGhjIhhhhhK ubjH)}(hhh](jM)}(h Backgroundh]h Background}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhhhhhKubjy)}(hXThe Multi-PF NIC technology enables several CPUs within a multi-socket server to connect directly to the network, each through its own dedicated PCIe interface. Through either a connection harness that splits the PCIe lanes between two cards or by bifurcating a PCIe slot for a single card. This results in eliminating the network traffic traversing over the internal bus between the sockets, significantly reducing overhead and latency, in addition to reducing CPU utilization and increasing network throughput.h]hXThe Multi-PF NIC technology enables several CPUs within a multi-socket server to connect directly to the network, each through its own dedicated PCIe interface. Through either a connection harness that splits the PCIe lanes between two cards or by bifurcating a PCIe slot for a single card. This results in eliminating the network traffic traversing over the internal bus between the sockets, significantly reducing overhead and latency, in addition to reducing CPU utilization and increasing network throughput.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhKhjhhubeh}(h]jah ]h"] backgroundah$]h&]uh1jGhjIhhhhhK referencedKubjH)}(hhh](jM)}(hOverviewh]hOverview}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhhhhhKubjy)}(hXThe feature adds support for combining multiple PFs of the same port in a Multi-PF environment under one netdev instance. It is implemented in the netdev layer. Lower-layer instances like pci func, sysfs entry, and devlink are kept separate. Passing traffic through different devices belonging to different NUMA sockets saves cross-NUMA traffic and allows apps running on the same netdev from different NUMAs to still feel a sense of proximity to the device and achieve improved performance.h]hXThe feature adds support for combining multiple PFs of the same port in a Multi-PF environment under one netdev instance. It is implemented in the netdev layer. Lower-layer instances like pci func, sysfs entry, and devlink are kept separate. Passing traffic through different devices belonging to different NUMA sockets saves cross-NUMA traffic and allows apps running on the same netdev from different NUMAs to still feel a sense of proximity to the device and achieve improved performance.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhK hjhhubeh}(h]jah ]h"]overviewah$]h&]uh1jGhjIhhhhhKjKubjH)}(hhh](jM)}(hmlx5 implementationh]hmlx5 implementation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhhhhhK(ubjy)}(hX%Multi-PF or Socket-direct in mlx5 is achieved by grouping PFs together which belong to the same NIC and has the socket-direct property enabled, once all PFs are probed, we create a single netdev to represent all of them, symmetrically, we destroy the netdev whenever any of the PFs is removed.h]hX%Multi-PF or Socket-direct in mlx5 is achieved by grouping PFs together which belong to the same NIC and has the socket-direct property enabled, once all PFs are probed, we create a single netdev to represent all of them, symmetrically, we destroy the netdev whenever any of the PFs is removed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhK*hjhhubjy)}(hThe netdev network channels are distributed between all devices, a proper configuration would utilize the correct close NUMA node when working on a certain app/CPU.h]hThe netdev network channels are distributed between all devices, a proper configuration would utilize the correct close NUMA node when working on a certain app/CPU.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhK.hjhhubjy)}(hXWe pick one PF to be a primary (leader), and it fills a special role. The other devices (secondaries) are disconnected from the network at the chip level (set to silent mode). In silent mode, no south <-> north traffic flowing directly through a secondary PF. It needs the assistance of the leader PF (east <-> west traffic) to function. All Rx/Tx traffic is steered through the primary to/from the secondaries.h]hXWe pick one PF to be a primary (leader), and it fills a special role. The other devices (secondaries) are disconnected from the network at the chip level (set to silent mode). In silent mode, no south <-> north traffic flowing directly through a secondary PF. It needs the assistance of the leader PF (east <-> west traffic) to function. All Rx/Tx traffic is steered through the primary to/from the secondaries.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhK1hjhhubjy)}(hICurrently, we limit the support to PFs only, and up to two PFs (sockets).h]hICurrently, we limit the support to PFs only, and up to two PFs (sockets).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhK7hjhhubeh}(h]jah ]h"]mlx5 implementationah$]h&]uh1jGhjIhhhhhK(jKubjH)}(hhh](jM)}(hChannels distributionh]hChannels distribution}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhhhhhK:ubjy)}(hsWe distribute the channels between the different PFs to achieve local NUMA node performance on multiple NUMA nodes.h]hsWe distribute the channels between the different PFs to achieve local NUMA node performance on multiple NUMA nodes.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhKmdev".h]hThis is achieved by using the correct core device instance (mdev) in each channel, instead of them all using the same instance under “priv->mdev”.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhKUhjhhubeh}(h]jah ]h"]channels distributionah$]h&]uh1jGhjIhhhhhK:jKubjH)}(hhh](jM)}(h Observabilityh]h Observability}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhj}hhhhhKYubjy)}(hPThe relation between PF, irq, napi, and queue can be observed via netlink spec::h]hOThe relation between PF, irq, napi, and queue can be observed via netlink spec:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhKZhj}hhubjK)}(hX$ ./tools/net/ynl/pyynl/cli.py --spec Documentation/netlink/specs/netdev.yaml --dump queue-get --json='{"ifindex": 13}' [{'id': 0, 'ifindex': 13, 'napi-id': 539, 'type': 'rx'}, {'id': 1, 'ifindex': 13, 'napi-id': 540, 'type': 'rx'}, {'id': 2, 'ifindex': 13, 'napi-id': 541, 'type': 'rx'}, {'id': 3, 'ifindex': 13, 'napi-id': 542, 'type': 'rx'}, {'id': 4, 'ifindex': 13, 'napi-id': 543, 'type': 'rx'}, {'id': 0, 'ifindex': 13, 'napi-id': 539, 'type': 'tx'}, {'id': 1, 'ifindex': 13, 'napi-id': 540, 'type': 'tx'}, {'id': 2, 'ifindex': 13, 'napi-id': 541, 'type': 'tx'}, {'id': 3, 'ifindex': 13, 'napi-id': 542, 'type': 'tx'}, {'id': 4, 'ifindex': 13, 'napi-id': 543, 'type': 'tx'}] $ ./tools/net/ynl/pyynl/cli.py --spec Documentation/netlink/specs/netdev.yaml --dump napi-get --json='{"ifindex": 13}' [{'id': 543, 'ifindex': 13, 'irq': 42}, {'id': 542, 'ifindex': 13, 'irq': 41}, {'id': 541, 'ifindex': 13, 'irq': 40}, {'id': 540, 'ifindex': 13, 'irq': 39}, {'id': 539, 'ifindex': 13, 'irq': 36}]h]hX$ ./tools/net/ynl/pyynl/cli.py --spec Documentation/netlink/specs/netdev.yaml --dump queue-get --json='{"ifindex": 13}' [{'id': 0, 'ifindex': 13, 'napi-id': 539, 'type': 'rx'}, {'id': 1, 'ifindex': 13, 'napi-id': 540, 'type': 'rx'}, {'id': 2, 'ifindex': 13, 'napi-id': 541, 'type': 'rx'}, {'id': 3, 'ifindex': 13, 'napi-id': 542, 'type': 'rx'}, {'id': 4, 'ifindex': 13, 'napi-id': 543, 'type': 'rx'}, {'id': 0, 'ifindex': 13, 'napi-id': 539, 'type': 'tx'}, {'id': 1, 'ifindex': 13, 'napi-id': 540, 'type': 'tx'}, {'id': 2, 'ifindex': 13, 'napi-id': 541, 'type': 'tx'}, {'id': 3, 'ifindex': 13, 'napi-id': 542, 'type': 'tx'}, {'id': 4, 'ifindex': 13, 'napi-id': 543, 'type': 'tx'}] $ ./tools/net/ynl/pyynl/cli.py --spec Documentation/netlink/specs/netdev.yaml --dump napi-get --json='{"ifindex": 13}' [{'id': 543, 'ifindex': 13, 'irq': 42}, {'id': 542, 'ifindex': 13, 'irq': 41}, {'id': 541, 'ifindex': 13, 'irq': 40}, {'id': 540, 'ifindex': 13, 'irq': 39}, {'id': 539, 'ifindex': 13, 'irq': 36}]}hjsbah}(h]h ]h"]h$]h&]hhuh1jJhhhK\hj}hhubjy)}(h?Here you can clearly observe our channels distribution policy::h]h>Here you can clearly observe our channels distribution policy:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhKohj}hhubjK)}(h$ ls /proc/irq/{36,39,40,41,42}/mlx5* -d -1 /proc/irq/36/mlx5_comp0@pci:0000:08:00.0 /proc/irq/39/mlx5_comp0@pci:0000:09:00.0 /proc/irq/40/mlx5_comp1@pci:0000:08:00.0 /proc/irq/41/mlx5_comp1@pci:0000:09:00.0 /proc/irq/42/mlx5_comp2@pci:0000:08:00.0h]h$ ls /proc/irq/{36,39,40,41,42}/mlx5* -d -1 /proc/irq/36/mlx5_comp0@pci:0000:08:00.0 /proc/irq/39/mlx5_comp0@pci:0000:09:00.0 /proc/irq/40/mlx5_comp1@pci:0000:08:00.0 /proc/irq/41/mlx5_comp1@pci:0000:09:00.0 /proc/irq/42/mlx5_comp2@pci:0000:08:00.0}hjsbah}(h]h ]h"]h$]h&]hhuh1jJhhhKqhj}hhubeh}(h]jah ]h"] observabilityah$]h&]uh1jGhjIhhhhhKYjKubjH)}(hhh](jM)}(hSteeringh]hSteering}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjhhhhhKyubjy)}(hWSecondary PFs are set to "silent" mode, meaning they are disconnected from the network.h]h[Secondary PFs are set to “silent” mode, meaning they are disconnected from the network.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhKzhjhhubjy)}(hXIn Rx, the steering tables belong to the primary PF only, and it is its role to distribute incoming traffic to other PFs, via cross-vhca steering capabilities. Still maintain a single default RSS table, that is capable of pointing to the receive queues of a different PF.h]hXIn Rx, the steering tables belong to the primary PF only, and it is its role to distribute incoming traffic to other PFs, via cross-vhca steering capabilities. Still maintain a single default RSS table, that is capable of pointing to the receive queues of a different PF.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhK|hjhhubjy)}(hIn Tx, the primary PF creates a new Tx flow table, which is aliased by the secondaries, so they can go out to the network through it.h]hIn Tx, the primary PF creates a new Tx flow table, which is aliased by the secondaries, so they can go out to the network through it.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhKhjhhubjy)}(hIn addition, we set default XPS configuration that, based on the CPU, selects an SQ belonging to the PF on the same node as the CPU.h]hIn addition, we set default XPS configuration that, based on the CPU, selects an SQ belonging to the PF on the same node as the CPU.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhKhjhhubjy)}(hXPS default config example:h]hXPS default config example:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhKhjhhubjy)}(hQNUMA node(s): 2 NUMA node0 CPU(s): 0-11 NUMA node1 CPU(s): 12-23h]hQNUMA node(s): 2 NUMA node0 CPU(s): 0-11 NUMA node1 CPU(s): 12-23}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhKhjhhubjy)}(hPF0 on node0, PF1 on node1.h]hPF0 on node0, PF1 on node1.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhKhjhhubjn)}(hhh](js)}(h//sys/class/net/eth2/queues/tx-0/xps_cpus:000001h]jy)}(hjEh]h//sys/class/net/eth2/queues/tx-0/xps_cpus:000001}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhKhjCubah}(h]h ]h"]h$]h&]uh1jrhj@hhhhhNubjs)}(h//sys/class/net/eth2/queues/tx-1/xps_cpus:001000h]jy)}(hj\h]h//sys/class/net/eth2/queues/tx-1/xps_cpus:001000}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhKhjZubah}(h]h ]h"]h$]h&]uh1jrhj@hhhhhNubjs)}(h//sys/class/net/eth2/queues/tx-2/xps_cpus:000002h]jy)}(hjsh]h//sys/class/net/eth2/queues/tx-2/xps_cpus:000002}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhKhjqubah}(h]h ]h"]h$]h&]uh1jrhj@hhhhhNubjs)}(h//sys/class/net/eth2/queues/tx-3/xps_cpus:002000h]jy)}(hjh]h//sys/class/net/eth2/queues/tx-3/xps_cpus:002000}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhKhjubah}(h]h ]h"]h$]h&]uh1jrhj@hhhhhNubjs)}(h//sys/class/net/eth2/queues/tx-4/xps_cpus:000004h]jy)}(hjh]h//sys/class/net/eth2/queues/tx-4/xps_cpus:000004}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhKhjubah}(h]h ]h"]h$]h&]uh1jrhj@hhhhhNubjs)}(h//sys/class/net/eth2/queues/tx-5/xps_cpus:004000h]jy)}(hjh]h//sys/class/net/eth2/queues/tx-5/xps_cpus:004000}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhKhjubah}(h]h ]h"]h$]h&]uh1jrhj@hhhhhNubjs)}(h//sys/class/net/eth2/queues/tx-6/xps_cpus:000008h]jy)}(hjh]h//sys/class/net/eth2/queues/tx-6/xps_cpus:000008}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhKhjubah}(h]h ]h"]h$]h&]uh1jrhj@hhhhhNubjs)}(h//sys/class/net/eth2/queues/tx-7/xps_cpus:008000h]jy)}(hjh]h//sys/class/net/eth2/queues/tx-7/xps_cpus:008000}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhKhjubah}(h]h ]h"]h$]h&]uh1jrhj@hhhhhNubjs)}(h//sys/class/net/eth2/queues/tx-8/xps_cpus:000010h]jy)}(hjh]h//sys/class/net/eth2/queues/tx-8/xps_cpus:000010}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhKhjubah}(h]h ]h"]h$]h&]uh1jrhj@hhhhhNubjs)}(h//sys/class/net/eth2/queues/tx-9/xps_cpus:010000h]jy)}(hj h]h//sys/class/net/eth2/queues/tx-9/xps_cpus:010000}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhKhj ubah}(h]h ]h"]h$]h&]uh1jrhj@hhhhhNubjs)}(h0/sys/class/net/eth2/queues/tx-10/xps_cpus:000020h]jy)}(hj+ h]h0/sys/class/net/eth2/queues/tx-10/xps_cpus:000020}(hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhKhj) ubah}(h]h ]h"]h$]h&]uh1jrhj@hhhhhNubjs)}(h0/sys/class/net/eth2/queues/tx-11/xps_cpus:020000h]jy)}(hjB h]h0/sys/class/net/eth2/queues/tx-11/xps_cpus:020000}(hjD hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhKhj@ ubah}(h]h ]h"]h$]h&]uh1jrhj@hhhhhNubjs)}(h0/sys/class/net/eth2/queues/tx-12/xps_cpus:000040h]jy)}(hjY h]h0/sys/class/net/eth2/queues/tx-12/xps_cpus:000040}(hj[ hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhKhjW ubah}(h]h ]h"]h$]h&]uh1jrhj@hhhhhNubjs)}(h0/sys/class/net/eth2/queues/tx-13/xps_cpus:040000h]jy)}(hjp h]h0/sys/class/net/eth2/queues/tx-13/xps_cpus:040000}(hjr hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhKhjn ubah}(h]h ]h"]h$]h&]uh1jrhj@hhhhhNubjs)}(h0/sys/class/net/eth2/queues/tx-14/xps_cpus:000080h]jy)}(hj h]h0/sys/class/net/eth2/queues/tx-14/xps_cpus:000080}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhKhj ubah}(h]h ]h"]h$]h&]uh1jrhj@hhhhhNubjs)}(h0/sys/class/net/eth2/queues/tx-15/xps_cpus:080000h]jy)}(hj h]h0/sys/class/net/eth2/queues/tx-15/xps_cpus:080000}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhKhj ubah}(h]h ]h"]h$]h&]uh1jrhj@hhhhhNubjs)}(h0/sys/class/net/eth2/queues/tx-16/xps_cpus:000100h]jy)}(hj h]h0/sys/class/net/eth2/queues/tx-16/xps_cpus:000100}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhKhj ubah}(h]h ]h"]h$]h&]uh1jrhj@hhhhhNubjs)}(h0/sys/class/net/eth2/queues/tx-17/xps_cpus:100000h]jy)}(hj h]h0/sys/class/net/eth2/queues/tx-17/xps_cpus:100000}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhKhj ubah}(h]h ]h"]h$]h&]uh1jrhj@hhhhhNubjs)}(h0/sys/class/net/eth2/queues/tx-18/xps_cpus:000200h]jy)}(hj h]h0/sys/class/net/eth2/queues/tx-18/xps_cpus:000200}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhKhj ubah}(h]h ]h"]h$]h&]uh1jrhj@hhhhhNubjs)}(h0/sys/class/net/eth2/queues/tx-19/xps_cpus:200000h]jy)}(hj h]h0/sys/class/net/eth2/queues/tx-19/xps_cpus:200000}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhKhj ubah}(h]h ]h"]h$]h&]uh1jrhj@hhhhhNubjs)}(h0/sys/class/net/eth2/queues/tx-20/xps_cpus:000400h]jy)}(hj h]h0/sys/class/net/eth2/queues/tx-20/xps_cpus:000400}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhKhj ubah}(h]h ]h"]h$]h&]uh1jrhj@hhhhhNubjs)}(h0/sys/class/net/eth2/queues/tx-21/xps_cpus:400000h]jy)}(hj( h]h0/sys/class/net/eth2/queues/tx-21/xps_cpus:400000}(hj* hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhKhj& ubah}(h]h ]h"]h$]h&]uh1jrhj@hhhhhNubjs)}(h0/sys/class/net/eth2/queues/tx-22/xps_cpus:000800h]jy)}(hj? h]h0/sys/class/net/eth2/queues/tx-22/xps_cpus:000800}(hjA hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhKhj= ubah}(h]h ]h"]h$]h&]uh1jrhj@hhhhhNubjs)}(h1/sys/class/net/eth2/queues/tx-23/xps_cpus:800000 h]jy)}(h0/sys/class/net/eth2/queues/tx-23/xps_cpus:800000h]h0/sys/class/net/eth2/queues/tx-23/xps_cpus:800000}(hjX hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhKhjT ubah}(h]h ]h"]h$]h&]uh1jrhj@hhhhhNubeh}(h]h ]h"]h$]h&]jvjwuh1jmhhhKhjhhubeh}(h]j?ah ]h"]steeringah$]h&]uh1jGhjIhhhhhKyjKubjH)}(hhh](jM)}(hMutually exclusive featuresh]hMutually exclusive features}(hj| hhhNhNubah}(h]h ]h"]h$]h&]uh1jLhjy hhhhhKubjy)}(hXThe nature of Multi-PF, where different channels work with different PFs, conflicts with stateful features where the state is maintained in one of the PFs. For example, in the TLS device-offload feature, special context objects are created per connection and maintained in the PF. Transitioning between different RQs/SQs would break the feature. Hence, we disable this combination for now.h]hXThe nature of Multi-PF, where different channels work with different PFs, conflicts with stateful features where the state is maintained in one of the PFs. For example, in the TLS device-offload feature, special context objects are created per connection and maintained in the PF. Transitioning between different RQs/SQs would break the feature. Hence, we disable this combination for now.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jxhhhKhjy hhubeh}(h]jcah ]h"]mutually exclusive featuresah$]h&]uh1jGhjIhhhhhKjKubeh}(h]multi-pf-netdevah ]h"]multi-pf netdevah$]h&]uh1jGhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(jLN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}(hhhhhhj jjjj*jj9j-jHj<jWjKjfjZjujijjxjjjjjjjjjjjjjjjjj jjjj)jj8j,jGj;jVjJjejYjtjhjjwjjjjjjjjjjjjjjjjj jjj j(jj7j+jFj:jUjIjdjXjsjgjjvjjjjjjjjjjjjjjjjj jjj j'jj6j*jEj9jTjHjcjWjrjfjjujjjjjjjjjjjjjjjjjjjj j&jj5j)jDj8usubstitution_names}(amphߌaposhasthbrvbarj bsoljcentj*colonj9commajHcommatjWcopyjfcurrenjudarrjdegjdividejdollarjequalsjexcljfrac12jfrac14jfrac18jfrac34j frac38jfrac58j)frac78j8gtjGhalfjVhorbarjehyphenjtiexcljiquestjlaquojlarrjlcubjldquojlowbarjlparjlsqbjlsquoj ltjmicroj(middotj7nbspjFnotjUnumjdohmjsordfjordmjparajpercntjperiodjplusjplusmnjpoundjquestjquotj raquojrarrj'rcubj6rdquojEregjTrparjcrsqbjrrsquojsectjsemijshyjsoljsungjsup1jsup2jsup3jtimesjtradejuarrj&verbarj5yenjDurefnames}( background]jaoverview]jamlx5 implementation]jachannels distribution]ja observability]j asteering]j0amutually exclusive features]jTaurefids}nameids}(j j j}jzjjjjjjjzjjjjv j?j jcu nametypes}(j j}jjjjzjjv j uh}(j jIjzj\jjjjjjjjjj}j?jjcjy u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log],Documentation/networking/multi-pf-netdev.rst(NNNNta decorationNhhub.