25.5 NUMA Architecture Machines NUMA架构的机器
尽管多核CPU表面上看起来十分强大,但它们也带来了新的问题。现在,多个内核要并发访问其他系统资源,这些资源就成为系统总体性能的瓶颈。例如,假如两个内核需要同时访问RAM,由于内存带宽限制了总体性能,所以造成双核系统相比单核系统只提升了30%到70%的性能。为了缓解这个问题,计算机现在采用了所谓的NUMA(Cache-Coherent Non-Uniform Memory Access)架构。
图中的4*4个CPU表示的是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如何支持所有这些逻辑处理器。下面对图中的内容进行解释:
■ 一台机器有一个或者多个处理器组,每个组包括1到64个逻辑处理器。
■ 一个处理器组有1个或多个NUMA节点。每个节点包括一些逻辑处理器,高速缓存,本地内存(它们紧密联合在一起)。
■ 每个NUMA节点都有一个或多个插座,以便插入硅芯片。
■ 每个插座的芯片都包含一个或多个CPU内核。
■ 每个内核都包含一个或多个逻辑处理器。如果芯片是超线程的,那么可能不止一个逻辑处理器。
今天的CLR还不能利用处理器组,所以它创建的所有线程都在处理器组0(默认组)中运行。在64位windows中运行时,最多能使用64核。由于32位windows只支持处理器组0,而且只支持32个CPU,所以托管应用程序在32位windows中运行时,最多能使用32核。
作者:石世特
出处:http://www.cnblogs.com/TivonStone/
希望本文对你有所帮助,想转随便转,心情好的话给我的文章留个链接.o(. .)o