Как использовать GetNumaProximityNode (Win7 +)? - PullRequest
2 голосов
/ 24 января 2010

Начиная с Win7 / Server2008R2, доступна функция GetNumaProximityNode (Ex). Это должно помочь получить расстояние между узлами NUMA, но я не могу понять из документации (http://msdn.microsoft.com/en-us/library/ms683206(VS.85).aspx), как это должно работать. Он говорит, что вы дали ему расстояние, и он возвращает соответствующий узел (если есть) есть любой).

Читая некоторый код из ядра Linux и некоторую документацию HP APIC Я видел, что расстояния выражаются в целых числах, кратных 10 (расстояние до себя равно 10), но это также может быть что-то вроде 18 (не в два раза медленнее) , Но я все еще не могу понять, как вычислить расстояние между двумя узлами с помощью Windows API (в Linux libnuma имеет функцию «расстояние», которая делает это).

Кто-нибудь знает, как использовать эту функцию?

1 Ответ

1 голос
/ 24 января 2010

Я нашел решение для Windows (хотя пока не тестировал). Расстояния можно найти в SLIT - Таблица информации о местонахождении системы - расширение, предоставляемое OEM-изготовителями и доступное через ACPI. Он содержит матрицу N_CPU x N_CPU, которая описывает расстояния ([1] [3] - это расстояние между узлами 1 и 3; [Y] [Y] всегда равно 10; ниже 10 недопустимо).

В Windows Vista + есть метод GetSystemFirmwareTable, который можно использовать для извлечения этой таблицы (кажется, что под XP ее можно извлечь из реестра, но это сложнее).
Структуру этой таблицы можно найти в пакете ACPICA (http://www.acpica.org).

...