虚拟化对服务器内存的需求更多,尤其是增加了内存分配策略的要求。分配的内存少于工作负载所需会严重影响其性能,迫使虚拟机依赖于磁盘上的交换区空间来满足内存短缺时的需求。相反的,分配过多内存则导致资源浪费和影响整合能力。 现在的服务器设计也对处理器和非统一内存架构之间的交互带来了新的内存分配方法的挑战。
本文的FAQ解释了NUMA的概念并说明了这项特殊内存分配技术的潜在用法。 什么是NUMA?它是如何影响我们服务器上的内存和虚拟机性能的? 非统一内存访问(NUMA)是服务器CPU和内存设计的新架构。传统的服务器架构下把内存放到单一的存储池中,这对于单处理器或单核心的系统工作良好。但是这种传统的统一访问……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
虚拟化对服务器内存的需求更多,尤其是增加了内存分配策略的要求。分配的内存少于工作负载所需会严重影响其性能,迫使虚拟机依赖于磁盘上的交换区空间来满足内存短缺时的需求。相反的,分配过多内存则导致资源浪费和影响整合能力。
现在的服务器设计也对处理器和非统一内存架构之间的交互带来了新的内存分配方法的挑战。本文的FAQ解释了NUMA的概念并说明了这项特殊内存分配技术的潜在用法。
什么是NUMA?它是如何影响我们服务器上的内存和虚拟机性能的?
非统一内存访问(NUMA)是服务器CPU和内存设计的新架构。传统的服务器架构下把内存放到单一的存储池中,这对于单处理器或单核心的系统工作良好。但是这种传统的统一访问方式,在多核心同时访问内存空间时会导致资源争用和性能问题。毕竟,CPU应该可以访问所有的服务器内存,但是不需要总是保持占用。实际上,CPU仅需要访问工作负载实际运行时所需的内存空间就可以了。
因此NUMA改变了内存对CPU的呈现方式。这是通过对服务器每个CPU的内存进行分区来实现的。每个分区(或内存块)称为NUMA节点,而和该分区相关的处理器可以更快地访问NUMA内存,而且不需要和其它的NUMA节点争用服务器上的资源(其它的内存分区分配给其它处理器)。
NUMA的概念跟缓存相关。处理器的速度要比内存快得多,因此数据总是被移动到更快的本地缓存,这里处理器访问的速度要比通用内存快得多。NUMA本质上为每个处理器配置了独有的整体系统缓存,减少了多处理器试图访问统一内存空间时的争用和延迟。
NUMA与服务器虚拟化完全兼容,而且NUMA也可以支持任意一个处理器访问服务器上的任何一块内存区域。某个处理器当然可以访问位于不同区域上的内存数据,但是需要更多本地NUMA节点之外的传输,并且需要目标NUMA节点的确认。这增加了整体开销,影响了CPU和内存子系统的性能。
NUMA如何跟传统数据中心架构融合?
NUMA是一个硬件级别的架构需要来自处理器和底层服务器芯片的支持。例如,Intel在2007年随着Nehalem 和 Tukwila系列CPU引入NUMA,2个平台共享芯片组。为了支持NUMA节点,传统的前端总线FSB连接处理器和内存的方式被新的点对点处理器互联模式取代,称为QPI(QuickPath Interconnect )。AMD Opteron提供了类似的互联架构名为HyperTransport。
这样的话,使用传统FSB的服务器不能支持NUMA,但是现在几乎所有的X86和安腾服务器都支持NUMA节点。这取决于选择的硬件设备和固件。如果您无法确认,检查服务器的内存规格确认是否支持NUMA。
NUMA对虚拟机负载不存在任何兼容性问题,但是理论上虚拟机最完美的方式应该是在某个NUMA节点内。这可以防止处理器需要跟其它的NUMA节点交互,从而导致工作负载性能下降。
无论如何,NUMA的优点需要操作系统和hypervisor支持内存互连,这样OS不会在CPU和NUMA节点之间迁移工作负载。例如Windows Server 2008和2008 R2的Hyper-V不能支持NUMA节点的内存互连,就无法保证把虚拟机安装到某个NUMA节点内。幸运的是,Windows Server 2012对NUMA节点内存互联的支持改善了很多。
应用NUMA技术面临的挑战有哪些?
NUMA对于提升系统性能是个非常不错的方式,尤其是SMP( symmetric multi-processing多线程)类任务。但是由于NUMA可能会引起性能问题,管理员需要深刻理解每个工作负载的内存需求,包括要精通内存分配技术,这样才可以确保工作负载位于NUMA节点的边界内。
NUMA和虚拟机之间的问题在于如果虚拟机使用的内存多于单个NUMA节点的最大值。将会扩展到其它的NUMA节点。这不会影响虚拟机的稳定性和功能,但是增加了处理器跨NUMA节点沟通的系统开销,从而影响了负载的性能。因此问题在于:是否虚拟机很大需要占用不止一个NUMA节点?
例如,假设您的服务器有两个10核处理器,总计20个核心。如果服务器安装有256G的内存,每个NUMA节点应该是12.8GB。因此只要虚拟机所需分配内存小于12.8GB,就存在运行于单一NUMA节点上的可能(这不是一定的,尤其是处理器已经在NUMA节点内部运行了其它的虚拟机。)
减少虚拟机的内存分配使其低于NUMA节点的大小可能会增加虚拟机运行在一个NUMA节点内的概率。例如,如果服务器为每个NUMA节点提供8GB的空间,而已经有一些虚拟机占用了NUMA节点上4GB的空间,那么部署另外一台需要4GB或更多内存空间的虚拟机将一定会导致跨NUMA节点。相应的,如果把虚拟机内存大小设置为4GB(如果可以)以下,将会增加虚拟机依然在同一个NUMA节点内的概率。另外牢记一点,这在hypervisor进行负载均衡处理的时候会发生把虚拟机迁移到跨处理器和内存空间的环境中。
基准测试工具可以协助管理员识别和解决虚拟机性能问题。例如,假设虚拟机需要更多内存,在分配额外内存之前对虚拟机性能进行基准测试,之后再运行一次作对比。如果虚拟机性能下降,或许表明要检查NUMA节点导致的性能问题。
相关推荐
-
esxi的numa有谁在玩?
谁玩esxi的numa?分享下经验呗