
NIC リング バッファを確認します。
# ethtool -g eth0
Ring parameters for eth0:
Pre-set maximums:
RX: 4096
RX Mini: 0
RX Jumbo: 0
TX: 4096
Current hardware settings:
RX: 256
RX Mini: 0
RX Jumbo: 0
TX: 256
「RX/TX」は、「プリセット最大値」に表示されている制限まで次のように設定できます。
# ethtool -G eth0 rx 4096 rx 4096
質問は: デフォルトでは、なぜこんなに低く設定されているのか(私が所有するすべてのサーバーでは、すべて 256 になっています) より高い値ではなく、ハードウェアの最大機能ですか? これらの値を増やすと、何か欠点がありますか (ある場合、どのような欠点がありますか)?
答え1
まず、設定した数字はバイト多くの人が考えているように、彼らは記述子(記述子のサイズはハードウェアに依存します)。したがって、リングの長さを増やすと、これらの記述子用にカーネルで割り当てられるメモリが増えることになります。一般的に、割り込み処理をできるだけ高速にするために、このカーネル メモリを L1 キャッシュに配置する必要があります。リングのサイズを増やすと、この可能性が低くなり、場合によっては完全に不可能になります。
次に、割り込みの統合があります。一般に、リング バッファ サイズを増やすと、NIC は低/高マークを適切に調整し、バッファリングされるデータが増えると (つまり、頻度が低くなると) 割り込みをトリガーします。その結果、割り込み処理中にカーネルがこれらの大量のデータを処理するために必要な時間も長くなります。
上記のすべては、単純なバケツ効果をもたらします。つまり、リングが大きいほど、パケットのドロップ確率が減少し、ネットワーク遅延が増加します。これは、TCP 経由で大きなファイルをストリーミングする場合はまったく問題ありませんが、低遅延の小さなパケット アプリケーション (ゲームなど) の場合はまったく望ましくない可能性があります。
表示されるデフォルトの数値は、2 つの間の妥当なトレードオフです。