os:10gbps_のパケット転送
差分
このページの2つのバージョン間の差分を表示します。
| — | os:10gbps_のパケット転送 [2023/11/02 19:25] (現在) – 作成 - 外部編集 127.0.0.1 | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| + | ====== 10Gbps のパケット転送 ====== | ||
| + | 10Gbps の NIC を挿してパケット転送をなるべく高速に行う際のポイントについて列挙します。 | ||
| + | |||
| + | ===== FIB algorithm ===== | ||
| + | |||
| + | FreeBSD 13.0 から Fib の検索アルゴリズムが変わりました。 | ||
| + | '' | ||
| + | |||
| + | < | ||
| + | net.route.algo.debug_level: | ||
| + | net.route.algo.inet.algo: | ||
| + | net.route.algo.inet.algo_list: | ||
| + | net.route.algo.inet6.algo: | ||
| + | net.route.algo.inet6.algo_list: | ||
| + | net.route.algo.fib_max_sync_delay_ms: | ||
| + | net.route.algo.bucket_change_threshold_rate: | ||
| + | net.route.algo.bucket_time_ms: | ||
| + | </ | ||
| + | |||
| + | デフォルトで IPv4 はロックのかかるアルゴリズムになっていますので、経路表のエントリ数が多い(1万以上? | ||
| + | このあたりは、経路数、経路の更新頻度や通信量(経路表参照回数)に依存する部分なので、どれが良いとは一概に言えませんが、経路数が多いならば、bsearchよりRadix系を選択する方が良いことが多いと言えます。 | ||
| + | |||
| + | * Lockless: bsearch4, radix[46]_lockless | ||
| + | * Lockあり: radix[46] | ||
| + | |||
| + | なお、FreeBSD-13.2-RELEASE 及び、FreeBSD-14.0-RELEASEでは '' | ||
| + | |||
| + | また、手元で確認した限りでは、FreeBSD-13.2以降は、IPv4 が bsearch4、IPv6ではradix6_locklessが標準となっています。 | ||
| + | |||
| + | ==== RSS (Receive Side Scaling) ==== | ||
| + | |||
| + | Receive Side Scaling を有効にするには以下の全てを満たす必要があります。 | ||
| + | |||
| + | - multi-queue を持つ NIC を用意すること | ||
| + | - 該当ドライバが multi-queue を扱えること | ||
| + | - `Options | ||
| + | - sysctl net.isr.maxthreads に NICの持つ queue 以上の数を指定すること (-1 で CPU Core数と同じ数になります) | ||
| + | - sysctl net.isr.bindthreads=1 を指定すること | ||
| + | |||
| + | なお、FreeBSD-13.2-RELEASE/ | ||
| + | ==== TSO & LRO ==== | ||
| + | |||
| + | 10Gbps の NIC にはほとんどの場合、TSO (TCP Segment Offload) や LRO (Large Receive Offload) の機能がついています。 | ||
| + | これらは大きなデータを転送する際にパケットの分割、統合を NIC 側で行ってくれるものです。 | ||
| + | ルータとして構築する場合、TSO/ | ||
| + | |||
| + | ifconfig のオプションに '' | ||
| + | |||
| + | ==== FreeBSD 12系以前の話 ==== | ||
| + | |||
| + | '' | ||
| + | |||
| + | これは、12系以前では net.inet.ip.redirect=1 (デフォルト)だと fast forwarding のコードパスを通らないためです。 | ||
| + | |||
| + | 以下の commit でこの動作が変更されました。 | ||
| + | |||
| + | https:// | ||
| + | |||
| + | IPv6 を転送する時には同様に '' | ||
os/10gbps_のパケット転送.1661241669.txt.gz · 最終更新: 2022/08/23 17:05 (外部編集)
