如何评估一台服务器(处理器 CPU)

前面说到了服务器评估运维管理方面的内容,这篇总结下 CPU 的评估。目前还没听说 CPU 会成为一个系统的瓶颈的情况;并且,目前主流的 CPU 也就那么几款,E5-24xx, 26xx,包括会在 Q3 2013 发布 22nm 工艺的 E5-2600 v2 等等。因此 CPU 的 benchmark 相对来说是比较简单的,结果也是显而易见的。

分下面几个方面来进行测试。

1. 浮点
最著名的就是 PI 运算(5000位),网上有不少脚本来做这事,默认情况下,一次 PI 运算只会运行在其中的一个 core 上,建议让每一个 core 都测试一遍,可以使用 taskset 来绑定 CPU core,使得每个 core 都跑一遍 PI 计算。下面这个是 E5-2630 跑的结果:
 0  30.05
 1  30.02
 2  30.07

20  30.15
21  30.06
22  30.12
23  30.01

跟其同等档次的 E5-2430 也仅仅是有很小的差距:
 0  31.34
 1  31.58
 2  31.56
 3  31.53

20  31.50
21  31.51
22  31.40
23  31.50

有点特别需要注意的是,BIOS 里面务必将节能相关的选项关闭,使用 max performance 取代。二者的差距在 CPU 的表现上会非常的明显 ,并且在目前某些服务上会出现莫名其妙的状况。
下面这个是 2630 在使用了 custom 的情况下的 PI 值运行时间:
0  30.48
 1  59.00
 2  58.53
 3  59.09

21  59.02
22  58.80
23  58.65

是不是很夸张?


2. 素数计算
下面几个测试会用到统一工具,sysbench。主流发行版本应该都可以通过包管理器直接安装。
计算 200000 以内的素数:
# sysbench –test=cpu –cpu-max-prime=200000 run

可以指定使用的线程的数量,超过了最大的 core 意义不大:
# sysbench –test=cpu –num-threads=$(grep "processor" /proc/cpuinfo | wc -l)  –cpu-max-prime=200000 run

比如 12 threads,total time 在 74.3045s 左右;而 24 threads 的在 42.0450s 左右,差距还是蛮明显的。


3. thread & mutex
前者主要用来做 scheduler 的 benchmark;后者主要测试 mutex 的性能:
# sysbench –test=threads –num-threads=64 –thread-yields=10000 –thread-locks=8 run
# sysbench –test=mutex –num-threads=200 –mutex-num=10240 –mutex-locks=100000 –mutex-loops=500000 run


除了上面涉及到的 PI、素数、thread/mutex 等,还可以测试非对称密钥的 CPU 计算性能,在没有专有的加解密硬件加速器的情况下,加解密的重任都落到了 CPU 身上。使用 "openssl speed rsa" 这条命令,可以测试出 RSA 的 key operations(signs) 以及其逆过程(verify) 每秒的数值。
# openssl speed rsa512 -multi $(cat /proc/cpuinfo  | grep "model name" | wc  -l)

另外,有个叫 cpuburn-in 的工具,可以尽可能的使得 CPU 升温,使得在比较极端的情况下,发现问题。不过我测试下来发现,CPU 的温度、包括 PSU、Fan 的变化并不是很明显,甚至没有上面使用 openssl 变化的明显。再者,这类物理破坏性测试我认为价值不大,服务器在出厂之前应该都会放到一个高温的屋子里面做温度上的压力测试,最起码我参观过的服务器是这么做压测的。

  • http://log4d.com/ alswl

    这个赞,直接收藏了。