Oracle® VM Server for SPARC 3.3 管理指南

退出打印视图

更新时间: 2015 年 10 月
 
 

调整中断限制

硬件提供了有限数目的中断,因此,Oracle Solaris 会限制每个设备可以使用的中断次数。默认限制应与典型系统配置的需求匹配,但可能需要为某些系统配置调整此值。


注 - 这些限制不适用于 SPARC M7 系列服务器和 SPARC T7 系列服务器。

如果对 PCIe 总线启用 I/O 虚拟化,则会将中断硬件资源分配给每个 I/O 域。分配给每个域的这些资源的数量有限,这可能导致一些中断分配问题。这种情况仅影响 UltraSPARC T2、UltraSPARC T2 Plus、SPARC T3、SPARC T4、SPARC T5、SPARC M5 和 SPARC M6 平台。

Oracle Solaris 控制台上的以下警告表示在附加 I/O 设备驱动程序时中断供应已耗尽:

WARNING: ddi_intr_alloc: cannot fit into interrupt pool

具体而言,以下情况下可能需要调整此限制:当系统划分为多个逻辑域并且当向任意来宾域分配了太多的 I/O 设备时。Oracle VM Server for SPARC 会将中断总数划分为较小中断集并将其分配给来宾域。如果向某个来宾域分配了太多的 I/O 设备,则其供应可能太少以致于无法向每个设备分配默认的中断限制。因此,来宾域在完全附加所有驱动程序之前会耗尽其中断供应。

某些驱动程序提供了一个可选的回调例程,允许 Oracle Solaris OS 自动调整其中断。默认限制不适用于这些驱动程序。

使用 ::irmpools::irmreqs MDB 宏确定如何使用中断。::irmpools 宏显示划分为池的总体中断供应。::irmreqs 宏显示哪些设备映射到每个池。对于每个设备,::irmreqs 显示是否由一个可选的回调例程强制执行默认限制、每个驱动程序请求了多少中断,以及每个驱动程序拥有多少中断。

虽然这些宏不显示有关未能附加的驱动程序的信息,但可使用该信息计算可调整默认限制的限度。对于使用了多个中断且没有提供回调例程的任何设备,都可以通过调整默认限制来强制其使用较少的中断。对于此类设备,减少默认限制可以释放中断供其他设备使用。

要调整默认限制,请在 /etc/system 文件中将 ddi_msix_alloc_limit 属性设置为从 18 的某个值。然后,重新引导系统以使更改生效。

有关正确创建或更新 /etc/system 属性值的信息,请参见更新 /etc/system 文件中的属性值

为了最大限度地提高性能,请先分配较大的值,然后以较小的增量减小该值,直至系统成功引导且不出现任何警告。可使用 ::irmpools::irmreqs 宏来度量调整对所附加的所有驱动程序的影响。

例如,假设在引导来宾域中的 Oracle Solaris OS 时发出了以下警告:

WARNING: emlxs3: interrupt pool too full.
WARNING: ddi_intr_alloc: cannot fit into interrupt pool

::irmpools::irmreqs 宏显示以下信息:

# echo "::irmpools" | mdb -k
ADDR             OWNER   TYPE   SIZE  REQUESTED  RESERVED
00000400016be970 px#0    MSI/X  36    36         36

# echo "00000400016be970::irmreqs" | mdb -k
ADDR             OWNER   TYPE   CALLBACK NINTRS NREQ NAVAIL
00001000143acaa8 emlxs#0 MSI-X  No       32     8    8
00001000170199f8 emlxs#1 MSI-X  No       32     8    8
000010001400ca28 emlxs#2 MSI-X  No       32     8    8
0000100016151328 igb#3   MSI-X  No       10     3    3
0000100019549d30 igb#2   MSI-X  No       10     3    3
0000040000e0f878 igb#1   MSI-X  No       10     3    3
000010001955a5c8 igb#0   MSI-X  No       10     3    3

在此示例中,默认限制是每个设备 8 个中断,此中断限制不足以支持将最后的 emlxs3 设备附加到系统。假设所有 emlxs 实例的行为方式相同,则 emlxs3 可能请求了 8 个中断。

从总的池大小 36 个中断中减去由所有 igb 设备使用的 12 个中断,还剩下 24 个中断可供 emlxs 设备使用。将 24 个中断除以 4,这表明每个设备 6 个中断将能够使所有 emlxs 设备都可以附加,且具有相同的性能。因此,在 /etc/system 文件中添加以下调整:

set ddi_msix_alloc_limit = 6

有关正确创建或更新 /etc/system 属性值的信息,请参见更新 /etc/system 文件中的属性值

当系统成功引导且未出现任何警告时,::irmpools::irmreqs 宏会显示以下更新的消息:

primary# echo "::irmpools" | mdb -k
ADDR             OWNER   TYPE   SIZE  REQUESTED  RESERVED
00000400018ca868 px#0    MSI/X  36    36         36
 
# echo "00000400018ca868::irmreqs" | mdb -k
ADDR             OWNER   TYPE   CALLBACK NINTRS NREQ NAVAIL
0000100016143218 emlxs#0 MSI-X  No       32     8    6
0000100014269920 emlxs#1 MSI-X  No       32     8    6
000010001540be30 emlxs#2 MSI-X  No       32     8    6
00001000140cbe10 emlxs#3 MSI-X  No       32     8    6
00001000141210c0 igb#3   MSI-X  No       10     3    3
0000100017549d38 igb#2   MSI-X  No       10     3    3
0000040001ceac40 igb#1   MSI-X  No       10     3    3
000010001acc3480 igb#0   MSI-X  No       10     3    3