第9章 リッスンキューのロック競合の回避
キューロックの競合により、パケットドロップや CPU 使用率の上昇を引き起こす可能性があり、その結果、レイテンシーが長くなる可能性があります。アプリケーションをチューニングし、Transmit Packet Steering を使用することで、受信 (RX) キューと送信 (TX) キューでのキューロックの競合を回避できます。
9.1. RX キューのロック競合の回避: SO_REUSEPORT および SO_REUSEPORT_BPF ソケットオプション リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、マルチスレッドのネットワークアプリケーションは、未接続の UDP または TCP リスナースレッドが受信トラフィックを受信するために、単一のソケットを共有する必要があります。マルチコアシステムでは、SO_REUSEPORT または SO_REUSEPORT_BPF ソケットオプションを使用して負荷を分散することで、アプリケーションのパフォーマンスが向上します。
単一のソケットを使用すると、次のような問題が発生します。
- パケットドロップや CPU 使用率の上昇を引き起こす可能性のある受信バッファーでの重大な競合。
- CPU 使用率の大幅な増加
- パケットドロップの可能性
SO_REUSEPORT または SO_REUSEPORT_BPF ソケットオプションを使用すると、1 つのホスト上の複数のソケットを同じポートにバインドできます。
詳細は、システム上の socket(7) man ページと /usr/src/debug/kernel-<version>/linux-<version>/tools/testing/selftests/net/reuseport_bpf_cpu.c ファイルを参照してください。
Red Hat Enterprise Linux では、カーネルソースで SO_REUSEPORT ソケットオプションを使用する方法のコードサンプルを提供します。コード例にアクセスするには、以下を実行します。
rhel-10-for-x86_64-baseos-debug-rpmsリポジトリーを有効にします。# subscription-manager repos --enable rhel-10-for-x86_64-baseos-debug-rpmskernel-debuginfo-common-x86_64パッケージをインストールします。# dnf install kernel-debuginfo-common-x86_64-
コード例が
/usr/src/debug/kernel-<version>/linux-<version>/tools/testing/selftests/net/reuseport_bpf_cpu.cファイルで利用できるようになります。