点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!
测试环境
1.1 测试硬件配置
ARM | X86 | ||
系统版本 | BCLinux-21.10 | BCLinux-21.10 | |
CPU | 型号*数量 | KP5250(48 Cores)*4 | Intel6248(20Cores)*4 |
内存 | 型号*数量 | 32G*24 | 32G*24 |
硬盘 | 型号*数量 | 960GB SATA SSD*6 | 960GB SATA SSD*6 |
网卡 | 型号*数量 | 25GE * 2 | 25GE * 2 |
Raid卡 | 型号 | SAS 3508 | SmartRaid 3100 |
1.2 测试工具
软件名称 | 版本 | 备注 |
|---|---|---|
OceanBase | 商业版v3.2.3 | 数据库软件 |
fio | 3.7 | 硬盘压测工具 |
BenchMarkSQL | 5.0 | 数据库压测工具 |
1.3 测试组网
Arm侧测试组网为2:2:2集群,每台机器部署一个observer节点加obproxy节点,具体如下:
节点 | Zone | 描述 |
xx.xxx.xxx.10 | 1 | |
xx.xxx.xxx.11 | 1 | |
xx.xxx.xxx.17 | 2 | |
xx.xxx.xxx.18 | 2 | |
xx.xxx.xxx.19 | 3 | 主服务器 |
xx.xxx.xxx.20 | 3 | 主服务器,压力机 |
X86测试组网为单zone双节点,每台机器部署一个observer节点加obproxy节点,具体如下:
节点 | Zone | 描述 |
xx.xxx.xxx.118 | 1 | 主服务器,压力机 |
xx.xxx.xxx.119 | 1 | 主服务器 |
测试数据
2.1 fio测试数据
1)1M顺序写测试
并发数 | arm(3盘raid5) | x86(3盘raid5) | arm(6盘raid5) | x86(6盘raid5) |
IOPS | IOPS | IOPS | IOPS | |
1 | 1939 | 3586 | 3180 | 4958 |
2 | 3867 | 5997 | 4649 | 5595 |
4 | 5665 | 6177 | 5464 | 6014 |
8 | 4732 | 6239 | 6070 | 5921 |
16 | 4920 | 6329 | 5882 | 6037 |
32 | 5723 | 6405 | 6022 | 6281 |
64 | 5707 | 6401 | 5523 | 6374 |
2)1M顺序读测试
并发数 | arm(3盘raid5) | x86(3盘raid5) | arm(6盘raid5) | x86(6盘raid5) |
IOPS | IOPS | IOPS | IOPS | |
1 | 2160 | 3992 | 3703 | 5520 |
2 | 2171 | 4055 | 5425 | 6301 |
4 | 2212 | 5834 | 5550 | 6460 |
8 | 2433 | 5481 | 5783 | 6455 |
16 | 3247 | 5185 | 7071 | 6491 |
32 | 6641 | 5423 | 7104 | 6537 |
64 | 6792 | 5274 | 7126 | 6525 |
3)4K随机读测试
并发数 | arm(6盘raid5) | x86(6盘raid5) |
IOPS(k) | IOPS(k) | |
1 | 114 | 90 |
2 | 190 | 150 |
4 | 329 | 230 |
8 | 368 | 277 |
16 | 359 | 279 |
32 | 366 | 270 |
64 | 360 | 250 |
4)16K随机读测试
并发数 | arm(6盘raid5) | x86(6盘raid5) |
IOPS(k) | IOPS(k) | |
1 | 105 | 80 |
2 | 141 | 100 |
4 | 144 | 136 |
8 | 144 | 173 |
16 | 144 | 188 |
32 | 144 | 180 |
64 | 146 | 185 |
2.2 BMSQL压测数据
压测对象 | 并发数 | Tpmc | Tpmc差距 |
Arm | 400 | 321037 | -26.83% |
X86 | 400 | 438783 | 100% |
Arm | 200 | 231722 | -36.58% |
X86 | 200 | 365412 | 100% |
调优方法
3.1 BIOS设置
Advanced > Performance Config > Power Policy > Performance #开启性能模式
Advanced > Memory Config > Custom Refresh Rate > 64ms#提高内存刷新频率
Advanced > Memory Config > NUMA > Enabled #开启NUMA亲和性
Advanced > MISC Config > Support Smmu > Disabled #非虚拟机场景可关闭
Advanced > MISC Config > CPU Prefetching > Disabled #关闭CPU预取
3.2 GRUB参数设置
vi etc/default/grub
#在GRUB_CMDLINE_LINUX一项中修改
1)去除skew_tick=1#此项会导致ARM下内核获取时间函数性能变差
2)增加pci=pcie_bus_perf #适用于网络和硬盘大吞吐场景,PCIe性能最大下设置
grub2-mkconfig -o boot/efi/EFI/bclinux/grub.cfg #加载进系统启动项
reboot #重启生效
设置内存大页,可以提高TLB的命令率,提高访存性能;
缺点是设置后大页内存仅大页内存程序使用,会一直占用内存,需要手动管理,需要考虑其他应用占用内存情况再进行分配。
#查看该系统内存大页大小
cat proc/meminfo | grep Hugepagesize
#根据OceanBase数据库运行时内存占用情况,计算所需分配大页数量
num=所需内存/大页大小
sysctl -w vm.nr_hugepages=<num>
# OceanBase开启使用内存大页参数,重启集群
alter system set use_large_pages=true;
3.4 隔核处理
vim /etc/tuned/cpu-partitioning-variables.conf
加入:
isolated_cores=24-47,48-71
执行:
tuned-adm profile cpu-partitioning
重启。
3.5 网卡绑核
#下载mlx网卡绑核脚本
git clone https://github.com/Mellanox/mlnx-tools.git
chmod +x set_irq_affinity_bynode.sh
执行
./ set_irq_affinity_bynode.sh 0 enp2s0f0
./ set_irq_affinity_bynode.sh 2 enp67s0f0
3.6 进程绑核
taskset -c 24-47 -p $(ps -elf | awk '$NF~/observer/{print $1}')
taskset -c 48-71 -p $(ps -elf | awk '$NF~/obproxy/{print $1}')
3.7 开启 Raid cache
下载https://docs.broadcom.com/docs/007.1507.0000.0000_Unified_StorCLI.zip
./storcli c0/v1 set rdcache=RA
./storcli c0/v1 set wrcache=WB
3.8 修改磁盘调度方式
echo none > /sys/block/sdb/queue/scheduler
备选优化
4.1 jemalloc碎片优化
可以在运行程序前添加LD_PRELOAD=/usr/local/lib/libjemalloc.so + <executable> 来使能jemalloc,不需要编译。
4.2 网络时延
网卡中断聚合(初始usecs 8 frames 128):
ethtool -C
enp2s0f0 adaptive-rx off adaptive-tx off rx-usecs 4 rx-frames 64 tx-usecs 4 tx-frames 64
ethtool -C enp67s0f0 adaptive-rx off adaptive-tx off rx-usecs 4 rx-frames 64 tx-usecs 4 tx-frames 64
4.3 硬盘软终端平衡
echo 2 > /sys/block/sdb/queue/rq_affinity
结果对比
优化前后ARM与x86结果对比:
测试对象 | X86 | ARM | ||||
并发数 | 400 | 200 | 400 | 200 | ||
优化前 | 优化后 | 优化前 | 优化后 | |||
Tpmc | 438783 | 365412 | 321037 | 398701 | 231722 | 285895 |
相差 | 100% | 100% | -26.83% | -9.13% | -36.58% | -21.76% |
Arm 400并发下性能提升24%,落后x86 9%。
200并发下性能提升23%,落后x86 22%。

本文作者:周 庆(上海新炬中北团队)
本文来源:“IT那活儿”公众号





