LinuCレベル3 プラットフォームスペシャリスト プラットフォームの最適化 問16
プラットフォームの最適化/カーネルパラメータによるネットワーク最適化カーネルパラメータnet.core.netdev_max_backlogの役割として適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル3 プラットフォームスペシャリストの出題範囲「プラットフォームの最適化」に対応。実際の試験問題ではありません)
- Alisten()したソケットのTCP接続待ちキューの最大長を設定し、この値を超えると新たなSYNパケットが破棄される
- BNICが受信したパケットがカーネルのソフトウェア割り込み処理に渡されるまでのキューの最大長を設定し、超過するとパケットがドロップされる
- Cネットワーク送信バッファをパケット数で制限し、送信キューが満杯になるとアプリケーションが書き込みをブロックされる
- Dオープン可能なネットワークソケットの総数を制限し、この値を超えると新規ソケットの作成が失敗する
正解:B
解説
net.core.netdev_max_backlog は、NIC がパケットを受信してからカーネルのソフトウェア割り込み(softirq)処理がそれを取り出すまでの間に、NIC の受信リングバッファに積み上げられるパケット数の上限を指定します。高負荷時にカーネルのパケット処理が追いつかない場合、この値を超えるとパケットがドロップされます。10Gbps 以上の高スループット環境ではデフォルト値(1000 程度)が不足することがあり、増加によってバーストトラフィック時のパケットロスを防げます。TCP の listen バックログは net.core.somaxconn や net.ipv4.tcp_max_syn_backlog で制御します。
選択肢ごとの解説
- A誤り。TCP の接続待ちキューの最大長は net.core.somaxconn(accept キュー)や net.ipv4.tcp_max_syn_backlog(SYN キュー)で制御します。net.core.netdev_max_backlog は NIC の受信パケットキューです。
- B正しい。net.core.netdev_max_backlog は NIC 受信後からカーネル処理までの間のパケットキュー上限で、高負荷時にこの値を超えるとパケットがドロップされます。
- C誤り。送信バッファのサイズは net.core.wmem_max(ソケット送信バッファ上限)などで制御します。net.core.netdev_max_backlog は受信パケットのキュー長に関するパラメータです。
- D誤り。オープン可能なソケット数を制限するパラメータではありません。ソケット数の上限はファイルディスクリプタ数(fs.file-max や ulimit)が間接的に影響します。