天天看點

商業微處理器:曆史、理論和趨勢(六)從2001 到2020:體系結構發展的新趨勢

從2001 到2020:體系結構發展的新趨勢

最近十年微處理器的發展有了許多新的方向,這一方面是新興應用負載所驅動的,另一方面,也是因為dark silicon 暗矽的存在人們無法充分利用十億級别的半導體。文獻[60, 61] 指出了未來的一些發展方向,包括Energy and efficiency,Safety and security 和Parallelism and memory。可見人們對于微處理器的研究方向逐漸發生了變化,其中一個重要的問題就是功耗。半導體尺寸越做越小,漏電電流卻逐漸增大,晶片的熱量快要把自己給燒掉了。為了解決功耗的問題,許多方法被提出,但也引發了新的問題。

功耗

Bulldozer 是AMD 在2011 年推出的微處理器架構,意圖對Intel 發起絕地反擊。但可惜的是,盡管架構設計理論更先進,但在實際操作時由于浮點性能不足,無法和Intel 正面抗衡,隻能通過其他方面的努力艱難維持市場佔有率。最新的Zen 架構改掉了此前設計的不合理之處,再次赢得了消費者的喜愛。

Bulldozer 采用子產品化的設計方案,可以友善的設計、生産群組裝,同時也能更友善的管理功耗[45]。由于采用了子產品化的設計思路,AMD 的架構師可以針對不同的應用場景快速建構合适的微處理器架構。Bulldozer在一個微處理器當中內建了兩個定點核心,以支援多線程操作;但兩個線程又共享同一個浮點部件,導緻浮點性能不佳。前端被兩個線程共享,可以同時執行4 條指令的譯碼。完成譯碼的指令被劃分為排程組,每個組中所有的指令僅屬于同一個線程。浮點運算部件支援FMA 乘加指令,專用的乘加部件幾乎成了微處理器架構的标準設計,用來加速可能常見的浮點操作。面對市場的需求,許多技術手段被用來降低功耗,例如filtering,speculation reduction,和data movement minimization 等技術,并且可以根據微處理器的活躍程度動态管理功耗。通過基于事件的監控和主動調節工作功率,使得處理器盡可能的工作在設計功率上,并且盡可能的提升性能。

Intel 的Haswell 架構是第二輪Tik-Tok 戰略的産物,是Core 系列的第四代産品。從第二代Sandy Bridge[42] 到第四代Haswell[43] 再到第六代Skylake[44],除了正常的更新外微處理器的微架構基本保持不變[62],重點一直在功耗控制、圖形處理和超頻技術上。

Sandy Bridge 引入了Package Control Unit(PCU) 作為功耗控制的中心,利用深入到每個功能部件的power management agents(PMAs) 收集資訊,并配合外圍供電控制器voltage regulator module (VRM) 對微處理器進行P 狀态和C 狀态的切換。需要重點關注的功能部件包括微處理器核、互連Ring、Cache 以及圖形處理單元GPU,通過算法控制各個部件之間平衡,避免高頻空轉現象。這裡存在兩個問題,一是在高性能的P 狀态和低功耗的C 狀态之間切換會存在一定的延遲,另一方面這樣的切換同樣也是消耗能量的。Sandy Bridge 使用Demotion 算法來解決這些問題。

Haswell 使用更為複雜的三類功耗控制技術:底層實作、高層架構和平台功耗管理。底層實作包括:優化電路和制造技術,優化微體系結構和算法,關注那些未使用的邏輯電路。高層架構基本與Sandy Bridge 的PCU 保持一緻。平台功耗管理層面進一步改進進入C 狀态的延遲,并且可以進入更深的C 狀态,并增加了新的S0ix 狀态提高移動端的電池壽命。此外,Haswell 将前代的電壓控制器內建為新的Fully integrated voltage regulator(FIVR),更加統一和高效的完成電壓控制的工作。

Skylake 進一步更新功耗管理技術,稱之為Intel Speed Shift technology。CPU 全面負責功耗、性能和能效,比OS 層面的監控具有更細的粒度、更快的響應時間和更多的架構可見性,使得消費者-生産者類型的工作負載的線程依賴性的可觀察性得到了改善。PMU 作為性能監控子產品,在虛拟化、原子界面和共享資源等方面得到了加強。

安全

計算機體系結構安全今年來也收到了極大的關注[63],體系結構方面的安全漏洞造成的損失往往較大,而且不易修補。一直以來,體系結構的設計目标是提升性能、降低功耗、縮小晶片面積,但也正是這些方面的努力導緻了相關的漏洞。

