tc
10Gbps NICを搭載したシステムでトラフィックシェーピングを試みましたが、qdiscが10Gbpsの近くに到達できないことがわかりました。私がするとき:
tc qdisc add dev $ifc root handle 1: htb default ffff
tc class add dev $ifc parent 1:0 classid 1:1 htb rate 32Gbit
tc class add dev $ifc parent 1:1 classid 1:ffff htb rate 1Gbit ceil 16Gbit burst 1G cburst 1G
私のスループットは約3Gbpsに制限されています。私はCBQとHFSCの変形を試みました。私が何をしても、この問題を解決できないようです。
ただqdisc
dosを追加してくださいいいえ問題を引き起こします(前述のように)。私はすべての言及tc
とqdisc
私が見つけることができる「10G」を読むのに数日を費やしました。 6~10年前にメーリングリスト活動がたくさんあったようです(おそらく10Gが大衆化され、1Gを置き換える時点)。しかし、解決策はありません。私は何を逃したことがありませんか? Linuxでは、1秒あたりのギガビットを形成することは不可能ですか?
答え1
これはqdiscロックの問題によるものです(デフォルトでは1つのCPUコアに固定されています)。既知のソリューションはXDPリダイレクト、XPS、HTBの削除。
XDPリダイレクトソリューションはxdp-cpumap-tc各CPUコアに対して別々のHTB qdiscを作成し、XDPリダイレクトを使用してそのCPU /トップレベルHTBのIPトラフィックをフィルタリングします。
私たちはというプログラムを開発しました。無料QoSxdp-cpumap-tcを使用し、XDPは少なくとも私たちのユースケースでは非常に良いソリューションであることがわかりました。トラフィックをCPUコアあたり約4〜6Gbpsに分割できる必要があるなど、いくつかの重要な制限があります。これは大きな総スループット(約20 Gbps以上)になりますが、4 Gbps以上のスループットを形成するために単一のHTBリーフが必要な場合、HTBのqdiscロックの問題がカーネルで解決されるまでは不可能です。
HTBオフロードも潜在的なソリューションです。スループットはとても良いです。欠点は、Mellanox / Intelネットワークカードのみをサポートし、最大リーフ深さがレベル3であることです。