win下進程與線程對NUMA的支持

 

微軟官網鏈接:https://docs.microsoft.com/en-us/windows/win32/procthread/numa-support

 

譯文如下:

        多處理器支持的傳統模型是對稱多處理器(SMP)。在這種模型中,每個處理器對內存和輸入/輸出有平等的訪問權。隨着處理器數量的增加,處理器總線成爲系統性能的一個限制。

        系統設計人員使用非均勻內存訪問(NUMA)來提高處理器速度,而不增加處理器總線上的負載。體系結構是不統一的,因爲每個處理器靠近內存的某些部分,而遠離內存的其他部分。處理器可以快速訪問它附近的內存,而訪問更遠的內存可能需要更長的時間。

        在NUMA系統中,中央處理器被安排在稱爲節點。每個節點都有自己的處理器和內存,並通過高速緩存相關的互連總線連接到更大的系統。

        系統試圖通過在處理器上調度線程來提高性能,這些處理器與正在使用的內存在同一個節點上。它試圖滿足節點內部的內存分配請求,但在必要時會從其他節點分配內存。它還提供了一個應用程序接口,使應用程序可以使用系統的拓撲結構。通過使用NUMA函數優化調度和內存使用,您可以提高應用程序的性能。

        首先,您需要確定系統中節點的佈局。要檢索系統中編號最高的節點,請使用getnumahighetestnodeNumber功能。請注意,這個數字不能保證等於系統中的節點總數。此外,具有序列號的節點不能保證靠得很近。要檢索系統上的處理器列表,請使用GetProcessAffinityMask功能。您可以使用來確定列表中每個處理器的節點getnumapprocessornode功能。或者,要檢索節點中所有處理器的列表,請使用GetNumaNodeProcessorMask功能。

        在確定了哪些處理器屬於哪些節點之後,您可以優化應用程序的性能若要確保進程的所有線程都在同一個節點上運行,請使用SetProcessAffinityMask函數使用指定同一節點中的處理器的進程相似性掩碼。這提高了線程需要訪問相同內存的應用程序的效率。或者,要限制每個節點上的線程數,請使用SetThreadAffinityMask功能。

        內存密集型應用程序需要優化它們的內存使用。若要檢索節點可用的可用內存量,請使用GetNumaAvailableMemoryNode功能。這VirtualAllocExNuma函數使應用程序能夠爲內存分配指定一個首選節點VirtualAllocExNuma不分配任何物理頁面,因此無論頁面是否在該節點或系統中的其他地方可用,它都將成功。物理頁面是按需分配的。如果首選節點的頁面不足,內存管理器將使用其他節點的頁面。如果內存被換出,當它被帶回來時,使用相同的過程。

NUMA支持超過64個邏輯處理器的系統

        在具有64個以上邏輯處理器的系統上,節點被分配給處理器組根據節點的容量來確定。節點的容量是系統啓動時存在的處理器數量,以及系統運行時可以添加的任何其他邏輯處理器。

Windows Server 2008、Windows Vista、Windows Server 2003和Windows XP:不支持處理器組。

        每個節點必須完全包含在一個組中。如果節點的容量相對較小,系統會將多個節點分配給同一個組,選擇物理上彼此靠近的節點以獲得更好的性能。如果一個節點的容量超過了一個組中處理器的最大數量,系統會將該節點分成多個較小的節點,每個節點都小到足以容納一個組。

        可以使用請求新進程的理想NUMA節點進程線程屬性首選節點創建流程時的擴展屬性。像線程理想處理器一樣,理想節點是對調度器的一個提示,調度器在可能的情況下將新進程分配給包含所請求節點的組。

        擴展的NUMA函數GetNumaAvailableMemoryNodeEx,getnumanodeproprocessormaskex,getnumapprocessornodeex,和GetNumaProximityNodeEx與未擴展的對應節點的不同之處在於節點號是aUSHORT值而不是UCHAR,以容納具有超過64個邏輯處理器的系統上可能更多的節點。此外,由擴展功能指定或檢索的處理器包括處理器組;未擴展函數指定或檢索的處理器是組相關的。有關詳細信息,請參見單個函數參考主題。

        羣組感知應用程序可以使用相應的擴展NUMA函數,以類似於本主題前面所述的方式將其所有線程分配給特定節點。應用程序使用GetLogicalProcessorInformationEx獲取系統上所有處理器的列表。請注意,除非將進程分配給單個組,並且目標節點位於該組中,否則應用程序無法設置進程關聯掩碼。通常應用程序必須調用SetThreadGroupAffinity將其線程限制在預期的節點上。

NUMA原料藥

下表描述了NUMA空氣污染指數。

NUMA原料藥
功能 描述
allocateuserserphysicalpagesunuma 分配要在任何中映射和取消映射的物理內存頁面地址窗口擴展(AWE)指定進程的區域,併爲物理內存指定NUMA節點。
CreateFileMappingNuma 爲指定文件創建或打開命名或未命名的文件映射對象,併爲物理內存指定NUMA節點。
GetLogicalProcessorInformation 檢索有關邏輯處理器和相關硬件的信息。
GetLogicalProcessorInformationEx 檢索關於邏輯處理器和相關硬件的關係的信息。
GetNumaAvailableMemoryNode 檢索指定節點中的可用內存量。
GetNumaAvailableMemoryNodeEx 檢索指定爲的節點中的可用內存量USHORT價值。
getnumahighetestnodeNumber 檢索當前具有最高數目的節點。
GetNumaNodeProcessorMask 檢索指定節點的處理器掩碼。
getnumanodeproprocessormaskex 檢索指定爲的節點的處理器掩碼USHORT價值。
getnumapprocessornode 檢索指定處理器的節點號。
getnumapprocessornodeex 將節點號檢索爲USHORT指定處理器的值。
GetNumaProximityNode 檢索指定鄰近標識符的節點號。
GetNumaProximityNodeEx 將節點號檢索爲USHORT指定鄰近標識符的值。
MapViewOfFileExNuma 將文件映射視圖映射到調用進程的地址空間,併爲物理內存指定NUMA節點。
VirtualAllocExNuma 在指定進程的虛擬地址空間中保留或提交一個內存區域,併爲物理內存指定NUMA節點。

 

QueryWorkingSetEx函數可用於檢索分配了頁面的NUMA節點。如需範例,請參閱從NUMA節點分配內存

從NUMA節點分配內存

多處理器

處理器組

 

總結:

根據文中描述,以及編碼實驗,處理器組結構圖,如下所示:

 

===================================================

===================================================

業餘時間不定期更新一些想法、思考文章,歡迎關注,共同探討,沉澱技術!

            

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章