第9章 リッスンキューのロック競合の回避


キューロックの競合により、パケットドロップや CPU 使用率の上昇を引き起こす可能性があり、その結果、レイテンシーが長くなる可能性があります。アプリケーションをチューニングし、Transmit Packet Steering を使用することで、受信 (RX) キューと送信 (TX) キューでのキューロックの競合を回避できます。

9.1. RX キューのロック競合の回避: SO_REUSEPORT および SO_REUSEPORT_BPF ソケットオプション

デフォルトでは、マルチスレッドのネットワークアプリケーションは、未接続の UDP または TCP リスナースレッドが受信トラフィックを受信するために、単一のソケットを共有する必要があります。マルチコアシステムでは、SO_REUSEPORT または SO_REUSEPORT_BPF ソケットオプションを使用して負荷を分散することで、アプリケーションのパフォーマンスが向上します。

単一のソケットを使用すると、次のような問題が発生します。

  • パケットドロップや CPU 使用率の上昇を引き起こす可能性のある受信バッファーでの重大な競合。
  • CPU 使用率の大幅な増加
  • パケットドロップの可能性
パケットフロー図: 単一の UDP ソケットのみを使用することで発生するロック競合

SO_REUSEPORT または SO_REUSEPORT_BPF ソケットオプションを使用すると、1 つのホスト上の複数のソケットを同じポートにバインドできます。

パケットフロー図: `SO_REUSEPORT` および `SO_REUSEPORT_BPF` ソケットオプションを使用してロック競合を回避する

詳細は、システム上の socket(7) man ページと /usr/src/debug/kernel-<version>/linux-<version>/tools/testing/selftests/net/reuseport_bpf_cpu.c ファイルを参照してください。

Red Hat Enterprise Linux では、カーネルソースで SO_REUSEPORT ソケットオプションを使用する方法のコードサンプルを提供します。コード例にアクセスするには、以下を実行します。

  1. rhel-10-for-x86_64-baseos-debug-rpms リポジトリーを有効にします。

    # subscription-manager repos --enable rhel-10-for-x86_64-baseos-debug-rpms
  2. kernel-debuginfo-common-x86_64 パッケージをインストールします。

    # dnf install kernel-debuginfo-common-x86_64
  3. コード例が /usr/src/debug/kernel-<version>/linux-<version>/tools/testing/selftests/net/reuseport_bpf_cpu.c ファイルで利用できるようになります。
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る