2010-01-24 24 views
2

À partir de Win7/Server2008R2, la fonction GetNumaProximityNode (Ex) est disponible. Cela devrait aider à récupérer la distance entre les nœuds NUMA, mais je ne peux pas comprendre à partir de la documentation (http://msdn.microsoft.com/en-us/library/ms683206(VS.85).aspx) comment il est censé fonctionner. Il dit que vous lui donnez une distance, et il renvoie le nœud correspondant (s'il y en a). En lisant du code du noyau Linux et de la documentation HP APIC, j'ai vu que les distances sont exprimées en entiers multiples de 10 (la distance à self est de 10), mais il peut aussi être quelque chose comme 18 (pas exactement deux fois plus lent).). Mais je ne peux toujours pas comprendre comment calculer la distance entre deux nœuds en utilisant l'API Windows (sous Linux libnuma a une fonction 'distance' qui fait cela).Comment utiliser GetNumaProximityNode (Win7 +)?

Est-ce que quelqu'un sait comment utiliser cette fonction?

Répondre

1

J'ai trouvé une solution pour Windows (mais pas encore testé). Les distances peuvent être trouvées dans la table SLIT - System Locality Information Table - une extension fournie par les OEM et disponible via ACPI. Il contient une matrice N_CPU x N_CPU qui décrit les distances ([1] [3] est la distance entre les nœuds 1 et 3, [Y] [Y] est toujours 10, en dessous de 10 est invalide).

Windows Vista + a la méthode GetSystemFirmwareTable qui peut être utilisée pour récupérer cette table (il semble que sous XP il peut être récupéré du registre, mais c'est plus difficile).
La structure de ce tableau peut être trouvée dans le paquet ACPICA (http://www.acpica.org).