從Centriq 2400曝光以來,這款48核心的處理器就充滿爭議,有人認為高通Centriq 2400仍無法拯救ARM服務器份額,即使高通是ARM陣營的領軍人物,但說服Facebook,Google,亞馬遜等廠商投奔到ARM陣營還是有一定難度的。凡事沒絕對,如今這款處理器正式出貨,Cloudflare就搞到一套搭載Centrip的平臺,用它與Intel Broadwell(以下所稱的Broadwell均指Broadwell-E架構的服務器處理器,Skylake,Falkor同理)和Skylake做對比測試,看看高通究竟有什么底氣和x86陣營爭天下。
Intel一直是服務器市場的領導者,在服務器處理器中占有超過98%的份額,每年的新架構都會增加核心數量和新特性,包括各種指令集。在下一年內高通和Cavium都有基于ARMv8 64位架構的服務器平臺推出,競爭開始變得激烈。
測試平臺有3套,可以看到高通的Centriq對比Intel的處理器有一定競爭力,3款處理器在每個時鐘周期都能處理8個指令,但TDP更低,頻率卻更高。
在過去兩年內ARM陣營已經有一席之地,因為大多數Linux發行版和庫都開始支持64位ARM架構。Cloudflare使用的一些關鍵性服務都針對Centrip的Falkor內核做了配置優化,以確保Centrip運行的穩定性。另外還有NGINX這些用C語言編寫的服務器軟件已支持ARMv8,Go語言編寫的程序也是,而且Go還不斷對ARM64的后端設計優化。
基準測試:
OpenSSL Public Key:
密碼學測試分數高低取決于CPU的ALU(算術邏輯單元)性能,在單核測試中Broadwell-X的成績甚至比Skylake還高,拔得頭籌,這是因為Broadwell-X平臺的運行頻率比Skylake平臺更高,架構也沒有遜色于Skylake-X。Falkor在單核測試中處于劣勢,因為Intel有兩個特別的指令來加速乘法運算:ADCX和ADOX,這兩個指令在每個周期能執行兩次獨立的進位加運算,而ARM只能執行一次。ARMv8指令集沒有執行64位乘法的單個指令,只有一對MUL和UMULH指令。
論到多核測試,因為RSA2048 sign沒有針對ARM優化,所以Falkor的成績落后于Skylake。不過ECDSA項目的表現非常優秀,足以滿足世界上任何公司的ECDSA(橢圓曲線數字簽名算法)要求。
OpenSSL Symmetric Key:
Intel在對稱加密測試中的表現比較出色。AES-GCM使用了特殊硬件指令的組合來加速AES和CLMUL(無需乘法運算),Intel在2010年推出這些指令集,在Westmere和以后的每一代CPU中對稱加密性能都不斷加強。ARM在最近引入了類似的指令作為可選的64位擴展指令集,所以高通以后很可能會改善密碼運算性能。
ChaCha20-Poly1305作為一種通用算法可以更好地利用SIMD單元,高通Centriq只有128位的NEON SIMD,Broadwell有256位的AVX2指令集,到了Skylake則有512位的AVX-512,因此Skylake在單核性能方面有大幅領先優勢。到了多核測試,因為Skylake在執行AVX-512運算時必須降頻,導致Skylake不再鶴立雞群。在所有內核都執行AVX-512操作是,基礎頻率甚至降低到只有1.4GHz的水平,如果用戶還執行其他操作,就會讓你產生性能下降的錯覺。
Gzip壓縮測試:
壓縮測試是一項非常重要的測試,因為壓縮可以節省帶寬,更快地將內容展現到客戶端上,其次壓縮會導致工作量大增,分支預測失誤率很高。
盡管頻率要比Broadwell低,但無疑在單核測試中Skylake勝出,分支預測失誤率更低,Falcor憑借核心數量的優勢在多核測試中完勝前兩者。
Brotli:
Skylake在單核測試中還是最快的,Falkor也沒有樓后太多,在將質量級別設定為9時Falkor甚至勝出。在多核壓縮時情況就有點亂了,質量級別4,5,6時比例很正常,在7之后Falkor的效率開始降低。
Cloudflare猜測在這些質量水平的動態壓縮中Brotli消耗了大量的內存,在第10級和第11級中的縮放比例再次提升。
Golang:
Golang是Cloudflare另一個重要的語言,也是第一個對ARMv8提供支持的語言。
Go Crypto Public Key:
就Go加密而言,ARM和Intel不在同一個水平上,Go有ECDSA,AES-GCM和CHacha20-poly1305匯編代碼,還有Intel用于RSA運算的數學函數,所有這些東西ARMv8都沒有。不過這些差距可以通過優化來彌補,通過正確的優化兩者之間的性能差距可以和OpenSSL相媲美。
Go Gzip:
在Gzip中Falkor的表現相當不錯,具體情況看上圖。在運行使用C語言編寫的Gzip時候Falkor的表現比前兩者都好,這就說明Go語言中對ARMv8的后端優化相當不成熟。
Go Regexp:
Go正則表達式在各種任務中都有實際應用,所以Falkor的Regexp性能也相當重要,不過Falkor的表現不怎么好,Skylake仍然是最理想的解決方案。
Go String:
Go String中Falkor全面落后,甚至輸給了Broadwell,因為在函數runtime.memmove中花費了大量的時間,這個函數需要使用到AVX2。
Go結論:在aarch64模式下Falkor性能令人相當失望,在所有項目中全面被Intel處理器碾壓,這只能通過后續優化來解決問題。
LuaJIT:
除了binary_trees基準測試之外,ARM在LuaJIT上的表現很有競爭力,至少贏了兩個項目。不過binary_trees是一個非常重要的基準,因為會觸發許多內存分配和垃圾回收循環的問題。
NGINX:
測試人員決定生成一個類似實際情況的服務器負載來查看運行功耗,Falkor處理的請求量和Skylake幾乎相同,兩者的性能表現都要好于Broadwell,從BMC中的功耗讀數來看Falkor的功耗不到Intel的一半。Falkor的能耗比為214個請求/W,Skylake是99個請求/W,最低的Broadwell為77個請求/W。
總結:
Cloudflare測試的只是一個工程樣品,正式版配備48個Falkor內核,運行頻率2.6GHz,性能還會繼續提升大約8%。測試人員用的不是28核心的Skylake Platinum版,但28核心的處理器價格不菲,TDP也會超過200W,本次測試比較注重降頻表現和能耗比。
目前通過Go編程的軟件對Centriq處理器支持不佳,一旦ARM服務器份額上漲,勢必會針對ARM平臺優化。在C和LuaJIT的表現良好,在大多數情況下能打贏Skylake,在每一個測試環節Falkor都表現出了超越Broadwell的價值。
而Falkor的制勝之本就是低功耗,雖然號稱TDP為120W,但在所有測試中從沒超過89W,相比之下Skylake和Broadwell的功耗都超過了160,跟他們170W的TDP差不多。