Ceph 慢盘原因分析一例:CPU 偷懒了!

问题

Ceph 运维发现一个 osd 慢了。

分析

1. 硬件配置对比

找了一台参照机器,上面也一样跑了 15 个 osd,发现 CPU、内存、主板、内存、硬盘的型号都一样,参数也没看出明显差别。但磁盘有点毛病,用 smartctl 看不出通电时长,所以也没有法断定不是磁盘之间的差异。

ProLiant DL380e Gen8

Intel® Xeon® CPU E5-2470 0 @ 2.30GHz

16G DDR3 1333 MHz * 10

2. 排除配置差异

确实找出一个差异来,这个慢的 osd 的磁盘分区和别的 osd 不一样,前面 14 个 osd 的 journal 分区占整个硬盘的比例是 20%,这个慢的 osd 则是 10%。

但后来发现,其它 14 个是普通的 osd,慢的那个是 bucket index osd,所以是故意那样分区的。

3. 发现 mcelog 大了很多

慢盘的 mcelog 比参照机器上的大了 20G,后来确认是很早以前有内存错误打的,不是最近发生。

4. 怀疑内存还是有毛病,毕竟曾经有过毛病

测试逐字节内存填写,结果发现慢盘机器总是比参照机器慢一些,而且浮动比较大,所以怀疑是整机性能不行,并非就那个 bucket index osd 慢,只是 bucket index osd 慢得比较明显。后来,另一名同事确认了这点,15 个 osd 都比参照机器上的 15 个 osd 慢。

5. 在另一名同事的协助下,发现 CPU 降频了……

cpufreq-info 查看,发现这个问题机器的 CPU 是 ondemand 模式,降频后,没有及时恢复!后来改为性能模式,问题解决。至于为什么 CPU 不能恢复高频模式,有点怀疑是 pcc-cpufreq.ko 这个 cpufreq_driver 的 bug,但没仔细研究了,直接听取前辈的经验:使用 ondemand 模式,可能导致莫名其妙的问题,而且并不能省多少电,意义不大。

单说 CPU,省电的关键应该是把工作电压降低了,功率下降肯定能省电;只把频率降低(能提高电阻?),效果目测是不会很明显。这个研究不深,欢迎指教。

6. 为什么参照机器没有问题?

两个可能性:

(1)BIOS ROM 版本不一样,参照机器更高:P73 08/20/2012,问题机器:P73 06/01/2012。

(2)BIOS 参数可能也不一样。(服务器不能 IPMI,无法查看……)