河水和井水的较量:Centriq处理器的性能表现到底如何?
从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差不多。