28.6. network RHEL システムロールを使用して、高いパケットドロップ率を減らすためにリングバッファーサイズを増やす
パケットドロップ率が原因でアプリケーションがデータの損失、タイムアウト、またはその他の問題を報告する場合は、イーサネットデバイスのリングバッファーのサイズを増やします。
リングバッファーは循環バッファーであり、オーバーフローによって既存のデータが上書きされます。ネットワークカードは、送信 (TX) および受信 (RX) リングバッファーを割り当てます。受信リングバッファーは、デバイスドライバーとネットワークインターフェイスコントローラー (NIC) の間で共有されます。データは、ハードウェア割り込みまたは SoftIRQ とも呼ばれるソフトウェア割り込みによって NIC からカーネルに移動できます。
カーネルは RX リングバッファーを使用して、デバイスドライバーが着信パケットを処理できるようになるまで着信パケットを格納します。デバイスドライバーは、通常は SoftIRQ を使用して RX リングをドレインします。これにより、着信パケットは sk_buff
または skb
と呼ばれるカーネルデータ構造に配置され、カーネルを経由して関連するソケットを所有するアプリケーションまでの移動を開始します。
カーネルは TX リングバッファーを使用して、ネットワークに送信する必要がある発信パケットを保持します。これらのリングバッファーはスタックの一番下にあり、パケットドロップが発生する重要なポイントであり、ネットワークパフォーマンスに悪影響を及ぼします。
network
RHEL システムロールを使用するプレイの実行時に、プレイで指定した値と設定値が一致しない場合、当該ロールは同じ名前の既存の接続プロファイルをオーバーライドします。これらの値がデフォルトにリセットされないようにするには、IP 設定などの設定がすでに存在する場合でも、ネットワーク接続プロファイルの設定全体をプレイで必ず指定してください。
前提条件
- 制御ノードと管理ノードを準備している
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。 - デバイスがサポートする最大リングバッファーサイズを把握している。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。--- - name: Configure the network hosts: managed-node-01.example.com tasks: - name: Configure an Ethernet connection with increased ring buffer sizes ansible.builtin.include_role: name: rhel-system-roles.network vars: network_connections: - name: enp1s0 type: ethernet autoconnect: yes ip: address: - 198.51.100.20/24 - 2001:db8:1::1/64 gateway4: 198.51.100.254 gateway6: 2001:db8:1::fffe dns: - 198.51.100.200 - 2001:db8:1::ffbb dns_search: - example.com ethtool: ring: rx: 4096 tx: 4096 state: up
この Playbook は、
enp1s0
接続プロファイルを次の設定で作成します。プロファイルがすでに存在する場合は、次の設定に更新します。-
静的
IPv4
アドレス -/24
サブネットマスクを持つ198.51.100.20
-
静的
IPv6
アドレス -2001:db8:1::1
と/64
サブネットマスク -
IPv4
デフォルトゲートウェイ -198.51.100.254
-
IPv6
デフォルトゲートウェイ -2001:db8:1::fffe
-
IPv4
DNS サーバー -198.51.100.200
-
IPv6
DNS サーバー -2001:db8:1::ffbb
-
DNS 検索ドメイン -
example.com
リングバッファーエントリーの最大数:
- 受信 (RX): 4096
- 送信 (TX): 4096
-
静的
Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
$ ansible-playbook ~/playbook.yml
関連情報
-
/usr/share/ansible/roles/rhel-system-roles.network/README.md
ファイル -
/usr/share/doc/rhel-system-roles/network/
ディレクトリー