AMD 真能翻身压倒英特尔吗?从应用优劣来探讨可能性-阿里云服务器优惠网!
阿里云最新优惠活动

AMD 真能翻身压倒英特尔吗?从应用优劣来探讨可能性

阿里云服务器优惠

现在我们把焦点转向 Zen 2。有鉴于坊间已经充斥太多对 Zen 2 的「深度分析」(尤其是微架构核心层面的介绍),笔者打算用偏向应用面的角度,介绍 AMD 真正的优势和看不到的劣势。

当 AMD 可用更小晶片对抗英特尔产品

2019 年 12 月 9 日「美国批踢踢」Reddit 有一则讨论引起热议:台积电替 AMD 代工生产的 7 奈米製程 8 核心 CCD,单一晶粒面积只有 74 平方公釐,以完整 8 核心都可正常运作的标準来算,良率高达 93.5%,一片 12 吋晶圆可取得 749 个 8 核心晶片,足以用来生产 374 颗 16 核心的 Ryzen 9、187 颗 32 核心的 EPYC、或着 93 颗 64 核心 EPYC,但英特尔(Intel)的 14 奈米製程 28 核心 Xeon,在相同的晶圆缺陷率,只有 46% 无缺陷晶粒,一片 12 吋晶圆只能产出 24 颗,更惨的是,英特尔即使有 2 颗 28 核心,核心数还抵不过 AMD 一颗 64 核心。

我们并不知道台积电卖给 AMD 的 7 奈米製程晶圆一片多少钱,但先进製程的成本节节高升这档事,倒是没有什幺怀疑的空间,缩减单一晶片面积这件事,完全势在必行。这也让人不得不好奇,预定 2020 下半年採用「电晶体密度增加 20%,功耗减少 10%」EUV 光刻技术 7 奈米+ 製程的 Zen 3,晶粒面积是否还有继续缩小的可能,或核心微架构能否显着扩张。

总之,先不提笔电和低阶桌机,光比一比伺服器和中高阶桌机的产品,就算对处理器市场再怎幺外行,光看规格和价格就可轻易看出 AMD 现在的优势有多大。

 

Zen 2 的实际优势并不只有台积电的 7 奈米製程

从 2019 年 7 月至今半年多来,大概是因为有棒打英特尔这只落水狗的天赐良机,在网路可看到的乡民评论,多半都聚焦在以下几点:

  • 台积电先进製程天下无敌。
  • AMD Chiplet 策略高瞻远瞩。
  • AMD 的製造成本辗压英特尔。
  • 万恶的英特尔快要挤不出牙膏了。

这里替各位複习一下,依据 AMD 的 Chiplet 策略,现有晶片只有 4 种,而 EPYC、Threadripper 和未整合绘图核心的 Ryzen,由前三种「包水饺」包出来,第四种则是专用单晶片 APU,专攻低价电脑与笔电市场(只是原生 8 核心看来也不像规格多低阶的产品就是了)。

先不管英特尔和台积电,AMD 这次 Chiplet 策略其实有很多层面的考量,并不是只有降低成本,可归类如下:

  • 减少风险:I/O 与记忆体控制器的 IP 区块,难以快速导入最先进製程。
  • 提升弹性:同样的 7 奈米製程 CCD 和 12 奈米製程 IOD 可同时用在不同的产品线。
  • 增加产能:用更少的晶圆数提供更多可出货产品,特别当台积电产能被苹果为首的大客户抢破头时。
  • 改善效能:将记忆体控制器独立于 CPU 核心之外,可精简 NUMA (Non-uniform memory access)Domain,利于软体最佳化,这绝对值得花时间解释。

记忆体控制器和 CPU 脱钩是简化系统最佳化手段

CPU 整合记忆体控制器对 AMD 并不陌生,早在 2001 年 10 月的微处理器论坛,AMD 就宣布 K8 将整合双通道 DDR 记忆体控制器,也暗示原生双核心设计,基于 HyperTransport 的 NUMA 也让 AMD 独领风骚好几年,直到英特尔的 Nehalem 具备以 QPI 为基础的 NUMA 为止。

