Dell 最近推出了第 12 代 PowerEdge 服务器。其服务支持具备新功能和硬件的主机。其中一个硬件功能就是使用 KCS 中断来执行 Linux 操作系统到基板管理控制器 (BMC) 的 IPMI 通信。
无 KCS 中断时,IPMI 驱动程序会生成一个内核线程 [ kipmi0 ],并定期调用该线程来执行从主机 Linux 操作系统到 BMC 的 IPMI 交易。该内核线程在 IPMI 交易过程中消耗大量的 CPU 周期。此外,该线程在其大多数执行时间内没有进行任何生产性工作。它只是读取 BMC 中出现的 _kcs_interface_status_register(IPMI 规范 – 表 9-1)。IPMI 驱动程序根据注册表中的不同键值管理从 Linux 操作系统到 BMC 的 IPMI 交易。Linux IPMI 驱动程序了解这些更改的唯一方式是定期读取 BMC 中的注册表。
在中断模式中,IPMI 驱动程序无需内核线程即可轮询 _kcs_interface_status_register 的任何状态更改。不管 BMC 在何时改变这个注册制,它都会使用一次中断来警告 IPMI 驱动程序。然后,IPMI 驱动程序的 ISR 例程会读取该状态注册值来执行 IPMI 交易。通过激活 IPMI 中断,Linux 操作系统上的 IPMI 密集型应用程序可有效地降低 CPU 负载。值得注意的是,经过 LAN 的 IPMI 通信不会使用中断功能,因为此类通信一般经由网络接口发生。
您可以使用下列指令在 SMBIOS 表中检查 Dell PowerEdge 平台对 IPMI-KCS 中断的支持:
$ dmidecode -t 38
# dmidecode 2.11
SMBIOS 2.7 present.
Handle 0x2600, DMI type 38, 18 bytes
IPMI Device Information
Interface Type: KCS (Keyboard Control Style)
Specification Version: 2.0
I2C Slave Address: 0x10
NV Storage Device: Not Present
Base Address: 0x0000000000000CA8 (I/O)
Register Spacing: 32-bit Boundaries
Interrupt Polarity: Active High
Interrupt Trigger Mode: Edge
Interrupt Number: a
中断号码 0x0A 由 IPMI 驱动程序保留。如果您的平台不支持 IPMI 通信,将不会出现上述最后的 3 个突出显示行。
在启动 IMPI 设备后,您还可以通过检查 /proc/ipmi/0/si_stats 文件夹检测中断信息。
$ /etc/init.d/ipmi start
Starting ipmi drivers: [ OK ]
$ cat /proc/ipmi/0/si_stats
interrupts_enabled: 1
short_timeouts: 4
long_timeouts: 1
idles: 4
interrupts: 247
attentions: 0
flag_fetches: 0
hosed_count: 0
complete_transactions: 20
events: 0
watchdog_pretimeouts: 0
incoming_messages: 0