第 9 章 避免侦听队列锁争用


队列锁争用可能导致数据包丢弃和更高的 CPU 使用率,因此导致更高的延迟。您可以通过调优应用程序并使用传输数据包控制,来避免接收(RX)和传输(TX)队列上的队列锁争用。

9.1. 避免 RX 队列锁定争用: SO_REUSEPORTSO_REUSEPORT_BPF 套接字选项

在多核系统上,如果应用程序使用 SO_REUSEPORTSO_REUSEPORT_BPF 套接字选项打开了端口,您可以提高多线程网络服务器应用程序的性能。如果应用程序不使用其中一个套接字选项,则所有线程都被强制共享单个套接字来接收传入流量。使用单个套接字会导致:

  • 对接收缓冲区的显著竞争,这可能会导致数据包丢弃和更高的 CPU 使用率。
  • CPU 使用率的显著增加
  • 可能的数据包丢弃
锁争用

使用 SO_REUSEPORTSO_REUSEPORT_BPF 套接字选项,一个主机上的多个套接字可以绑定到同一端口:

因此,重新使用端口

详情请查看 socket (7) man page 和 /usr/src/debug/kernel- <version>/linux- &lt;version> /tools/testing/selftests/net/reuseport_bpf_cpu.c 文件。

Red Hat Enterprise Linux 提供了一个如何在内核源中使用 SO_REUSEPORT 套接字选项的代码示例。要访问代码示例:

  1. 启用 rhel-9-for-x86_64-baseos-debug-rpms 存储库:

    # subscription-manager repos --enable rhel-10-for-x86_64-baseos-debug-rpms
    Copy to Clipboard
  2. 安装 kernel-debuginfo-common-x86_64 软件包:

    # dnf install kernel-debuginfo-common-x86_64
    Copy to Clipboard
  3. 现在,代码示例包括在 /usr/src/debug/kernel- <version>/linux- &lt;version&gt; /tools/testing/selftests/net/reuseport_bpf_cpu.c 文件中。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat