windows平台对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节点分配内存

多处理器

处理器组

 

总结:

根据文中描述,以及编码实验,处理器组结构图,如下所示:

 


若对你有帮助,欢迎点赞、收藏、评论,你的支持就是我的最大动力!!!

同时,阿超为大家准备了丰富的学习资料,欢迎关注公众号“超哥学编程”,即可领取。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百里杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值