CPU 整合记忆体控制器这件事,其实有利有弊,好处是「靠得越近,速度越快」,坏处则是在多晶片、多处理器环境,会让主记忆体分散在四处,作业系统需特别花工夫最佳化排程,尽量让 CPU 核心存取本地端记忆体,避免不必要的远端存取,这也是 ACPI 规範会有储存多处理器拓朴资讯的 SRAT (Static Resource Affinity Table) 和记录 NUMA 节点之间延迟差异的 SLIT ( System Locality Information Table),用来协助作业系统或虚拟机管理者(Hypervisor)「看清全局」,达到最佳行程管理与记忆体配置。但 AMD 的多晶片封装,却也让这件苦差事更複杂。

AMD 在 Zen 2 世代将记忆体控制器与 CPU 脱钩,转移至 CCD 共用的 I/O Die,除了分而治之,沿用 12 奈米製程 Zen+ 的现成 IP 区块,缩短研发时程,降低产品开发的风险,将记忆体控制器集中为一(原本 4 个双通道变成一个 8 通道),让 NUMA 看起来更像早期所有 CPU 共用同一块主记忆体的 SMP,双处理器环境的实体 NUMA Domain 从 8 个变成 2 个,而处理器核心要存取记忆体控制器的可能距离也从 3 种(同一颗 EPYC 的其他 CCD、另一颗 EPYC 的第一颗 CCD、另一颗 EPYC 的第二颗 CCD)精简成两种(同一颗 EPYC 内的 IOD,另一颗 EPYC 的 IOD)。

用这张同时比较现行英特尔 Xeon、第一代 EPYC 和第二代 EPYC,差异性就更清楚了,也不难理解为何作业系统和虚拟机管理者(Hypervisor)不需要太多最佳化手段,就可在英特尔 CPU 有效率执行,特别当 AMD 的架构会让最低层的快取记忆体(Last-Level Cache,LLC)散布四处,也增加快取资料一致性(Cache Coherence)的负担,降低整体系统效能。这是 AMD 看似风光的核心数量与製程优势以外,檯面上看不出的弱点。

这也是为何 AMD 将在 7 奈米+ 製程 Zen 3,将 CCD内原本两组 4 核心 CCX 独享的 L3 快取,融合为 8 核心共用的主因(看起来很有可能改为一颗 CCD 就一颗 8 核心 CCX),进一步减少软体最佳化的複杂度。不过「江湖盛传」AMD 将在 Zen 3 导入 HBM 当作「L4 快取」,会造成哪些奇怪的影响,就只能到时候再仔细研究了。

多晶片结构带来更複杂的系统调校工作

但这是否代表 AMD 减少 NUMA Domain 就从此高枕无忧?事情没这幺简单,天底下并非所有应用程式都是「NUMA-friendly」,可高度平行化分散在所有运算节点与专用的快取记忆体,如果所有应用程式都一次存取多达 8 通道的 DDR4 主记忆体,固然带来最高的理论频宽,却也会造成更长的存取延迟,做好「频宽 vs. 延迟」的平衡势在必行。

也因此,AMD 从第一代 EPYC 开始,在系统 BIOS 提供两个名称让人摸不着头绪的可调整参数:

  • NUMA Nodes per Socket(NPS):名为每个处理器插座的 NUMA 节点(Node),但实际作用是「分而治之」、定义处理器核心群存取记忆体通道的方式。
  • NPS0:当安装两颗 EPYC 时,所有处理器核心如同只有一个 NUMA Domain 的交错存取所有总计 16 通道的主记忆体,这很明显没有效率(强迫存取另一颗 EPYC 的记忆体),所以连 AMD 官方都不建议这样做。
  • NPS1:EPYC 所有处理器核心像同处同一个 NUMA Domain 同时交错存取 8 通道主记忆体(ABCDEFGH),最一般的「泛用」组态,整体理论频宽最高,存取延迟最长。
  • NPS2:记忆体通道拆成 4 条一组(ABCD EFGH),形同两个 NUMA Domain(一半的核心)交错存取这两组。
  • NPS4:记忆体空到拆成 2 条一组(AB DC EF GH),有如 4 个 NUMA Domain(四分之一的核心)交错存取这 4 组,整体理论频宽最低,存取延迟最短。

  • ACPI SRAT L3 Cache as NUMA Domain:这命名非常容易让人一头雾水,那 L3 Cache 实际上应该正名为 CCX。讲白话一点,这功能是将 CCX 加入 NUMA Domain,透过 ACPI SRAT 让作业系统或虚拟机管理者意识到其存在,让每个 CCX「专心」存取自己的 L3 快取。以第二代 EPYC 为例,8 颗 CCD 有 16 个 CCX,启动此功能后,就等于告诉作业系统「我有 16 个 CCX,每个都有自己的 L3 快取,请给我好好排程,尽量让 CCX 自己吃自己的 L3」。

