ユーザ用ツール

サイト用ツール


os:10gbps_のパケット転送

文書の過去の版を表示しています。


10Gbps のパケット転送

10Gbps の NIC を挿してパケット転送をなるべく高速に行う際のポイントについて列挙します。

FIB algorithm

FreeBSD 13.0 から Fib の検索アルゴリズムが変わりました。 options FIB_ALGO を付けてカーネルをビルドすると sysctl で次のように検索アルゴリズムを表示・選択できるようになります。

net.route.algo.debug_level: 5
net.route.algo.inet.algo: bsearch4
net.route.algo.inet.algo_list: bsearch4, radix4_lockless, radix4
net.route.algo.inet6.algo: radix6_lockless
net.route.algo.inet6.algo_list: radix6_lockless, radix6
net.route.algo.fib_max_sync_delay_ms: 1000
net.route.algo.bucket_change_threshold_rate: 500
net.route.algo.bucket_time_ms: 50

デフォルトで IPv4 はロックのかかるアルゴリズムになっていますので、経路表のエントリ数が多い場合には lockless のアルゴリズムを選びましょう。

なお、FreeBSD-14-Current では Options FIB_ALGO はデフォルトで入っています。

RSS (Receive Side Scaling)

Receive Side Scaling を有効にするには以下の全てを満たす必要があります。

  1. multi-queue を持つ NIC を用意すること
  2. 該当ドライバが multi-queue を扱えること
  3. `Options RSS` を付けてビルドしたカーネルであること
  4. sysctl net.isr.maxthreads に NICの持つ queue 以上の数を指定すること (-1 で CPU Core数と同じ数になります)
  5. sysctl net.isr.bindthreads=1 を指定すること

TSO & LRO

10Gbps の NIC にはほとんどの場合、TSO (TCP Segment Offload) や LRO (Large Receive Offload) の機能がついています。 これらは大きなデータを転送する際にパケットの分割、統合を NIC 側で行ってくれるものです。 ルータの場合は必要ないため、これらを off にします。もし、これらが働くと End-to-End の原則を破るため、良くないです。

ifconfig のオプションに -tso -lro -vlanhwtso を付けておきます。

FreeBSD 12系の話

`sysctl net.inet.ip.redirect=0` を設定すると fast forwarding するようになり高速にパケット転送されます。

これは、12系に限っては net.inet.ip.redirect=1 (デフォルト)だと fast forwarding のコードパスを通らないためです。

以下の commit で修正されました。

https://cgit.freebsd.org/src/commit/?id=f389439f50fc4c27d15d3017b622270e25ba71c7

このウェブサイトはクッキーを使用しています。 Webサイトを使用することで、あなたはあなたのコンピュータにクッキーを保存することに同意します。 また、あなたはあなたが私たちのプライバシーポリシーを読んで理解したことを認めます。 同意しない場合はウェブサイトを離れてください。クッキーに関する詳細情報
os/10gbps_のパケット転送.1661241023.txt.gz · 最終更新: 2022/08/23 16:55 (外部編集)

特に明示されていない限り、本Wikiの内容は次のライセンスに従います: 2-Clause BSD License
Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki