如何使用GetNumaProximityNode(Win7 +)?

问题描述:

从Win7/Server2008R2开始,GetNumaProximityNode(Ex)函数可用。它应该帮助检索NUMA节点之间的距离,但我无法从文档(http://msdn.microsoft.com/en-us/library/ms683206(VS.85).aspx)了解它应该如何工作。它说你给它一个距离,并且它返回相应的节点(如果有的话)。如何使用GetNumaProximityNode(Win7 +)?

阅读从Linux内核和一些HP APIC文档一些代码,我看到距离在10(自我的距离是10)的整数倍数的表达,但它也可以蜜蜂像18(不正好两个慢倍)。但我仍然无法弄清楚如何使用Windows API计算两个节点之间的距离(在Linux下,libnuma具有一个“距离”功能)。

有谁知道如何使用这个功能?

我找到了Windows的解决方案(虽然尚未测试)。距离可以在SLIT - System Locality Information Table(系统位置信息表)中找到 - 这是由OEM提供并可通过ACPI提供的扩展。它包含描述距离的N_CPU x N_CPU矩阵([1] [3]是节点1和节点3之间的距离; [Y] [Y]总是10;低于10无效)。

Windows Vista +具有GetSystemFirmwareTable方法,可用于检索此表(似乎在XP下它可以从注册表中检索,但它更困难)。
该表的结构可以在ACPICA包中找到(http://www.acpica.org)。