針對DRAM 的攻擊,例如Cold-Boot 和Rowhammer。Cold-Boot[64] 利用DRAM 緩慢掉電的特性,對DRAM 進行實體冷卻進而dump 其中的資料。解決方案是對DRAM 進行強制擦除。Rowhammer[65] 利用的DRAM 的實體幹擾問題:某一行的資料如果重複寫入,會導緻相鄰行的資料被翻轉。該問題由于制造方式的不同在不同的DRAM 上表現不同。解決方法是使用帶有ECC 校驗的DRAM。

針對推測執行的攻擊,例如Meltdown 和Spectre. “熔斷”[66] 在一條引起trap 的指令後面執行一條訪存指令,該訪存指令将擷取本來隻能作業系統通路的位址區域。盡管訪存指令随後會被取消,但是相關的資料已經被加載進Cache 當中,随後攻擊者通過Cache 側信道的手段擷取資料。通過該漏洞,攻擊者可以擷取由作業系統保護的資料。一種解決方法是在盡早執行特權級檢查,或者像AMD 一樣,在訪存之前進行檢查。而面對“幽靈”漏洞,Intel、AMD、ARM 等廠商幾乎全軍覆沒。“幽靈”[67] 利用微處理器共享分支預測器的特征,在和目标代碼相同的位置處設定分支方向相反的指令,使得目标代碼被誤預測執行。同樣,随後的訪存指令盡管會被取消,但是資料仍會被加載進Cache,再利用Cache 側信道的攻擊手段,攻擊者可以獲得目标程序的資料。面對“幽靈”似乎硬體方法代價太大,不管是使用分離的分支預測器還是每個處理器僅運作單一程序。軟體層面上可以通過在相關的位置插入記憶體栅障指令或是順序訪存指令,禁止微處理器的推測執行。

為了降低功耗,人們發明了DVFS 技術。但不幸的是,不協調的電壓變化可能使得微處理器的時鐘被惡意篡改,進而引發安全問題[68–70]。

新興負載、專業化加速器和晶片便捷開發

過去十年裡出現了許多新興負載,例如視訊編解碼、遊戲、比特币挖礦和人工智能算法。CPU 作為通用處理器當然可以運作這些程式,但是為了進一步提高專一領域的性能和能效,出現專業化定制晶片的需求,例如GPU、TPU 和比特币專用晶片。文獻[71] 收集了大量相關領域的專用晶片,考慮在專用晶片性能提升背後,除了工藝進步等方面真正屬于專業化帶來的性能和能效提升有多少。通過比較發現,在領域新興之時,架構師們還處在摸索階段,确确實實有專業化帶來的性能和功耗提升。但是随着領域逐漸成熟,專業化的收益逐漸持平,更多的收益來自于更多的半導體和更好的半導體工藝。另一方面,摩爾定律接近尾聲,也就不難預測專用加速器所能達到的性能和功耗極限,也就是加速器牆。

近幾年人工智能領域發展火熱,也有文獻[72] 專門讨論在圖分析領域的記憶體負載情況。對于圖來說,非常常見的一種通路方式就是讀取一個節點的鄰居清單,然後通路他們的鄰居。表現在訪存行為上,就是兩次連續的Load 操作之間有依賴關系,無法充分利用訪存的局部性。同時他們發現,許多經典的圖分析算法對L2 Cache 幾乎不敏感,導緻其使用率很低。在此基礎上,文中提出使用L2 Cache 作為資料預取的存放地點,利用資料的類型資訊做預取。其實這給我們新的預取思路:能否設計一條訪存指令,通路一個記憶體位址,按照其中存儲的内容再次訪存取回所需要的資料。

新興負載屬于應用驅動的晶片設計,為了縮短晶片開發周期,便捷開發的設計思想被提出,這裡不展開叙述了。

多核微處理器和片上網絡

在微處理器核已經設計完成的情況下還想要進一步提升微處理器的性能應該怎麼辦呢?答案似乎是顯而易見的,連接配接多個微處理器核來提供近似線性的加速比。從程式員的角度來說,這樣的系統記憶體共享編寫程式會比較友善,不需要太多的更改。而從性能的角度來說,這意味着互聯技術很大程度上影響了系統的通信能力。如果微處理器核在片上互連,這就是片上多處理器,目前大多數桌面級微處理器都采用這種模式;如果微處理器之間能夠通過PCIE 或是專用接口快速互連,大多數伺服器會采用這種方式;如果更多的伺服器以更為密集的形式通過專用網絡進行互連,就成了目前資料中心的樣貌。

我們來看片上網絡(Networks on Chip,NoC)。片上網絡要求高帶寬、低延遲,同時魯棒性高并且功耗低。為了解決這些問題,強化學習的方法被引入了進來[73]。架構師們首先設計了不同的路由政策和備援通路,并由控制器進行控制,而控制政策則是由強化學習的方法訓練得到的。