各位还看不懂的话,就请参考 AMD 如何跟微软合作,让 Windows 10 可将彼此有关连的执行绪,尽其所能塞到同一个 CCX,避免分散到其他地方延长记忆体存取延迟。

相信各位已经头上浮现满满问号,我们就来看看 VMware 和 Dell 是怎幺建议的。

  • 假若 EPYC 只有跑少少的虚拟机、部署少少的虚拟 CPU,每个虚拟机和虚拟 CPU 都可以独自享受丰沛的硬体资源,那 VMware 建议设定就是:
    NPS (NUMA per Socket) = 4
    启动 L3 Cache as NUMA
    讲白一点就是就地分赃,「让虚拟机绑架专属的资源」。
  • EPYC 已跑了满满的虚拟机或部署满满的虚拟 CPU,任何系统资源都不容许一丝一毫浪费,那就会变成:
    NPS (NUMA per Socket) = 1
    关闭 L3 Cache as NUMA
    换言之就是「独乐乐不如众乐乐」,大家一起吃大锅饭。
  • 关于高度平行化的高效能运算或其他已针对 NUMA 最佳化的应用程式,Dell 建议 NPS 设成 4(应该也要开启 L3 Cache as NUMA),可让这类应用「同时享受到最高的频宽与最低的延迟」。

想必各位都觉得很麻烦对不对?像微软和 VMware 自己写的文件,也是得从 EPYC 是多晶片封包、一个 CCD 包两个 CCX、所有 CCD 连接 IOD、记忆体和 I/O 介面的配置、NUMA是什幺等开始从头教起,否则读者恐怕根本看不懂这些「有字天书」上面印的是哪来的圣经密码。

AMD 也针对不同应用环境,从泛用型、虚拟化、资料库、高效能运算等,提供性能调校手册,所以说天底下没有白吃的午餐,AMD 的 CPU 便宜归便宜,要享受好处之前,该做的功课还是要做,老师教的当然要听。

核心数量太多也会製造麻烦

很久以前 IBM 公开展示 8 颗英特尔 Nehalem-EX、总计 64 核心 128 执行绪的伺服器,其 Windows 工作管理员显示 CPU 的壮观画面,轰动一时,然而现在只要一颗 AMD EPYC 就功德圆满了,而且你还可以加倍。但「CPU 核心执行绪超多」这档事不是没有后遗症,实际应用层面会带来很多鲜为人知的麻烦,而微软这次就很倒楣成为苦主了。

一台 2 颗 EPYC 7742 或 7702 的伺服器,就有总计 128 个处理器核心和 256 条多执行绪,但是 Windows Server 2016 和 2012 R2,因为不支援第二代先进可程式化中断控制器(x2APIC),理论上就无法吃下超过 255 个逻辑处理器,根据微软的 EPYC 性能调校文件,旧版 Windows Server 实际上只能对应 2 颗 48 核心的 EPYC 和 192 个逻辑处理器。

而微软网站描述的 64 核心 EPYC 支援性也让人感到疑惑:Windows Server 2016 和 2012 R2 都需要关闭 SMT,但 48 核心/96 执行绪就没有问题,暗示无法支援到 128 执行绪,然后一提到 NUMA,微软很隐晦的表示「Windows 现阶段最多只能在一个 NUMA 节点支援 64 个硬体执行绪,只要 NSP 开到 0 或 1 就破表了」,这真的要实际测试过的人,才能摸清楚真相到底是怎幺一回事,但微软最想看到的,还是莫过于大家尽快升级到 Windows Server 2019。

