??xml version="1.0" encoding="utf-8" standalone="yes"?>精品久久香蕉国产线看观看亚洲 ,国产精品亚洲综合专区片高清久久久 ,久久综合综合久久综合http://www.shnenglu.com/beautykingdom/category/9451.htmlzh-cnMon, 02 Feb 2009 16:47:06 GMTMon, 02 Feb 2009 16:47:06 GMT60NUMA与英特尔下一代Xeon处理器学习心?lt;?gt;http://www.shnenglu.com/beautykingdom/archive/2009/02/02/72826.htmlchatlerchatlerMon, 02 Feb 2009 14:18:00 GMThttp://www.shnenglu.com/beautykingdom/archive/2009/02/02/72826.htmlhttp://www.shnenglu.com/beautykingdom/comments/72826.htmlhttp://www.shnenglu.com/beautykingdom/archive/2009/02/02/72826.html#Feedback0http://www.shnenglu.com/beautykingdom/comments/commentRss/72826.htmlhttp://www.shnenglu.com/beautykingdom/services/trackbacks/72826.html      作ؓ一名工E师Q一名做技术的工程师,NUMA也是我的q期工作重点之一。在工作旉Q在茶余饭后Q也看了些NUMA的资料,学习了英特尔下一代Xeon处理器。这里就是我的一点小l,一点心得,和感兴趣的朋友分享分享?/p>

因时间有限,每次ȝ一部分Q慢慢道来,Ʋ知详情Q下回分晓! :-)

 一、概q?/span>

从系l架构来_目前的主企业服务器基本可以分ؓ三类Q?/span>SMP (Symmetric Multi ProcessingQ对U多处理架构)Q?/span>NUMA (Non-Uniform Memory AccessQ非一致存储访问架?/span>)Q和MPP (Massive Parallel ProcessingQv量ƈ行处理架?/span>)。三U架构各有特点,本文重点聊?/span>NUMA?/span>

       Z了解NUMAQ我q里׃l一?/span>NUMA与其他两U?/span>Non-NUMA的主要区别?/span>

