我刚刚将 FreeBSD 10.2-STABLE 路由器投入生产,并运行通过 Ports 编译的 Quagga 0.99.24.1。将所有流量传送到这台机器后,SO 的负载非常高,一切都表明问题出在 IRQ 上,如下所示:
45 processes: 2 running, 42 sleeping, 1 waiting
CPU 0: 0.4% user, 0.0% nice, 0.0% system, 47.5% interrupt, 52.2% idle
CPU 1: 1.2% user, 0.0% nice, 0.8% system, 43.1% interrupt, 54.9% idle
CPU 2: 0.0% user, 0.0% nice, 1.2% system, 49.8% interrupt, 49.0% idle
CPU 3: 0.0% user, 0.0% nice, 0.0% system, 51.4% interrupt, 48.6% idle
CPU 4: 0.8% user, 0.0% nice, 0.8% system, 40.0% interrupt, 58.4% idle
CPU 5: 0.0% user, 0.0% nice, 0.8% system, 49.4% interrupt, 49.8% idle
CPU 6: 0.8% user, 0.0% nice, 0.8% system, 44.7% interrupt, 53.7% idle
CPU 7: 1.6% user, 0.0% nice, 0.8% system, 43.1% interrupt, 54.5% idle
Mem: 170M Active, 1118M Inact, 1300M Wired, 1550M Buf, 13G Free
Swap: 2862M Total, 2862M Free
PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND
11 root 8 155 ki31 0K 128K RUN 7 4087.9 413.04% [idle]
12 root 65 -84 - 0K 1040K WAIT 255 318.8H 383.54% [intr]
1841 root 1 35 0 679M 616M select 3 18.7H 17.97% /usr/local/sbin/bgpd -d
14 root 1 -16 - 0K 16K - 3 465:17 0.88% [rand_harvestq]
1611 root 1 20 0 177M 121M select 2 162:32 0.88% /usr/local/sbin/snmpd -p /var/run/net_snmpd.pid -c /usr/local/etc/snmpd.conf
我正在寻找使用 IRQ Affinity 的方法,然后找到了 cpuset。在手册和互联网上的示例中,IRQ 选项始终以十进制传递。当我使用 devinfo 研究我的系统时,我只看到 IRQ 六进制地址,如下所示:
igb4 pnpinfo vendor=0x8086 device=0x1f41 subvendor=0x8086 subdevice=0x1f41 class=0x020000 at slot=20 function=2 handle=\_SB_.PCI0.D010
Interrupt request lines:
0x11c
0x11d
0x11e
0x11f
0x120
0x121
0x122
0x123
0x124
我的问题是:我是否可以以相同的方式使用十进制或十六进制 IRQ 格式:
像这样:
cpuset -l 0x11c -x 1
或者
cpuset -l 284 -x 1
没关系吗?
此致。
答案1
查找问题,并使用不同的命令(例如 #vmstat -i 而不是 #devinfo -r -v),我发现了 IRQ 十进制。这样就可以无所畏惧地使用 #cpuset 了。
此致。