如何为前4个核心设置所有系统irq

时间:2017-06-09 02:29:57

标签: linux performance irq

服务器:我的服务器有2个intel 10核心cpus或8个核心。因此有些有40个内核,有些有32个内核(启用intel HT)

后台:我正在运行我们的应用程序,它将隔离cpus,目前,我隔离了该应用程序的最后32个核心(核心8-39)。 4核(核4-7)用于其他用途(通常,它将使用50%sys cpu)。我想为系统IRQ使用分配核心0-3。从目前开始,如果我运行应用程序,系统响应非常慢,我认为一些irq请求已被争议到核心4-7,这会导致低响应。 你认为如果有可能只使用4个内核来处理系统irq吗?

1 个答案:

答案 0 :(得分:0)

如果你有一个以上的插座(" stone"),这意味着你有NUMA系统。 这是获取更多信息https://en.wikipedia.org/wiki/Non-uniform_memory_access

的链接

尝试在同一个套接字上使用CPU。下面我将解释为什么以及如何做到这一点

  1. 确定每个套接字上的CPU ID究竟是什么。

    % numactl --hardware available: 2 nodes (0-1) node 0 cpus: 0 2 4 6 8 10 12 14 16 18 20 22 node 0 size: 24565 MB node 0 free: 2069 MB node 1 cpus: 1 3 5 7 9 11 13 15 17 19 21 23 node 1 size: 24575 MB node 1 free: 1806 MB node distances: node 0 1 0: 10 20 1: 20 10

  2. 这里"节点"意味着" socket" (石)。所以0,2,4,6个CPU位于同一节点上。 将所有IRQ移动到一个节点以将L3缓存用于一组CPU是有意义的。

    1. 隔离除0,2,4,6以外的所有CPU。
    2. 需要添加参数来启动Linux内核 isolcpus = cpu_number [,cpu_number,...]

      例如

      isolcpus=1,3,5,7-31
      
      1. 控制哪些IRQ在哪些CPU上运行
      2. cat / proc / interrupts

        1. 使用numactl命令启动应用程序以对应CPU和内存。 (这里需要了解NUMA和对齐的内容。请点击文章开头的链接)
        2. numactl [--membind = nodes] [--cpunodebind = nodes]

          1. 你的问题比我在这里提到的要大得多。
          2. 如果看到系统运行缓慢需要了解瓶颈。 尝试使用top,vmstat,iostat收集原始信息以找出弱点。

            提供您系统的一些统计信息,我会帮助您正确启用它。