CLR_via_C#.3rd 翻译[25.5 NUMA架构]

25.5 NUMA Architecture Machines NUMA架构的机器 

 

尽管多核CPU表面上看起来十分强大,但它们也带来了新的问题。现在,多个内核要并发访问其他系统资源,这些资源就成为系统总体性能的瓶颈。例如,假如两个内核需要同时访问RAM,由于内存带宽限制了总体性能,所以造成双核系统相比单核系统只提升了30%到70%的性能。为了缓解这个问题,计算机现在采用了所谓的NUMA(Cache-Coherent Non-Uniform Memory Access)架构。

 

 

图中的4*4CPU表示的是16位,现在通常是32位。

 

图25-3展示了基于NUMA的一个计算机系统的架构。这个系统有4个节点。每个节点都包含4个CPU,一个北桥,一个南桥以及本地内存(RAM)。有的节点还连接了本地设备。所有内存都可以由任何节点访问;然而,访问内存所花的时间是不一致的(non-uniform)。例如,节点1的任何CPU都可以非常快地访问节点1的本地内存。节点1的CPU也可访问节点2和4的内存,但会产生较大的性能损失。节点1的CPU还可访问节点3的内存,但性能损失得更大,因为节点1和节点3之间没有直接通信线路。即使16个CPU散布在4个不同的节点上,硬件也确保所有CPU的缓存(cache)保持一致,而且相互同步。

 

Win32 API为非托管开发人员提供了许多函数,允许专门在一个特定的NUMA节点上分配内存,并允许强制线程在一个特定的NUMA节点上运行。今天,CLR并没有专门设计针对NUMA系统的东西。未来,我想CLR可能会添加一些东西,比如为每个NUMA节点准备一个垃圾回收堆,而且可能允许应用程序指定将一个对象分配到一个特定的节点上。另外,CLR可能允许将对象从一个节点迁移到另一个节点,具体取决于哪个CPU访问对象的频率最高。

 

回溯到20世纪90年代初,还很难想象有一天计算机会有32个CPU。所以,32位Windows首次问世时,它被设计成支持最多在一台机器中安装32个CPU。后来,Microsoft开始提供64位Windows,它支持最多在一台机器中安装64个CPU。现在看起来64个CPU似乎很多,但根据目前的趋势来看,似乎就在不远的将来,就会达到甚至超过这个数量,实际上已经达到。

 

从Windows Server 2008 R2开始,MicrosoftWindows开始支持在一台机器中使用256个逻辑处理器。图25-4展示了Windows如何支持所有这些逻辑处理器。下面对图中的内容进行解释:

  ■ 一台机器有一个或者多个处理器组,每个组包括164个逻辑处理器。

  ■ 一个处理器组有1个或多个NUMA节点。每个节点包括一些逻辑处理器,高速缓存,本地内存(它们紧密联合在一起)。

  ■ 每个NUMA节点都有一个或多个插座,以便插入硅芯片。

  ■ 每个插座的芯片都包含一个或多个CPU内核。

  ■ 每个内核都包含一个或多个逻辑处理器如果芯片是超线程的,那么可能不止一个逻辑处理器。

 

 

今天的CLR还不能利用处理器组,所以它创建的所有线程都在处理器组0(默认组)中运行。在64windows中运行时,最多能使用64核。由于32windows只支持处理器组0,而且只支持32CPU,所以托管应用程序在32windows中运行时,最多能使用32核。

原文地址:https://www.cnblogs.com/TivonStone/p/1818448.html