[閒聊] AMD 真能翻身壓倒英特爾嗎?從應用優劣來

作者: KotoriCute (Lovelive!)   2020-02-09 18:57:43
AMD 真能翻身壓倒英特爾嗎?從應用優劣來探討可能性
https://technews.tw/2020/02/09/x86-amd-intel-zen2/
現在我們把焦點轉向 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 大展拳腳的伺服器廠商,又有幾間寫了像樣的「系統移轉注意須知」呢
?所以雙方真的主客易位,戰局真的改觀了嗎?我們下篇繼續。
作者: JamesForrest (Forrest)   2020-02-09 21:35:00
bug一堆當然便宜啊,如果真的強早就超車了而不是用便宜搶市佔

Links booklink

Contact Us: admin [ a t ] ucptt.com