第 27 章 使用 tuned-profiles-realtime 隔离 CPU

要为应用程序线程提供尽可能的执行时间,您可以隔离 CPU。因此,从 CPU 中删除尽可能多的额外任务。隔离 CPU 通常涉及:

  • 删除所有用户空间线程。
  • 删除任何未绑定内核线程(绑定内核线程与特定的 CPU 绑定,且无法移动)。
  • 通过修改系统中每个 Interrupt Request(IRQ)的 /proc/irq/ N /smp_affinity 属性来移除中断。

本节演示了如何使用 tuned-profiles-realtime 软件包的 isolated_cores=cpulist 配置选项自动进行这些操作。

先决条件

  • 管理员特权。

27.1. 选择要隔离的 CPU

选择 CPU 进行隔离需要仔细考虑系统的 CPU 拓扑。不同的用例可能需要不同的配置:

  • 如果您的应用程序有一个多线程应用程序,其中线程需要通过共享缓存相互通信,则可能需要在同一 NUMA 节点或物理套接字中保存。
  • 如果您运行多个不相关的实时应用程序,可将 CPU 除以 NUMA 节点或套接字进行隔离。

hwloc 软件包提供有助于获取 CPU 信息的实用程序,包括 lstopo-no-graphicsnumactl

先决条件

  • 必须安装 hwloc 软件包。

流程

  1. 查看物理软件包中可用 CPU 的布局:

    # lstopo-no-graphics --no-io --no-legend --of txt

    图 27.1. 使用 lstopo-no-graphics 显示 CPU 布局

    lstopo 没有图形输出

    此命令对多线程应用程序很有用,因为它显示可用的内核和套接字数量以及 NUMA 节点的逻辑距离。

    此外,hwloc-gui 软件包提供 lstopo 实用程序,它会生成图形输出。

  2. 查看有关 CPU 的更多信息,如节点之间的距离:

    # numactl --hardware
    available: 2 nodes (0-1)
    node 0 cpus: 0 1 2 3
    node 0 size: 16159 MB
    node 0 free: 6323 MB
    node 1 cpus: 4 5 6 7
    node 1 size: 16384 MB
    node 1 free: 10289 MB
    node distances:
    node   0   1
      0:  10  21
      1:  21  10

其他资源

  • hwloc(7) man page