为什么'nonvoluntary_ctxt_switches'在隔离的CPU

时间:2017-09-22 17:22:47

标签: c++ c linux scheduler interrupt

我有2个独立CPU的服务器(4个超线程):

BOOT_IMAGE=/vmlinuz-4.4.0-72-generic root=/dev/mapper/valet--vg-root ro isolcpus=3,7,11,15 irqaffinity=0-2,4-6,8-10,12-14

这是我服务器的拓扑:

机器(共39GB)

  NUMANode L#0 (P#0 24GB)
    Package L#0 + L3 L#0 (12MB)
      L2 L#0 (256KB) + L1d L#0 (32KB) + L1i L#0 (32KB) + Core L#0
        PU L#0 (P#0)
        PU L#1 (P#8)
      L2 L#1 (256KB) + L1d L#1 (32KB) + L1i L#1 (32KB) + Core L#1
        PU L#2 (P#1)
        PU L#3 (P#9)
      L2 L#2 (256KB) + L1d L#2 (32KB) + L1i L#2 (32KB) + Core L#2
        PU L#4 (P#2)
        PU L#5 (P#10)
      L2 L#3 (256KB) + L1d L#3 (32KB) + L1i L#3 (32KB) + Core L#3
        PU L#6 (P#3)
        PU L#7 (P#11)
    HostBridge L#0
      PCIBridge
        PCI 8086:10c9
          Net L#0 "enp1s0f0"
        PCI 8086:10c9
          Net L#1 "enp1s0f1"
      PCIBridge
        PCI 15b3:1015
          Net L#2 "enp4s0f0"
          OpenFabrics L#3 "mlx5_0"
        PCI 15b3:1015
          Net L#4 "enp4s0f1"
          OpenFabrics L#5 "mlx5_1"
      PCIBridge
        PCI 102b:0532
      PCI 8086:3a22
        Block(Disk) L#6 "sda"
        Block(Disk) L#7 "sdb"
        Block(Removable Media Device) L#8 "sr0"
  NUMANode L#1 (P#1 16GB) + Package L#1 + L3 L#1 (12MB)
    L2 L#4 (256KB) + L1d L#4 (32KB) + L1i L#4 (32KB) + Core L#4
      PU L#8 (P#4)
      PU L#9 (P#12)
    L2 L#5 (256KB) + L1d L#5 (32KB) + L1i L#5 (32KB) + Core L#5
      PU L#10 (P#5)
      PU L#11 (P#13)
    L2 L#6 (256KB) + L1d L#6 (32KB) + L1i L#6 (32KB) + Core L#6
      PU L#12 (P#6)
      PU L#13 (P#14)
    L2 L#7 (256KB) + L1d L#7 (32KB) + L1i L#7 (32KB) + Core L#7
      PU L#14 (P#7)
      PU L#15 (P#15)

我有这样简单的应用程序:

main() {
    uint64_t cc = 0;
    while (1) { cc += 1; }
    return 0;
}

使用此命令taskset -c 7 ./app运行它我希望此进程上的nonvoluntary_ctxt_switches大约为0,但它是: voluntary_ctxt_switches: 1 nonvoluntary_ctxt_switches: 2589 并且每秒增加~100。

此外,我期待voluntary_ctxt_switches正好为0,因为我没有执行任何阻止的调用。

我检查了/proc/interrupts的CPU 7,可以看到下一个增加:NMI, LOC, PMI, RES

所以:

1)为什么上下文切换的数量如此之高以及究竟是什么原因?

2)我是否正确地说NMI和PMI中断是无害的并且不重要?

3)为什么我的RES中断值很高?

等待你的回答!

0 个答案:

没有答案