如何评估一台服务器(处理器 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 变化的明显。再者,这类物理破坏性测试我认为价值不大,服务器在出厂之前应该都会放到一个高温的屋子里面做温度上的压力测试,最起码我参观过的服务器是这么做压测的。

单点(SPOF)悲剧

这篇博客不涉及技术,适合任何读者。
家里用的连通的宽带,手机用的是连通的,3G 网卡也是连通的,结果,前天,连通的海外出口挂了。只要是经过连通那几个出口路由的网站几乎都不能访问了。上不了 twitter 忍几天就算了,关键公司的邮箱用的是 google 的,结果也一起跟着悲剧了,gmail、gtalk、gdocs 都在海外。后来去公司发现电信那段时间也挂了,但是没有连通这么厉害,从 JP、CA 是无法出去的,但是从 HK 绕出去还是可以的。
其实这个问题在两个月前就遇到过,那时候连通也是挂了三四天的样子,我投诉了之后解决的还蛮快的,只是当时并没有当回事。问题不从根本解决,总会再次遇到的。几张图做个纪念吧。


update: 04/15/2014,自从去年(13 年)年底开始,连通的海外访问质量严重下滑,最近的三个月,平均半个月出现一次严重的丢包,投诉之后,一般是正常一周继续开始恶化。

解决问题的方法

林子大了,什么鸟都有。水平高的直接看代码解决问题,水平烂的遇到没见过的问题立马就慌了阵脚,无处下手。这张图倒是很好的表达了这个意思,正所谓临危不乱。

以下面这个为例,说明解决问题的一般的、通用的方法。

一台机器由于 OOM 挂了,重启的时候发现无法启动,屏幕上显示如下:
mount: mounting /dev/disk/by-uuid/***************************** on /root  
failed: Invalid argument  
mount: mounting /sys on /root/sys failed: No such file or directory  
mount: mounting /dev on /root/dev failed: No such file or directory  
mount: mounting /sys on /root/sys failed: No such file or directory  
mount: mounting /proc on /root/proc failed: No such file or directory  
Target file system doesn't have /sbin/init  
No init found. Try passing init= bootarg  

问题最终转交到我这边,如果之前遇到过,那还解决不了,只能说明你不适合从事资本密集型产业。

Continue reading