唯一可以确定的是,要安装 2019 年 9 月前的 Windows Server 2019 版,必须先在 BIOS 关闭 SMT 和 x2APIC,灌完作业系统后跑 Windows Update 装完所有的累积性更新,再重新开机进 BIOS 打开 SMT 和 x2APIC。

核心数量太多的软体相容性问题并不只发生在微软,像常见的伺服器作业系统和虚拟机管理员,如 Red Hat Enterprise Linux、Ubuntu Linux、VMware 等,也都需要升级到最新版或安装某些更新才能确保相容性无虞。

很多业界人士老是喜欢把「生态系统」(Ecosystem)挂在嘴上,当因「英特尔缺货,所以建议客户改用 AMD」或「因为我们做英特尔平台打不赢其他厂商,所以另闢他径改押宝 AMD」,有没有意识到这些实际应用的边边角角,还是只有满脑子硬体规格好棒棒,就是呈现一家伺服器厂商专业程度的关键时刻。

从英特尔无缝接轨到 AMD 并非易事

只是购买新的 AMD 伺服器重新建置服务还不打紧,最麻烦的还是「要如何将部署在英特尔伺服器的软体及服务转移到 AMD 平台」,还有「不停机动态迁移」这天大的挑战。

这里就不得不谈谈「x86 指令集长期缺乏业界标準」这件遗祸至今的陈年往事了。以虚拟化为例,自从英特尔的 VT-x (Vanderpool) 和 AMD 的 AMD-V (Pacifica)开始,双方根本就是各搞各的,结果就是只要处理器厂商持续扩张指令集(像快要没人搞懂到底有多少版本的 AVX-512),连「同一间处理器厂商的不同世代 CPU 之间要搬来搬去都很麻烦」。

英特尔按着 AMD 头在地上摩擦的 Haswell 与 Broadwell 微架构世代,在虚拟化技术更走火入魔,进一步追求控制不同虚拟机器、执行绪或应用程式占用 L3 快取空间与记忆体频宽的精细调控机制(在 Broadwell 被称之为 Resouce Director Technology),企图实现「L3 快取记忆体层级的 QoS」。

AMD 也「有为者亦若是」的在 Zen 2 加入类似的相关快取记忆体管理指令,有时候还真的满同情这些作业系统和虚拟机管理者厂商,什幺东西都要开发两个版本。

像 VMware 的 vMotion 需要採用 EVC(Enhanced vMotion Caompatility)盖掉「非基本指令集」,搬完后还要重新启动虚拟机器,才会判断新伺服器的 CPU 有哪些功能可在电源开启后使用,才能存取所有新的处理器功能,更不用讲不同厂商 CPU 之间的动态搬移,VMware 也明讲了「不支援从英特尔平台动态转移到 AMD 平台,反之亦然,只能使用会导致停机的冷转移」,其他体系的虚拟机,如 Red Hat Virtualizaton 和 KVM,对此大哉问也都是大同小异的回应。

HPE 的「将虚拟机器从英特尔型伺服器平台移转到 AMD 型伺服器平台」白皮书,推荐的方式是请顾客掏钱购买 Carbonite 远端快照複写软体,但也不能做到不停机,只能「Almost Zero Downtime」。光凭这点,很多完全不允许停机的服务,就不可能从英特尔转移到 AMD 了,无缘享受多到用不完的核心数和执行绪。

所以有时候这世界也是有一点公平、满「一分钱一分货」的,特别在企业 IT 领域更是如此,硬体价格便宜是一回事,但往往会发生「即使再便宜也无法使用」的惨剧。为何 AMD 的产品这幺好,却无法开出更高售价?很多看不见的隐藏成本,才是真正关键,也是满脑子只有 BOM Cost 和硬体规格的厂商,永远无法理解的大道理。

想藉由 AMD EPYC 大展拳脚的伺服器厂商,又有几间写了像样的「系统移转注意须知」呢?所以双方真的主客易位,战局真的改观了吗?我们下篇继续。

  • Workload Tuning Guide for AMD EPYC™ 7002 Series Processor Based Servers
赞(0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

买云服务器上,云就上阿里云!

平板电脑什么牌子好买书去哪个网站比较好