并行計算機和Cache 一緻性

高性能的微處理器提供基本的運算資源塊,高性能的互連技術提供快速的通信網絡,其中還有一類技術用來提高被動通信的性能,Cache 一緻性協定。由于現代的微處理器内部普遍使用了Cache 技術,當資料被取進Cache 當中并且被微處理器修改,如果修改後的值不能及時的被其他微處理器看到,就會導緻資料的不一緻。最為簡單粗暴的方法就是每次寫操作都向系統中所有的微處理器廣播,這其中顯然有大量的無用通信。高效的解決這一問題的方法就是Cache 一緻性協定,有關的方法被總結在文獻[74, 75] 中。許多微處理器在設計時都有這方面的考慮,前面介紹過的AMD Opteron[35, 59]、Intel Haswell[43]、IBM Power4[32] 中都有或多或少的描述。

從方法上來說,維護一緻性政策主要有基于監聽的方法和基于目錄的方法兩種兩大類。基于監聽的方法使用總線快速廣播事務,Cache 控制器根據Cache 中的實際内容作出相應的動作。這樣的好處在于實作簡單,不需要大量的額外開銷,壞處是可擴充性較差,适用于小規模并行機。而基于廣播的方法則使用專門的目錄記錄資料的大緻分布,通過發送點對點的消息定向完成操作。這樣的好處在于通信量小,系統可擴充性好。不管使用哪類協定,都需要專門維護Cache 的狀态,例如最簡單的MSI 三狀态,或是标準的MOESI 五狀态,IBM 的Power7[46] 則使用了十幾種狀态。适當劃分Cache 的狀态可以對其采取更有針對性的措施減少延遲,但同時也伴随着更複雜的硬體設計。除此之外,還有一些設計細節需要在實踐中打磨。接下來看一個例子,SGI Origin[47] 具體是如何實作的。

SGI Origin 是1997 年推出的高可擴充的ccNUMA 架構的大型伺服器,最多支援1024 個MIPS R10000微處理器互連。設計目标包括三點:1. 可擴充性,要支援超過36 個微處理器;2. 易于程式設計,支援共享記憶體模型;3. 成本效益高。要達到這樣的目标,基于監聽協定的總線式結構自然無法滿足要求,是以設計采用目錄協定維護一緻性。SGI Origin 支援至多512 個節點互連,其中每個節點包含兩個R10000 微處理器和至多4GB 的記憶體,同時還內建有目錄存儲和總線控制器。互連結構可以使用任意可擴充的網際網路絡,也并不要求順序的點對點通信,使用兩條虛拟鍊路來避免死鎖。Cache 一緻性協定支援更新和寫無效事務,Cache 行可以被靜默替換。目錄在小規模時采用16 位向量模式,而在系統規模較大時采用64 位稀疏向量。Cache 狀态增加了CEX 狀态,表示Cache 行是獨占的并且是未被寫過的。除了Cache,TLB 同樣需要維護,這方面的技術包括TLB 中毒和擊落。除了LL/SC 之類,系統還提供fetch-and-op 原子操作提升性能。有關如何建造并行計算機的方法,教科書[33] 中有詳細的描述,感興趣的讀者可以找來深入閱讀。

資料中心和虛拟化

虛拟化技術是近年來的熱門話題。不管是純使用者層面的二進制翻譯技術,例如Qemu 和VMware,還是修改作業系統代碼的Xen 技術[76],還是利用硬體輔助完成虛拟化的KVM 技術[77] 和VMware ESX[78],都試圖盡可能的提高虛拟化的效率。為了從硬體上提供虛拟化的支援,Intel 提出了自己的硬體虛拟化技術[79]。軟硬體協同的虛拟化技術往往能提供更好的效果和效率。

資料中心為了資料安全,會對資料進行多副本容災,或者為了讓資料盡可能的靠近使用者提高使用者體驗,會将資料從資料中心遷移到某個伺服器。這就導緻了一個問題:如何維護多個資料副本之間的一緻性。解決這個問題的過程中誕生了一些重大的理論成果,例如CAP 理論[80]。該理論是說,在一個多副本的環境下,百分百的C(Coherence,一緻性)、百分百的A(Availability,可用性)和百分百的P(Network Partition網絡分區)是無法同時達到的。面對這樣的問題如何去權衡和設計分布式系統成了計算機領域的一大難題。不管是雲計算服務還是雲存儲服務[81–85],都需要在這個問題費點心思。2008 年的Bitcoin[86] 或許給出了這個問題的另一個答案。

繼續閱讀