InterSystems 数据平台和性能 – 第 3 篇:聚焦 CPU
本周,我将关注 CPU - 主要硬件食物群之一 :) 一位客户请我就以下情况提供建议:他们的生产服务器已接近使用寿命终止,是时候更新硬件了。 他们还考虑通过虚拟化来整合服务器,并希望适当调整裸机或虚拟机的容量规模。 今天我们将关注 CPU,在后面的帖子中,我将介绍适当调整其他主要食物群(内存和 IO)规模的方法。
所以问题是:
- 如何将五年多以前对处理器的应用要求转换成针对当今的处理器?
- 目前的处理器有哪些是合适的?
- 虚拟化如何影响 CPU 容量计划?
2017 年 6 月添加: 要深入了解 VMware CPU 注意事项和规划的细节,以及一些常见问题,另请查看以下帖子:虚拟化大型数据库 - VMware cpu 容量计划
使用 spec.org 基准比较 CPU 性能
要针对使用 InterSystems 数据平台(Caché、Ensemble、HealthShare)构建的应用程序在不同的处理器类型之间转换 CPU 使用率,可以使用 SPECint 基准作为可靠标准,来粗略计算处理器之间的伸缩性。 http://www.spec.org 网站提供了一套标准化基准测试的可信结果,这些测试由硬件供应商运行。
具体来说,SPECint 是一种在同一供应商的不同处理器型号之间以及在不同供应商(例如戴尔、惠普、联想以及英特尔、AMD、IBM POWER 和 SPARC)之间比较处理器的方法。 当需要升级硬件时,或者要将您的应用部署在一系列不同的客户硬件上,而您需要为规模调整指标设置基准(例如英特尔至强 E5-2680 或所选任何处理器的每个 CPU 核心的峰值事务数)时,可以使用 SPECint 来了解您的应用的预期 CPU 要求。
SPECint 网站上使用了多个基准,不过 SPECint_rate_base2006 结果最适合 Caché,而且根据多年的客户数据研究和我们自己的基准测试,这一点已得到确认。
在本帖的示例中,我们将比较客户的戴尔 PowerEdge 服务器(运行英特尔至强 5570 处理器)与当前的戴尔服务器(运行英特尔至强 E5-2680 V3 处理器)之间的差异。 当英特尔至强 V4 服务器处理器普遍可用(本帖写于 2016 年初,预计很快就会上市)时,可以应用同样的方法。
示例:比较处理器
在 spec.org 的 SPECint2006_Rates 数据库中搜索处理器名称,例如 E5-2680 V3,如果目标服务器品牌和型号已知(例如戴尔 R730),可以进一步优化搜索结果,否则请使用流行的供应商。我发现戴尔或惠普的型号是很好的标准服务器基准,不同供应商硬件上的处理器之间通常不会有太大差异。
在本帖的最后,我逐步演示了一个使用 spec.org 网站搜索结果的示例。
假设您已搜索 spec.org,并找到现有服务器和一个可能的新服务器,如下所示:
现有:戴尔 PowerEdge R710,搭载至强 5570 2.93 GHz:8 个核心,双芯片,4 个核心/芯片,2 个线程/核心: SPECint_rate_base2006 = 251
新服务器:PowerEdge R730,搭载英特尔至强 E5-2680 v3,2.50 GHz:24 个核心,双芯片,12 个核心/芯片,2 个线程/核心: SPECint_rate_base2006 = 1030
不出所料,新 24 核服务器的 SPECint_rate_base2006 基准吞吐量是旧 8 核服务器的 4 倍以上,即使新服务器的时钟速度较低。 请注意,示例中的两台双处理器服务器均已插满处理器插槽。
为什么对 Caché 使用 SPECint_rate_base2006?
spec.org 网站上有各种基准的解释,但总结起来就是 SPECint_rate2006 基准是一个完整的系统级基准,通过超线程使用所有 CPU。
对于具体的 SPECint_rate2006 基准,会报告两个指标:base 和 peak。 base 是保守的基准,peak 则更为激进。 要进行容量计划,请使用 SPECint_rate_base2006 结果。
四倍的 SPECint_rate_base2006 是否意味着四倍的用户或事务容量?
如果全部 24 个核心均被使用,应用吞吐量可能会扩展为旧服务器容量的四倍。 不过,有几个因素可能会导致不同情况。 SPECint 将提供大致可能的规模和吞吐量结果,但有几点注意事项。
在上面的示例中,虽然 SPECint 给出了两台服务器之间的明确比较,但并不保证 E5-2680 V3 服务器的峰值并发用户容量或峰值事务吞吐量比基于至强 5570 的旧服务器多 75%。 其他因素也会起作用,例如食物群中的其他硬件组件是否已升级,新存储或现有存储是否能满足吞吐量的增长(我很快会写一篇深入探讨存储的帖子)。
根据我对 Caché 进行基准测试的经验和对客户性能数据的研究,随着计算资源(CPU 核心)的增加,在单台服务器上,Caché 能够线性扩展到极高的吞吐率,而且 Caché 每年都在改进,性能会进一步提高。 换句话说, 随着 CPU 核心的增加,最大应用吞吐量(例如,应用事务数或 Caché gloref 中反映的值)会线性扩展。 但是,如果存在应用瓶颈,它们可能在较高的事务处理速率下出现,并影响线性扩展。 在以后的帖子中,我将介绍在哪里查找应用瓶颈的症状。 要提高应用性能,最好的方法之一是将 Caché 升级到最新版本。
注:Caché 不支持具有超过 64 个逻辑核心的 Windows 2008 服务器。 例如,40 核服务器必须禁用超线程功能。 对于 Windows 2012,支持多达 640 个逻辑处理器。 Linux 上没有任何限制。
应用需要多少个核心?
应用各不相同,并且您知道自己的应用情况,但在为服务器(或虚拟机)规划 CPU 容量时,我常用的方法是通过连续的系统监视来了解某个“标准”处理器的特定数量的 CPU 核心可以维持的峰值事务速率:每分钟 n 个事务。 这些事务可能是情节、遭遇、实验室测试或您的世界中任何有意义的事情。 重点是,标准处理器的吞吐量基于您在当前系统或客户系统上收集的指标。
如果您知道已知的具有 n 个核心的处理器当前的峰值 CPU 资源使用情况,您可以使用 SPECint 结果将其转换为较新或不同的处理器实现相同事务处理速率所需的核心数量。 如果预期的线性扩展结果是每分钟 2 x n 个事务数,则大致相当于需要 2 倍的核心数量。
选择处理器
正如您从 spec.org 网站或从首选供应商产品中所见,有许多处理器选择。 本示例中的客户对英特尔很满意,因此如果我坚持推荐当前的英特尔服务器,那么一种方法是力求“物有所值”- 或者每美元和每核心的 SPECint_rate_base2006 分数。 例如,下图绘制了戴尔商用服务器的性能价格图表,您的价格表可能有所不同,但这说明在价格和适合使用虚拟化整合服务器的高核心数中存在着甜蜜点。 我是通过先确定生产服务器(例如戴尔 R730)的价格,然后查看不同的处理器选项来制作这份图表的。
根据图表中的数据和客户站点的经验,E5-2680 V3 处理器显示出良好的性能以及按 SPECint 或按核心计算的出色价格点。
其他因素也在起作用,例如,如果您正在寻找用于虚拟化部署的服务器处理器,以更高的成本增加每个处理器的核心数可能反而更实惠,因为这样做的效果是减少了支持所有虚拟机所需的主机服务器总数,从而节省了按处理器插槽进行授权的软件(例如 VMware 或操作系统)成本。 您还必须根据高可用性 (HA) 要求来平衡主机数量。 我将在以后的帖子中重新讨论 VMware 和 HA。
例如,由三台 24 核主机服务器组成的 VMware HA 集群可提供良好的可用性和强大的处理能力(核心数),允许运行各种灵活配置的生产和非生产虚拟机。 请记住,VMware HA 的规模是 N+1 台服务器,因此三台 24 核服务器相当于总共 48 个核心可用于虚拟机。
核心数与 GHz - 哪个更适合 Caché?
如果在更快的 CPU 核心与更多的 CPU 核心之间进行选择,您应该考虑以下几点:
- 如果您的应用需要许多 cache.exe 线程/进程,那么更多核心将允许更多线程/进程同时运行。
- 如果您的应用进程较少,您希望每个进程都尽可能快地运行。
另一种考虑方式是,如果您的客户端/服务器应用有许多进程,假设每个并发用户一个(或多个),那么您需要更多可用核心。 对于使用 CSP 的基于浏览器的应用程序,用户被绑定到数量较少但非常繁忙的 CSP 服务器进程,那么您的应用程序将受益于数量可能较少但速度更快的核心。
在理想情况下,假设当多个 cache.exe 进程在所有核心中同时运行时没有资源争用,则两种应用程序类型都将受益于多个快速核心。 上文已叙述,但值得重申的是,每个 Caché 版本在 CPU 资源使用方面都有改进,因此将应用程序升级到最新版的 Caché 确实可以从更多的可用核心中受益。
另一个关键考虑事项是在使用虚拟化时最大程度地增加每个主机的核心数。 单个虚拟机的核心数量可能不高,但综合来看,您必须在可用性所需的主机数量与最大程度地减少主机数量(为了管理和成本考虑,通过增加核心数量来实现)之间取得平衡。
VMware 虚拟化和 CPU
在配合使用当前服务器和存储组件的情况下,VMware 虚拟化很适合 Caché。 通过遵循与物理容量计划相同的规则,在正确配置的存储、网络和服务器上使用 VMware 虚拟化不会有明显的性能影响。 较新型号的英特尔至强处理器对虚拟化的支持更好,具体来说,您只应考虑在英特尔至强 5500 (Nehalem) 及更高版本(即英特尔至强 5500、5600、7500、E7 系列和 E5 系列)上进行虚拟化。
示例:硬件更新 - 计算最低 CPU 要求
如果我们考虑这样一个示例:对在具有 8 个核心(两个 4 核至强 5570 处理器)的戴尔 PowerEdge R710 上运行的工作负载进行服务器升级,那么将上述提示和程序结合在一起。
通过绘制客户的主生产服务器的当前 CPU 利用率,我们看到,服务器在当天最繁忙时段的峰值不到 80%。 运行队列没有压力。 IO 和应用也表现良好,因此不存在人为抑制 CPU 的瓶颈。
经验法则:首先在考虑到预期增长(例如用户数/事务数增长)的前提下调整系统规模,使得在硬件寿命结束时的最大 CPU 利用率为 80%。 这样可以容许出乎预期的增长、异常事件或意外的活动激增。
为了使计算更清楚,我们假设在新硬件的生命周期内,预计吞吐量不会有任何增长:
每核心的扩展可以计算为:(251/8) : (1030/24),或者每核心吞吐量增长 26%。
8 核心旧服务器上的 80% CPU 大致相当于新的 6 核心 E5-2680 V3 处理器上的 80% CPU。 因此,6 个核心即可支持相同数量的事务。
客户有几个选择,他们可以购买新的裸机服务器以满足 6 核 E5-2680 V3 或相同 CPU 核心数的最低 CPU 要求,或者继续推进在 VMware 上虚拟化生产工作负载的计划。
虚拟化对于利用服务器整合、灵活性和高可用性更有意义。 由于我们已经得出 CPU 要求,客户可以放心地继续在 VMware 上适当调整生产虚拟机的规模。 另外,目前低核心数的服务器很难采购到或者价格昂贵,这使得虚拟化更具吸引力。
如果预期有显著增长,虚拟化也是一个优势。 可以根据前几年的增长来计算 CPU 要求。 在持续监视的前提下,一个有效策略是只在出现资源需求之前才添加额外资源。
CPU 和虚拟化注意事项
正如我们所看到的,Caché 生产系统的规模根据实际客户站点的基准测试和测量结果来确定。 通过裸机监视来确定 VMware 虚拟 CPU (vCPU) 的规模需求也是有效的。 与裸机相比,使用共享存储的虚拟化所增加的 CPU 开销非常小**。 对于生产系统,使用的策略是将系统初始规模调整为与裸机 CPU 核心数相同。
**注:对于 VMware VSAN 部署,必须添加 10% 的主机级 CPU 缓冲区才能进行 VSAN 处理。
虚拟 CPU 分配应考虑以下关键规则:
建议:分配的 vCPU 数量不要超过满足性能需求的安全数量。
- 虽然可以为虚拟机分配大量 vCPU,但最佳做法是不要分配超过所需数量的 vCPU,因为管理未使用的 vCPU 会有性能开销(通常很小)。 这里的关键是定期监视系统,以确保虚拟机的规模合适。
建议:生产系统,特别是数据库服务器,按 1 个物理 CPU = 1 个虚拟 CPU 进行初始规模设置。
- 生产服务器,特别是数据库服务器预计将被高度利用。 如果需要六个物理核心,则设置六个虚拟核心的规模。 另请参见下文关于超线程的说明。
超额预定
通过超额预订方法,可以将比物理主机上可用资源更多的资源分配给该主机支持的虚拟服务器。 通常,可以通过超额预定虚拟机中的处理、内存和存储资源来整合服务器。
运行生产 Caché 数据库时,仍然可以对主机进行超额预定,但是对于生产系统的初始规模设置,假定 vCPU 能够完全发挥核心能力。 例如,如果您有一台 24 核(2 个 12 核)E5-2680 V3 服务器 – 总共多达 24 个 vCPU 的容量规模,且可能还有余量可供整合。 此配置假定在主机级别启用了超线程。 在您花时间监测应用程序、操作系统和 VMware 在峰值处理期间的性能后,您可以决定是否进行更高度的整合。
如果混合非生产虚拟机,要计算 CPU 核心总数,我经常使用的系统规模调整经验法则是最初将非生产虚拟机的物理 CPU 与虚拟 CPU 的比例调整为 2:1。 但是,这并不是绝对的,具体情况可能各不相同,需要监视来帮助您进行容量计划。 如果您有疑问或没有经验,可以在主机级别或使用 vSphere 配置将生产虚拟机与非生产虚拟机分开,直到了解工作负载为止。
VMware vRealize Operations 和其他第三方工具能够随时间监视系统,并可提供整合建议或发出虚拟机需要更多资源的提醒。 在将来的帖子中,我将讨论更多可用于监视的工具。
最重要的是,在我们的客户示例中,他们可以确信他们的 6 vCPU 生产虚拟机会很好地工作,当然前提是其他主要食物群组件(如 IO 和存储)有足够容量 ;)
超线程和容量计划
根据物理服务器的已知规则调整虚拟机规模的一个良好起点是,针对启用了超线程功能的目标处理器计算物理服务器 CPU 要求,然后简单地进行转换:
一个物理 CPU(包括超线程)= 一个 vCPU(包括超线程)。
一个常见的误解是,超线程以某种方式使 vCPU 容量增加了一倍。 这对于物理服务器或逻辑 vCPU 来说并不正确。 根据经验,开启超线程的裸机服务器可能比未开启超线程的相同服务器多提供 30% 的性能。 同样的 30% 规则也适用于虚拟化的服务器。
授权和 vCPU
在 vSphere 中,您可以将虚拟机配置为具有一定数量的插槽或核心。 例如,如果您有一个双处理器虚拟机,可以将其配置为具有两个 CPU 插槽,或者具有单个插槽,但支持两个 CPU 核心。 从执行的角度看,并没有多大区别,因为虚拟机监控程序将最终决定虚拟机是在一个还是两个物理插槽上执行。 但是,指定双 CPU 虚拟机实际有两个核心而不是两个插槽,会对非 Caché 软件许可证产生影响。
总结
在本帖中,我概述了如何使用 SPECint 基准结果比较不同供应商、服务器或型号的处理器。 以及如何根据性能和体系结构进行容量计划和选择处理器,而不管是否使用虚拟化。
这些都是很深的主题,很容易陷入牛角尖... 不过,与其他帖子一样,如果您想要转移到其他方向,请评论或提问。
—
示例:搜索 SPECint_rate2006 结果。
下图显示了如何选择 SPECint_rate2006 结果。
使用搜索屏幕缩小结果范围。
请注意,您还可以将所有记录转储为一个大约 20MB 的 .csv 文件,以进行本地处理,例如使用 Excel 处理。
搜索的结果显示戴尔 R730。
选择 HTML 以提供完整的基准结果。
在我们的示例中,您可以看到以下服务器及处理器结果。
戴尔 PowerEdge R710,2.93 GHz:8 个核心,双芯片,4 个核心/芯片,2 个线程/核心 至强 5570:SPECint_rate_base2006 = 251
PowerEdge R730(英特尔至强 E5-2680 v3,2.50 GHz),24 个核心,双芯片,12 个核心/芯片,2 个线程/核心 至强 E5-2680 v3:SPECint_rate_base2006 = 1030