2013-05-10 13 views
1

,我应该禁用NUMA运行Windows Server 2008 R2 SP1。我正在运行的应用程序不是在考虑NUMA的情况下设计的。在我的双路系统上禁用NUMA会更好吗?我的猜测是肯定的,但我想证实。我的服务器是Westmere双路系统。如果我的应用程序不是NUMA-Aware

回答

1

如果您的应用程序不是多线程的或者是多线程的,但并未使用线程在同一问题上同时工作(例如不是数据并行),那么您可以简单地将程序绑定到其中一个NUMA节点。这可以用各种工具完成,例如,在Windows任务管理器中使用“Set Affinity ...”上下文菜单命令。如果你的程序是并行的,那么你仍然可以使用一半可用的进程核心并绑定到一个NUMA节点。

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

1

如果我理解正确,开启NUMA不会损害性能。

如果您的应用程序不支持NUMA,则访问将由操作系统管理,因此可能跨越NUMA节点或可能位于同一个节点上 - 具体取决于操作系统具有的其他压力,多少内存/重新使用等等。操作系统会尽力让你的数据更快。

如果将它关闭,操作系统甚至不知道甚至尝试将每个应用程序的执行CPU保持在其内存附近。

+0

当然,如果您的应用程序使用来自多个线程的单个巨大内存池,肯定会损害性能。此外,如果一个节点使用所有分配的RAM(即使其他节点有一些空闲的RAM),NUMA更有可能导致交换 – noonex 2014-11-14 08:37:57

+0

但是,不管是否在操作系统级别启用NUMA,这都不适用? – mjaggard 2014-11-14 11:50:48

+0

我没有尝试NUMA基准测试,但从理论上看--NUMMA不尊重CPU之间共享的内存。同样,如果所有的RAM都被其中一个NUMA节点占用,并且其他节点拥有大量可用内存,则可能会发生交换。 – noonex 2014-11-15 16:50:30

相关问题