只要是內心呼喊著「AMD Yes!」的科科們,一定都知道AMD靠著「多餡水餃」的Chiplet策略,取得對Intel的核心數優勢。但AMD其實有更多的策略考量,絕非一般DIY玩家和網路鄉民想的那麼簡單,也為此帶來了更麻煩的性能調校,特別是核心數量激增的EPYC。
硬科技:回顧AMD Zen微架構和EPYC (上)
硬科技:回顧AMD Zen微架構和EPYC (中)
硬科技:回顧AMD Zen微架構和EPYC (下)
硬科技:讓AMD產品時程準確到位的Infinity Fabric
硬科技:AMD 7nm製程CPU、GPU外 科科們更該知道的事
硬科技:AMD的CPU製程優勢和Intel的缺貨危機(上)
硬科技:AMD的CPU製程優勢和Intel的缺貨危機(下)
CPU整合記憶體控制器這件事,其實有利有弊,好處是「靠的越近,速度越快」,壞處則是在多處理器環境,主記憶體會分散在四處,作業系統須進行最佳化排程,盡量讓CPU核心使用本地端的記憶體,避免不必要的遠端存取。
這也是ACPI規範會有儲存多處理器拓樸(Topology)資訊的SRAT(Static Resource Affinity Table)和紀錄NUMA節點之間延遲差異的SLIT(System Locality Information Table)的主因,協助作業系統或虛擬機管理者(Hypervisor)「看清全局」,便於安排行程管理與配置記憶體。AMD的多晶片Chiplet封裝,也讓這件苦差事更加的複雜,更增加了快取資料一致性(Cache Coherence)協定的負擔。
AMD從Zen 2世代開始,將I/O和記憶體控制器與CPU核心拖鉤,除了為了減少風險(I/O和計體控制器的IP區塊,一般都難以快速導入最先進的製程),更有改善效能的考量,因為簡化了分散式實體記憶體的NUMA(Non-Uniform Memory Access) Domain,利於軟體最佳化。
以伺服器應用的EPYC為例,Zen 2世代將原本4個雙通道記憶體,集中成一個八通道,更像早期所有CPU共用同一塊主記憶體的SMP,雙處理器環境的實體NUMA Domain從8個變成2個,而處理器核心要存取記憶體控制器的「距離」,也從3種 (同一顆晶粒的其他CCD、同一顆EPYC的另一顆晶粒的CCD、另一顆EPYC的CCD) 精簡成2種 (本地端SIOD的記憶體控制器,遠端SIOD的記憶體控制器)。
如果跟Intel相比,就更不難理解AMD的伺服器平台有多麼複雜,加上多晶粒架構會帶來的額外延遲,這也讓AMD EPYC平台在很多應用領域,實際上的表現並沒有比Intel Xeon-SP出色許多,甚至還比較差。同理可證,在個人電腦市場,尤其是遊戲,Intel的處理器也往往展現了超出跑分軟體的實質表現,其因在此。
但災難尚未結束,精簡NUMA Domain固然有其優點,但一次性存取八通道DDR4主記憶體,固然帶來最高的頻寬,卻也帶來更長的延遲,不利於原本已經高度 “NUMA Friendly” 的應用程式 (畢竟人家都已經習慣「自己吃自己」了),AMD勢必要提供可調整頻寬與延遲之間的折衷、並協助作業系統「搞清楚狀況」的工具。AMD也針對不同應用環境,從汎用型、虛擬化、資料庫、高效能運算等,提供性能調校手冊。
也因此,EPYC的系統BIOS有個叫做NUMA Nodes per Socket (NPS) 的項目,定義處理器核心群使用記憶體通道的方式。
四散各地的L3快取記憶體也是難搞的東西,BIOS裡面還有個ACPI SRAT L3 Cache as NUMA Domain,讓作業系統或虛擬機管理者意識到其存在,讓每個CCX盡量存取自己的L3快取。假若各位科科還看不懂的話,就請參考AMD是如何跟微軟合作,讓2019年5月更新版的Windows 10可以 “Topology Awareness”,將彼此有關連的執行緒,盡其所能的「塞」到同個CCX。
那麼伺服器和虛擬機廠商是怎麼建議的?就來瞧瞧Dell和VMware的文件的內容。
想必各位科科都覺得很麻煩了對不對?連微軟和VMware的官方文件,也是得從「NUMA是什麼、EPYC是多晶片水餃、1個CCD包2個CCX、所有CCD連接IOD、有哪些記憶體和I/O界面」等等從頭開始講起,否則想必讀者根本看不懂這些「有字天書」上面印的是從哪裡掉下來的聖經密碼。
所以俗語說的好:天底下沒有白吃的午餐,只有吃不到午餐的白痴 (如筆者)。AMD的產品便宜歸便宜,要享受到好處之前,該做的功課一個都逃不掉。科科科科科。
1 則回應