如果我的应用程序不是NUMA-Aware,我应该禁用NUMA吗?

时间:2013-05-10 16:50:44

标签: windows-server-2008-r2 numa

运行Windows Server 2008 R2 SP1。我正在运行的应用程序并未考虑NUMA。在我的双插槽系统上禁用NUMA会更好吗?我的猜测是肯定的,但我想确认一下。我的服务器是Westmere双插槽系统。

2 个答案:

答案 0 :(得分:1)

如果您的应用程序不是多线程或多线程但不使用线程同时处理同一问题(例如,不是数据并行),那么您只需将程序绑定到其中一个NUMA节点即可。这可以通过各种工具完成,例如使用Windows任务管理器中的“设置关联...”上下文菜单命令。如果您的程序是并行的,那么您仍然可以使用一半可用的进程核心并绑定到一个NUMA节点。

请注意,Westmere系统上的远程内存访问并不昂贵 - 延迟比本地访问高1.6倍,带宽几乎与本地访问相同,因此如果您对每个内存值进行大量处理,影响会很小。另一方面,在这样的系统上禁用NUMA导致两个NUMA域的精细网格交错,这使得所有应用程序都表现同样糟糕,因为大约50%的内存访问将是本地的,50%将是远程的。

答案 1 :(得分:1)

如果我理解正确,打开NUMA不会影响性能。

如果您的应用程序不支持NUMA,则访问将由操作系统管理,因此可能跨越NUMA节点或可能位于同一个节点 - 取决于操作系统具有的其他压力,您需要多少内存/ CPU使用等操作系统会尝试快速获取数据。

如果你关闭它,操作系统甚至不知道甚至试图让每个应用程序的执行CPU靠近它的内存。