1Q?/span>SMPQ?/span>Symmetric Multi ProcessingQ?/span>

       SMP是非常常见的一U架构。在SMP模式下,多个处理器均对称的连接在pȝ内存上,所有处理器都以q等的代仯问系l内存。它的优Ҏ对内存的讉K是^{、一致的Q缺Ҏ因ؓ大家都是一致的Q在传统?/span> SMP pȝ中,所有处理器都共享系lȝQ因此当处理器的数目增多Ӟpȝȝ的竞争冲H迅速加大,pȝȝ成ؓ了性能瓉Q所以目?/span> SMP pȝ的处理器数目一般只有数十个Q可扩展性受到很大限制?/span>

2Q?/span>MPP (Massive Parallel Processing)

       MPP则是逻辑上将整个pȝ划分为多个节点,每个节点的处理器只可以访问本w的本地资源Q是完全无共享的架构。节点之间的数据交换需要Y件实施。它的优Ҏ可扩展性非常好Q缺Ҏ彼此数据交换困难Q需要控制Y件的大量工作来实现通讯以及d的分配、调度,对于一般的企业应用而言q于复杂Q效率不高?/span>

3Q?/span>NUMAQ?/span>Non-Uniform Memory AccessQ?/span>

       NUMA架构则在某种意义上是l合?/span>SMP?/span>MPP的特点:逻辑上整个系l也是分为多个节点,每个节点可以讉K本地内存资源Q也可以讉Kq程内存资源Q但讉K本地内存资源q远快于q程内存资源。它的优Ҏ兼顾?/span>SMP?/span>MPP的特?/span>, 易于理Q可扩充性好Q缺Ҏ讉Kq程内存资源的所需旉非常的大?/span>

       在实际系l中使用比较q的?/span>SMP?/span>NUMA架构。像传统的英特尔IA架构是SMPQ而很多大型机采用?/span>NUMA架构?/span>

       现在已经q入了多核时代,随着核数的越来越多,对于内存吞吐量和延迟有了更高的要求。正是考虑到这U需求,NUMA架构出现在了最新的q?/span>下一代Xeon处理?/span>中?br>
        做ؓq下一代的45nm Xeon处理器, 它会成ؓ未来q从台式机、笔记本到服务器全线产品的主处理器?比较前一代酷睿处理器q_Q它的^台在对以前的pȝ架构和内存层ơ体p进行了重大改变的同Ӟ对微架构也进行了全方位的l化Q?主要改进表现在以下的Ҏ:
?> 新的核心架构Q最大可扩展到每个接?个核?br>?> 同步多线E?SMT) 技术最大允许每个处理器可以q行8个线E?br>?> 最新的点到点直q架构:Intel® QuickPath Interconnect (Intel® QPI)技?br>?> Intel® QuickPath 集成内存控制器(IMCQ,DDR3接口
?> 微架构功能的改进Q包括增强的SSE4.2指o集,改进的锁定支持,循环和分支预测{特?br>?> 更好的节能特?/p>

下面详细介绍一下下一代Xeon处理器四大主要技?

?> Intel® QuickPath Interconnect (Intel® QPI)技?br>使用QPI架构代替了原来的FSB架构QQPI是基于数据包传输Q高带宽低gq的点到点传输技术,速度可以辑ֈ6.4GT/sQ对双向传输的QPIȝq接来说理论最大值可以达?5.6GB/s的数据传输,q远高于原来ZFSB架构的数据带宽?/p>

?> Intel® QuickPath 集成内存控制器(IMCQ?br>在每一个socket上集成了独立的DDR3内存控制器(IMCQ供接口讉K内存Q较之非IMC的^収ͼ大大提高了带宽(使用DDR3Q?333可以辑ֈ32GB/s的峰值带宽,较之以前的^台具有四到六倍的带宽提升Q,显著地降低了内存延迟Q从而提升了性能Qؓ每个CPU提供了访问本地内存资源的快速通道。与前一代^C同的是,内存讉K采用NUMA架构Q对于NUMA-aware的应用来说可以得到更大的性能提升。DDR3的IMC最大支持到每个CPU接口96GB的DDR3内存定wQ将来最大容量可以达?44GBQؓ高端的企业运提供了强有力的内存支持?/p>

同志们,NUMA在这闪亮登ZQ?

?> 改进的电源管?br>集成在芯片上的电源管理得能耗的控制更加高效?/p>

?> 同步多线E技术(SMTQ?br>同步多线E技术得每个核心可以同时执?个线E,所以对?核的CPU来说Q就可以在每个处理器芯片上达到最?个逻辑处理器?/p>

前面介绍了NUMA的很牛的架构Q那目前pȝ层面上,软g对NUMA的支持怎么样呢Q请见本文:NUMA架构软g支持?/span>

对于NUMA架构而言Q经q了几十q的发展Q目前的软g支持栈已l非常完备,从底层的操作pȝQ到之上的数据库、应用服务器Q基本所有主的产品均以?/span>NUMA提供了充分的支持?/span>

操作pȝQ?/span>Operating SystemQ?/span>

目前Q?/span>Windows Server 2003 ?/span>Windows XP 64-bit Edition, Windows XP{都?/span>NUMA aware的,?/span>Windows Vista则有了对Numa调度的支持。所有?/span>2.6版本以上kernel?/span>Linux操作pȝ都能够支?/span>NUMA。?/span>SolarisQ?/span>HP-Unix{?/span>UNIX操作pȝ也是充分支持NUMA架构的?/span>

数据库(DatabaseQ?/span>

对于数据库品来_Oracle?/span>8i开始支?/span>NUMA,而之后的Oracle9iQ?/span>Oracle10gQ?/span>Oracle11g都能够支?/span>NUMA?/span>SQL Server 2005 ?/span>SQL Server 2008均有效的提供了对NUMA的支持?/span>

中间件服务器Q?/span>MiddlewareQ?/span>

目前业界典型的受控程序主要是Java应用?/span>.Net应用。由于内存分配,U程调度对于应用而言是透明的,完全是由虚拟机来处理。因此它们在NUMA环境下的性能表现主要取决于虚拟机的实现是否能充分利用到底层操作系l对NUMA的支持?/span>

      lg所qͼ目前的Y件栈?/span>NUMA架构均已l作了充分的支持。那么应用Y件如何支?/span>NUMA架构呢?误下面章节的论q?/span>

在传l?/span>SMPpȝ上,所?/span>CPU都以同样的方式通过一个共享内存控制器来访问内存,?/span>CPU之间也是通过它来q行交流Q所以很Ҏ造成拥堵。而一个内存控制器所能够理的内存数量也是非常有限的。此外,通过唯一?/span>hub讉K内存造成的gq也是非帔R的?/span>

 ?/span>NUMAl构下,每个计算Z再只有唯一的内存控制器Q而是把整个系l分成多个节炏V每个节点分别有自己的处理器和内存。系l中所有的节点都通过全互联的方式q接。所以,每当在系l中增加新的节点Q系l所能够支持的内存和带宽都会增加Q具有非常好的扩展性?/span>

 下面p?strong>NUMA的内存组l?/strong>

 ?/span>NUMApȝ中,每个CPU可以讉K两种内存Q本地内存(Local MemoryQ和q端内存Q?/span>Remote MemoryQ。和CPU在同一个节点的内存UCؓ本地内存Q访问gq非怽。和CPU在不同节点上的内存叫做远端内存,CPU需要通过节点互联方式讉KQ所以访问gq要比访问本地内存长?/span>

 从Y件的角度来看Q远端内存和本地内存是以同样的方式访问的。理ZԌNUMApȝ可以被Y件视ZSMP同样的系l,不区分本地和q端内存。但是如果追求更好的性能Q这个区别还是需要被考虑的?/span>

 l实验,对于常规的内存操作,如清I(MemsetQ,块复ӞMemcpyQ,读写(StreamQ,指针q溯Q?/span>Pointer ChaseQ等操作来说Q本地内存的讉K速度要远q优于远端内存?/span>

 ׃ NUMA 同时使用本地内存和远端内存,因此Q访问某些内存区域的旉会比讉K其他内存区域的要ѝ本地内存和q端内存通常用于引用当前正在q行的线E。本地内存是指与当前正在q行U程?/span> CPU 位于同一节点上的内存。Q何不属于当前正在q行的线E所在的节点的内存均端内存。访问远端内存的开销与访问本地内存的开销比率UCؓ NUMA 比率。如?/span> NUMA 比率?/span> 1Q则它是对称多处?/span> (SMP)。比率越高,讉K其他节点内存的开销p大。不支持 NUMA ?/span> 应用E序有时?/span> NUMA g上的执行效果非常差?/span>

 ׃讉K本地内存和远端内存的开销是有区别的,所以在NUMA模式下,如果每个U程更多的是讉K本地内存Q那么性能相比而言会有一定提升?/span>

多谢各位的参与和支持Q让我更有动力去把这个系列写好。前面有同学问v了QPIQ我q里pl解释一下,而QPI也是下一代Xeon处理器的Ҏ之一?/p>

QPI全称Intel® QuickPath InterconnectQ是直接q接同一台机器的不同CPU之间的传输通道Q得各个核QCOREQ之间的数据传输更快Q如果数据在cache里,可以直接用QPI来传输,而不用再讉K内存了?/span>

下一代Xeon处理器用QPI架构代替了原来的FSB架构QQPI是基于数据包传输Q高带宽低gq的点到点传输技术,速度可以辑ֈ6.4GT/s,q远高于原来ZFSB架构的数据带宽。当?具体q_的实CQPIq接数目可以Ҏ目标市场和系l复杂性而有所不同Q表现出极大的灵zL和扩展性?nbsp;

又有同学可能要问Q那同一个CPU内的不同的核怎么交换数据呢?q就更简单了。下一代Xeon处理器的不同核是存在cache׃n的,q样如果数据在cache里,那就直接׃n了,不用再到内存里找Q简单吧Q呵?/span>

接下来讲?span>NUMA{略Q也是Z更好的利用NUMA来给׃q活Q?/span>

为描q在NUMA架构下针对内存访问的优化Q我们可以引?/span>NUMA{略的概c?/span>NUMA{略(NUMA Policy)x指在多个节点上合理的q行内存分配的机制。对于不同Y件设计要求,{略的目标可能会不同Q有一些设计可能强调低延迟讉KQ另一些则可能更加看重内存的访问带宽?/span>

 对于低gq访问的设计Q基本的分配方式是量在线E的本地内存上ؓ其进行分配, q尽量让U程保持在该节点上。这被称为线E的节点亲和?/span>(Node affinity)。这h充分利用了本地内存的低gq, 同时也能有效降低节点间的通信负担?/span>

 NUMA架构的一个优势是Q即便是在拥有大?/span>CPU的大规模pȝ中,我们也可以保证局部内存访问的低gq。通常来讲Q?/span>CPU的处理速度是远大于内存的存取速度的。在d内存ӞCPU常常需要花大量的时钟周期来{待。降低内存访问的延迟因而能够有效的提升软g性能?/span>

 另外QؓSMP设计的操作系l通常会有~存亲和?/span>(Cache Affinity) 的优化措施。缓存亲和性机制可以让数据量长时间的保留在某一?/span>CPU的缓存中Q而不是来回在多个CPU的缓存里换来换去。操作系l通常是通过优化q行U程/q程调度来保证这一点:在线E被重新调入Ӟ调度器会量让线E在之前q行的同一?/span>CPU上运行,从而保证缓存利用率。这一机制昄是和NUMApȝ量利用本地内存的策略是一致的Q有利于面向SMPpȝ的程序向NUMA架构UL?/span>

 但缓存亲和性机制同NUMApȝ的节点亲和性又是有区别的:首先Q同一个节炚w多个CPU或者核的线E迁Udƈ不媄响该U程的节点亲和性;其次Q当U程被迫q移到其他节ҎQ他所拥有的内存是不会跟着q移的, 仍然保留在原来位|。这个时候,本地内存变成了q端内存Q对它的讉K既慢又占用节炚w信带宽。相对的Q线E在q移之后能够以较的代hq速徏立v新的~存Qƈl箋在新CPU上体现缓存的亲和优势?/span> 因此Q?/span>NUMApȝ对于节点亲和性的依赖更大?/span>

 操作pȝ的调度器同时也不能仅仅ؓ保证节点亲和性做优化。因为通常相对于频J访问远端内存来_?/span>CPUI闲带来的性能损失更大。如果特定应用系l的性能受内存访问的影响q大?/span>CPU的利用率Q这个时候程序员或者管理员则可采用特别?/span>NUMA{略来强调节点的亲和性,从而提升性能?/span>

 另外, 管大部分应用会因ؓ优化响应旉而收益,q有一部分应用则对内存带宽比较敏感。ؓ了提升内存带宽,NUMA架构下的多个内存控制器可以ƈ行用。这cM?/span>RAID阵列通过q行处理盘IO来提升读写性能。通过适当的Y件或者硬件机ӞNUMA架构可以使内存控制单元在各个内存控制器上交替的分配内存。这意味着分配得到的连l内存页面会水^地分布到各个节点上。当应用E序对内存进行流式读写时Q各个内存控制器的带宽就相当于篏加了。此机制获得性能提升军_?/span>NUMA架构的实现。对于远端内存访问gq严重的架构Q该提升往往会比较明显。在一?/span>NUMApȝ中,pȝg本n提供了节点交l分配机Ӟ而在没有g提供节点交织的系l中Q可由操作系l来实现该机制?/span>


下面是一?strong>NUMA{略控制工具

NUMACTL 是设定进E?/span>NUMA{略的命令行工具。对于那些无法修改和重新~译的程序,它可以进行非常有效的{略讑֮?/span>Numactl使管理员可以通过单的命o行调用来讑֮q程的策略, q可以集成到理脚本中?/span>

 Numactl的主要功能包括:

1. 讑֮q程的内存分配基本策?/span>

2. 限定内存分配范围Q如某一特定节点或部分节炚w?/span>

3. 对进E进行节Ҏ节点集合的绑?/span>

4. 修改命名׃n内存Q?/span>tmpfs?/span>hugetblfs{的内存{略

5. 获取当前{略信息及状?/span>

6. 获取NUMAg拓扑

 下面是?/span>numactl讑֮q程{略的实例:

 numactl --cpubind=0 --membind=0,1 program

 其意义ؓQ在节点0上的CPUq行名ؓprogram的程序,q且只在节点0Q?/span>1上分配内存?/span>Cpubind的参数是节点~号Q而不?/span>cpu~号。在每个节点上有多个CPU的系l上Q编L定义序可能会不同?/span>

 下面是?/span>numactl更改׃n内存D늚分配{略的实例:

 numactl --length=1G --file=/dev/shm/interleaved --interleave=all

 其意义ؓQ?/span> 对命名共享内?/span>interleavedq行讄Q其{略为全节点交织分配Q大ؓ1G?/span>

 NUMASTAT 是获?/span>NUMA内存讉Kl计信息的命令行工具。对于系l中的每个节点,内核l护了一些有?/span>NUMA分配状态的l计数据?/span>numastat命o会基于节点对内存的申P分配Q{U,p|{等做出l计Q也会报?/span>NUMA{略的执行状c这些信息对于测?/span>NUMA{略的有效性是非常有用的?/span>

下面介绍NUMA{略的实现方式和{略

 

在最新的通用操作pȝQ?/span> ?/span>Windows?/span>linux上, 都不同程度的提供了面?/span>NUMA架构的系l控制和API支持。下面以linuxZQ对该类接口q行说明?/span>

 

Linux下的NUMA API

 

版本?/span>2.5之后?/span>linux内核在进E调度,内存理{方面对NUMApȝ做了大量优化。同ӞZ2.6内核版本的各主要linux发行版,?/span>RedhatQ?/span>SUSE{均包括了面向用L间的numautils工具包,提供?/span>NUMApȝ内存{略的监控功能,q开N向用L间程序的API接口。该接口习惯上称?/span>NUMA API?/span>

 

NUMA API主要d是管?/span>NUMA的内存策略?/span>NUMA{略通过几个子系l的协同工作来实现。内核管理进E的内存分配机制以及Ҏ的内存映?/span>NUMA API通过新引入的3个内核系l调用来实现q一炏V在用户I间中,NUMA API通过libnuma库提供了l一的接口供用户I间E序使用。相对于pȝ调用Q?/span>libnuma接口更加清晰易用。同?/span>NUMA APIq提供了命o行工?/span>numactl?/span>numastat来帮助系l管理员实现q程U别的策略管理?/span>

 

?/span>Linux?/span>NUMA API支持四种内存分配{略Q?/span>

 

  1. ~省(default) - L在本地节点分配(分配在当前线E运行的节点上)
  2. l定(bind) - 分配到指定节点上
  3. 交织(interleave) - 在所有节Ҏ者指定的节点上交l分?/span>
  4. 优先(preferred) - 在指定节点上分配Q失败则在其他节点上分配

 

l定和优先的区别是,在指定节点上分配p|Ӟ如无_内存Q,l定{略会报告分配失败,而优先策略会试在其他节点上q行分配。强制用绑定有可能会导致前期的内存短缺Qƈ引v大量换页。在libnuma库中Q优先和l定是组合在一L。通过对线E调?/span>uma_set_strict函数Q可以在两种{略间切换。缺省的{略是更加普适的优先{略?/span>

 

{略可以Zq程或内存区域设定。进E策略对整个q程内的内存分配都有效,而内存区域策略作用于指定的内存区域,其优先比进E策略要高?/span>

 

q程{略 作用于所有由内核分配的内存页Q包?/span>malloc, pȝ调用中用的内核U的分配以及文g~冲区等。唯一的例外是Q中断中分配的内存L在当前节点中。当子进E?/span>ForkӞ会承父q程的进E策略?/span>

 

内存区域{略 又称?/span>VMA{略Q它允许一个进Eؓ自己地址I间里的一块内存设|策略?/span>内存区域{略比进E策略具有更高的优先U。它的主要优点在于能够在分配发生前进行设|。目前,内存区策略只支持一部分内存机制Q如Q?/span>SYSV׃n内存Q?/span>shmem?/span>tmpfs文g映射Q以?/span>hugetlbfs文gpȝ。在׃n内存D|文g映射被删除前Q共享内存的区域{略会一直有效?/span>

Linuxpȝ提供命o行及~程API两用户I间工具来对{略q行控制?/span>

libnuma -- NUMA{略的应用程序编E接?/span>

 

numactl能够用作q程U别的内存控Ӟ但其~点也很明显Q分配策略作用于整个q程Q无法指定到U程或者特定内存区域?/span>Libnuma为更加精l的控制提供?/span>API接口?/span>

 

应用E序只需在代码中引用numa.h头文?/span>, q在q接时如下连?/span>libnuma的共享库卛_方便使用libnumaQ?/span>

 

#include <numa.h>

….

cc ... -lnuma

 

在开始?/span>NUMA API更改{略或分配内存之?/span>Q?/span> 首先需要调?/span>numa_available()函数?/span> 之后, 则可以?/span>libnuma的接口对q程{略q行更改Q?/span>或分配内存?/span>Libnuma库的函数包括以下几组:

 

1.    环境信息 包括一l用于获取系l内存和CPU拓扑信息的函敎ͼ如系l节Ҏ目,特定节点的内存大等{?/span>

2.    q程{略 包括一l用于获取,讑֮和更改进E{略的函敎ͼ

3.    内存区域{略 包括一l用于设定特定内存区域策略的函数Q?/span>

4.    节点l定线E绑定到指定节点或节点组的函敎ͼ

5.    分配函数忽略当前q程{略Q直接用特定的{略q行分配的一l函敎ͼ

6.    其他辅助函数

 

通过使用q些接口Q程序员可以非常灉|的配|程序内存分配的方式和策略, 以达C化性能的目的。通常的基?/span>NUMA的内存分配流Eؓ:

1.    使用numa_available()判定pȝ是否支持NUMA

2.    使用q程{略函数定义q程的整体策?/span>

3.    使用节点l定函数合理l定U程

4.    使用普通的分配函数(?/span>malloc)q行普通分?/span>

5.    对于特定性能需求的代码, 使用NUMA分配函数做指定分?/span>

6.    对于内存区域Q用内存区域策略函数设定其分配{略

前面说了NUMA的Lȝ点,有朋友问了这么一个问题:要是我的E序是乱序的访问内存,也不太可能改了,那怎么办呢Q是不是注定被NUMA了?也不是?/p>

在英特尔下一代Xeon处理器^CQBIOS里有一?span lang=EN-US>NUMA 选项Q可以指定怎么映射内存。以两颗CPUZ。如果指定NUMA modeQ那么前一半内存空间被指定到直接连接CPU0Q?后一半内存空间被指定到直接连接CPU1Q换句话说就是我们说的NUMA方式Q如果指定Non NUMAQ那么就是奇数页面被指定到直接连接CPU0Q偶数页面被指定到直接连接CPU1Q也是面奇偶交错分布Q用户体验上p传统方式cMQ虽然没有了NUMA的好处,但也没被NUMA伤了?/p>

chatler 2009-02-02 22:18 发表评论
]]>
˾þô߽Ʒ| ƷþþþþþþѼ| þ޹ӰԺվ | þþƷѲ| þþ޾Ʒ| 77777ҹþö| 鶹ƷþþƷɫۺ| þþƷӰѿ | ˾þô߽| þAv뾫Ʒϵ| Ʒ˾þþþҹӰ | þۺϾɫۺվ| þúݺɫݺɫۺ| ŷþ18| Ѿþþþþ| þˬˬAV | ˳վ999þþۺ| ƷþĻ| þúݺݰۺӰԺ| AVӰƬþþþþ| þAv뾫Ʒϵ| þֻоƷ߹ۿ| wwþþþþþþþ| þù޸ۿ| AëƬþþþƷëƬ| þ| þþþһëþþ| 99þֻоƷ| þ99ƷСѼ | Ʒһþ | 91þþƷ91þɫ| Ļþҹ| ģ˽ĹƷþ| ŷձþùʵҶ԰| ɫۺϾþ| Ʒ˾Ʒþþ| ӰһѾþþþþþþ | þ99ȹоƷ| þ޹ҹƷƬ| ݺɫþþۺ| ɫۺϾþ|