偶尔我会遇到具有高处理器中断时间百分比的服务器(Windows 2003 和 2008)。有没有办法查看导致中断的程序或设备?
我看到 LOC 中断出现了巨大的峰值——大约每秒 400 万次,LOC 中断究竟是什么,什么会导致这些峰值,我该怎么办?
这是说明这些尖峰的穆宁图:
这是同一时期的 CPU 图表,显示了它是如何完全接管的。我喜欢这种颜色让服务器看起来在这些时期着火了......
这是一个运行 Ubuntu 8.04 的双四核 Xeon 服务器。报告的内核版本uname是 2.6.24-24-server。
这是 /proc/interrupts 的内容
CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7 0: 6930 6762 6633 6841 6760 6863 6692 6809 IO-APIC-edge timer 1: 0 0 0 0 0 1 1 0 IO-APIC-edge i8042 8: 3 2 4 3 7 5 6 3 IO-APIC-edge rtc 9: 0 0 0 0 0 0 0 0 IO-APIC-fasteoi acpi 12: 1 0 0 1 0 …
我有一个 Ubuntu VM,在基于 Ubuntu 的 Xen XCP 中运行。它托管基于 FCGI 的自定义 HTTP 服务,位于nginx.
下从负载ab 第一CPU芯饱和,其余为欠载。
在/proc/interrupts我看来,CPU0 提供的中断比任何其他内核都多一个数量级。他们中的大多数来自eth1.
我可以做些什么来提高此 VM 的性能?有没有办法更均衡地平衡中断?
血腥细节:
$ uname -a
Linux MYHOST 2.6.38-15-virtual #59-Ubuntu SMP Fri Apr 27 16:40:18 UTC 2012 i686 i686 i386 GNU/Linux
$ lsb_release -a
没有可用的 LSB 模块。
分销商 ID: Ubuntu
描述:Ubuntu 11.04
发布:11.04
代号:natty
$ cat /proc/interrupts
CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7
283:113720624 0 0 0 0 0 0 0 xen-dyn-event … 我想禁止某些 CPU 的中断。我听说过 IRQBALANCE_BANNED_CPUS 选项。我看到 irqbalance 在我机器的后台运行。我在哪里编辑以及如何配置该选项?例如,我想从中断中排除 cpus 2,3,4,5。参数描述符是:
提供 irqbalance 应该忽略的 CPU 掩码,并且永远不会将中断分配给
面具是什么意思?我在哪里使用该选项配置 irqbalance?
EDIT1:如何知道我的配置是否有效,换句话说,我的 CPU 没有收到中断?我正在检查 /proc/interrupts 但那里的一些数字正在增加。
EDIT2:现在我用 IRQBALANCE_BANNED_CPUS=3e 启动了我的机器,所以只有 CPU 0 不被禁止中断。所以我应该会看到 cpo0 收到很多中断,而其他 cpu 没有收到中断,对吗?这是我的 /proc/interrupts。所有 cpu 的粗体行都在变化。第 22、24、35 行和 LOC 正在更改。
CPU0 CPU1 CPU2 CPU3 CPU4 CPU5
0: 26 0 0 0 0 0 IO-APIC-edge timer
1: 2 0 0 0 0 0 IO-APIC-edge i8042
6: 3 0 0 0 0 0 IO-APIC-edge floppy
8: 1 0 0 0 …Run Code Online (Sandbox Code Playgroud) 谁能告诉我我运行什么命令来确定我的 10G 网卡是在单 RX-TX 队列模式还是多队列模式下运行?根据它看起来只有 1 个 RX/TX 队列cat /proc/interrupts
root@hostname:scripts]# cat /proc/interrupts | grep ens1f0
94: 360389979 0 0 0 184 0 330 0 0 0 0 0 0 0 0 0 0 169 0 0 0 0 0 0 0 0 0 0 0 0 0 0 IR-PCI-MSI-edge ens1f0-TxRx-0
95: 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 …Run Code Online (Sandbox Code Playgroud) 我有一个带有 3.2 内核的 Ubuntu 盒子、带有 2 个内核的 CPU 和基于通过 PCI 总线连接的 SJA1000 控制器的 CAN(控制器局域网)卡。
我正在测试卡的接收功能。它每秒可以处理约 4000 个数据包,相应的中断也每秒增加约 4000 次(如 /proc/interrupts 所示),并且不会对系统造成任何 CPU 负载。但是,如果我使用压力命令生成人工 CPU 负载:
chrt --idle 0 stress -c 2
Run Code Online (Sandbox Code Playgroud)
不再引发中断,因此不会收到任何消息。
为什么 CPU 负载会抑制硬件中断,对此可以采取什么措施?
一些背景。
几周前,在没有进行太多故障排除的情况下更换了一个盒子上的网卡,以找到问题的明确解决方案。一位高级管理员与一位初级管理员因硬件中断和以太网卡发生了小争执。具体来说,它们是如何工作的。初级管理员给出了一个含糊的答案,坚称自己是正确的,事情就这样结束了,没有真正的结论。
理论上我知道硬件中断是如何工作的,但是当网卡接收到信息包时它具体是如何工作的呢?硬件层面发生了什么?如何正确诊断是否发生了物理损坏,以避免本质上相当于扔零件解决问题?
我的服务器有24个CPU核心,96G内存,安装了CentOS 7.2 x86_64。
用大数据集启动我的程序后,我的程序将使用大约50G内存,Linux系统会显示系统中断率高,但上下文切换率低。dstat将显示在 500k int/s 和 1000k int/s 之间。CPU 使用率将接近 100%,大约 40% us,60% sy。
如果数据集很小,程序会使用大约5G内存,一切都会好的,CPU使用率100%,大约99%us,1% sy。这是预期的。
程序是我自己写的,是一个多线程程序。它不做任何网络IO,很少做磁盘IO,主要是内存操作和算术。无论数据集大小如何,线程模型和算法都是相同的。
我的问题是,我怎样才能准确地找出我的程序使用最多的中断(并尽可能摆脱它们以提高性能)?
有人可以帮助我分析我的/proc/interrupts文件输出中的数据吗?
$ cat /proc/interrupts
CPU0 CPU1
0: 22 0 IR-IO-APIC 2-edge timer
1: 2 0 IR-IO-APIC 1-edge i8042
8: 1 0 IR-IO-APIC 8-edge rtc0
9: 0 0 IR-IO-APIC 9-fasteoi acpi
12: 4 0 IR-IO-APIC 12-edge i8042
120: 0 0 DMAR-MSI 0-edge dmar0
122: 0 0 IR-PCI-MSI 327680-edge xhci_hcd
123: 25164 5760490 IR-PCI-MSI 1048576-edge enp2s0
124: 17 5424414 IR-PCI-MSI 524288-edge amdgpu
Run Code Online (Sandbox Code Playgroud)
到目前为止我编译的...
我在 Intel Core Duo 2GHz 上安装了 Windows XP SP3。根据 Process Explorer 的说法,“中断”进程持续占用 30-40% 的 CPU。正常吗?
interrupts ×10
linux ×5
ubuntu ×3
hardware ×2
high-load ×2
irq ×2
kernel ×2
nic ×2
10gbethernet ×1
debugging ×1
ethernet ×1
networking ×1
performance ×1
process ×1
windows ×1
windows-xp ×1