评估Linux-CentOS/Intel机器上的SMI(系统管理中断)延迟

Avi*_*rel 7 linux centos x86-64 interrupt

我有兴趣评估运行CentOS的Linux机器上SMI处理的行为(延迟,频率),并用于(非常)软实时应用程序.

  1. 推荐使用哪些工具(针对CentOS的hwlatdetect?),以及最佳解决方案是什么?

  2. 如果没有可用于CentOS的好工具,我是否正确假设在同一台机器上安装不同的操作系统应该产生相同的结果,因为底层硬件/ BIOS是相同的?

  3. 关于这些参数的球场数据是否有任何来源.

这些机器是X86_64架构,运行CentOS 6.4(内核2.6.32-358.23.2.el2.centos.plus.x86_64.)

Lat*_*ncy 11

SMI在正常运行期间肯定会发生.我的家用台式机在芯片组中启用了芯片组驱动的SMI,每秒一半.由于BIOS驱动的CPU频率扩展方案,我也看到一些服务器每秒两次.但是,有些系统可能会长时间没有发生SMI,所以它真的取决于它.

问题#1:hwlatdetect是检测系统上发生的SMI延迟的一种选择.BIOSBITS是另一个选项,它是一个可引导的CD,可以识别SMI是否正在发生.您还可以通过创建在循环中旋转并采用时间戳(使用RDTSC)的内核模块来编写自己的测试.如果您看到两个时间戳读数之间存在较长的间隙,则可以查询CPU MSR 0x34以查看SMI计数器是否递增,这表示发生了SMI.

如果要生成SMI,可以创建一个内核模块,对OUT端口0xb2执行OUT CPU指令,例如将值0写入此端口.(您也可以通过在写入端口0xB2之前和之后收集时间戳来计时此SMI).

问题#2,SMI在操作系统以下的层运行,因此您选择的操作系统不会产生任何影响.

问题3:BIOSBITS建议将SMI延迟保持在150微秒以下.


rak*_*ib_ 5

SMI 会将您的系统置于 SMM(系统管理模式)模式,这将在 SMI 处理时间段内推迟内核的正常执行。换句话说,SMM 既不是我们所知道的内核正常操作的实模式也不是保护模式,而是执行一些保存在 SMRAM(存储在 Bios 固件中)的特殊指令。要检测它的延迟,您可以尝试触发 SMI(它可以是软件生成的)并尝试捕获在 SMM 模式下花费的总时间。为此,您可以编写一个 Linux 内核模块,因为您需要一些特殊权限才能发出 SMI(我认为)。

对于实时系统,我认为如果你能避免像 SMI 这样的中断就好了。

  • @AviPerel 在最近的 CPU 上,有一个 MSR_SMI_COUNT 寄存器,为您提供已发生的 SMI 数量。它不会为您提供延迟信息,但可以为您指示它们发生的频率。[这里](http://kernel.ubuntu.com/git?p=cking/debug-code/.git;a=commit;h=7e980f36442b2f11b496d3be2af0b189ab26dd3b) 是一个轮询这个寄存器并每秒打印一次其值的工具。 (4认同)