公司采购了国产服务器(华为Taishan),如何测试其CPU性能是否满足数据库业务?
兄弟们,最近公司搞了几台华为Taishan服务器,准备把核心的数据库业务跑上去。领导一句话,活儿就落咱们头上了:“你测测,看CPU行不行,能不能扛得住咱的业务。”
说实话,刚接到这活儿我心里也打鼓。不是不信国产,而是咱以前摸的都是x86那套,突然换成ARM架构的鲲鹏920,心里没底。但活儿总得干,测完发现,这事儿没想象中那么玄乎。今天就跟大伙儿聊聊我是怎么测的,全是实操,保证你听完也能上手。
别急着跑分,先搞清楚你的“行”是啥标准
很多兄弟一上来就装个碾压工具开跑,跑完一看分数挺高,就告诉领导“没问题”。这其实是个大坑。咱测的不是CPU的绝对性能,而是它能不能满足咱的数据库业务。
啥意思?打个比方。你请了个大力士(CPU),力气很大能扛500斤(跑分高)。但你家是开精密仪器的,需要的是他手稳、心细,能捏着绣花针穿线。你光让他举杠铃,能测出他会不会穿针吗?
数据库业务就是那个“精密仪器活”。它考验的不仅是CPU算得多快,更考验单核性能(很多数据库操作没法多核并行,比如单条SQL的解析)、内存带宽(数据要来回搬运)、缓存命中率(频繁访问的热数据)。所以,我先给自己定了两个“行”的标准:
- 跑得动:用咱们线上真实的SQL语句,看响应时间能不能接受。
- 扛得住:模拟业务高峰期的高并发,看CPU会不会被打满,会不会出现“雪崩”。
实测第一步:拿出“照妖镜”——看看底子咋样
跟看人先看骨架一样,我先用系统自带的命令把Taishan的“体格”摸了一遍:
lscpu
这命令就像给服务器做个体检,架构(ARM)、主频(2.6GHz)、核心数(比如64核)、缓存大小一目了然。看完我心凉了半截,2.6GHz的主频,跟公司老掉牙的Intel Xeon 2.2GHz差不多,甚至比最新的Xeon 3.0GHz+低不少。
别慌!主频低不等于干活慢。 这就好比一个熟练老工人(低频高IPC)和一个愣头青(高频低IPC),老工人虽然动作慢,但每一下都干在点子上,效率反而高。鲲鹏920的核心里有“聪明”的设计,单核干活能力不虚。
为了有个直观对比,我给“体检”加了个硬核项目——UnixBench。这是个老牌测试工具,测的是CPU整体运算、进程调度、文件读写这些综合能力,相当于给CPU跑个“十项全能”。
跑的时候记得用 ./Run -c 核心数 来测多核成绩。我当时跑完,多核分数把我惊到了,比公司老Intel服务器高出一大截。为啥?因为Taishan的核心多啊!就像一个食堂,虽然每个厨师炒菜速度一般,但我有64个厨师同时开火,出菜量肯定比只有16个厨师的老食堂大。
不过,多核分数再高,也不代表数据库就快。 因为咱的数据库是“一桌一桌点菜”的,不是“大锅饭”。如果一个厨师(单核)卡壳了,其他厨师帮不上忙。
实测第二步:请出“真李逵”——拿真实业务压一压
看完了“骨架”和“力气”,接下来就是见证真章的时候了。工具选的是sysbench,专门用来模拟数据库压力。
先测纯CPU,这相当于看厨师颠勺的基本功:
sysbench cpu --threads=64 --time=60 --cpu-max-prime=20000 run
跑完看 events per second,数值越高,说明CPU纯计算能力越强。这个数Taishan很亮眼,因为核心多。
但这还不够,重头戏是模拟真实数据库场景。 我用sysbench的 oltp_read_write 模式,模拟咱业务里最常见的“查一下、改一下”的操作。这就像让厨师同时做十个菜,还得保证每道菜口味稳定。
sysbench oltp_read_write --mysql-host=127.0.0.1 --mysql-port=3306 \
--mysql-user=root --mysql-password=xxx --tables=10 --table-size=1000000 \
--threads=32 --time=120 --report-interval=10 run
这里有个关键指标:TPS(每秒事务数)和 延迟(Latency)。 兄弟们,重点看延迟!这决定了咱用户点一下鼠标,数据库要多久才响应。
我当时测出来的结果,延迟比老Intel高了那么一丢丢(比如从5ms变成7ms)。虽然TPS高了不少,但心里还是咯噔一下。
后来我发现问题出在MySQL配置上。因为ARM架构处理器的一些特性(比如NUMA拓扑)跟x86不一样,很多默认配置不是最优的。这就好比把赛车用的调校方法用在越野车上,肯定跑不快。我调了一下MySQL的 max_connections 和 innodb_buffer_pool_size,情况立马好转,延迟降下来了。
实测第三步:不信工具信“真身”——用慢查询日志实测
工具模拟毕竟是“仿真”,最后还得“实战”。我把Taishan服务器直接接到测试环境,把线上数据库的慢查询日志(记录所有执行慢的SQL)打开,然后把之前录制的一段真实业务流量回放过去。
这才是最接地气的测试。 好比说,你不光要看厨师证(benchmark),还得让他实际颠两口锅,尝尝咸淡(真实SQL),才算过关。
我盯着监控面板,看那些平时被吐槽“慢得像蜗牛”的复杂报表SQL,在Taishan上跑了多少秒。实测结果对比,大部分SQL跟老服务器打了个平手,个别刁钻的SQL稍慢一点点,但在我们设定的“3秒超时”红线之内。只要不超红线,用户就无感知。
最后说两句掏心窝的话
测试做完了,我的结论是:华为Taishan的CPU完全能满足咱的数据库业务,但前提是得花点心思做调优。它强在“人多力量大”(多核并行),弱在“单兵作战”(单核频率)。如果你的业务是高并发、多路查询(比如订单系统),它很合适;如果是那种单个超级复杂的SQL语句,它可能就不如高主频的x86。
所以,兄弟们,以后遇到测试国产服务器的活儿,别慌,别被跑分软件忽悠。拿咱自己的业务去压它,拿咱自己的SQL去磨它,只要在业务能接受的延迟范围内,它就是一台好服务器。 如果实在拿不准,多上咱们IT人常用的几个方案社区看看,比如 itfangan.com,上面经常有人分享不同芯片在数据库场景下的调优“避坑指南”,能帮你少走不少弯路。
测完记得把测试报告写漂亮点,数据、截图、结论都放上,让领导看得明明白白,这活儿才算漂亮收工。祝各位兄弟测机顺利,一次通过!