Alibaba Cloud Linux 3系统(内核5.10.134-17及更高版本)支持动态切换内核抢占模式(preempt dynamic),用户可以根据具体需求选择合适的抢占模式(例如在存在延迟要求的场景中,可采用voluntary
抢占模式)。本文将介绍在Alibaba Cloud Linux 3系统(内核5.10.134-17及更高版本)中对抢占模式的修改及相关说明。
内核抢占模式说明
Alibaba Cloud Linux 3系统(内核5.10.134-17及更高版本)支持以下两种内核抢占模式。
抢占模式 | 说明 |
none |
|
voluntary |
|
修改内核抢占模式
Alibaba Cloud Linux 3系统(内核5.10.134-17及更高版本)引入了以下两种方式来修改内核的抢占模式。
持久化修改内核抢占模式
持久化修改内核抢占模式,即使在重启实例后,配置依然被保留。
通过在内核的bootcmdline
中添加或删除preempt=none
参数,以实现对内核抢占模式的修改。
查看当前的抢占模式。
sudo cat /sys/kernel/debug/sched_preempt
查看当前内核信息。
sudo grubby --info=0
修改抢占模式。
<kernel>
需替换为步骤2中查询的内核版本,例如/boot/vmlinuz-5.10.134-17.2.al8.x86_64
。修改抢占模式为
voluntary
。sudo grubby --update-kernel=<kernel> --remove-args="preempt=none"
修改抢占模式为
none
。sudo grubby --update-kernel=/boot/vmlinuz-<kernel> --args="preempt=none"
重启服务,使配置生效。
sudo reboot
查看修改后的抢占模式。
sudo cat /sys/kernel/debug/sched_preempt
临时修改内核抢占模式
通过debugfs接口临时动态修改内核抢占模式,在重启实例后失效。
本文演示如何将抢占模式修改为voluntary
。
查看当前的抢占模式。
sudo cat /sys/kernel/debug/sched_preempt
结果如下所示,当前抢占模式为
none
。修改抢占模式为
voluntary
。sudo sh -c 'echo voluntary > /sys/kernel/debug/sched_preempt'
查看修改后的抢占模式。
sudo cat /sys/kernel/debug/sched_preempt
结果如下所示,表明抢占模式为
voluntary
。
内核抢占模式分析说明
在E2E(End To End)场景下,对MySQL、Redis和Nginx在x86
与Arm64
架构下,采用none
和voluntary
抢占模式进行的基准测试结果表明,在大多数情况下,none
抢占模式具有更优的性能,但两种模式之间的性能差距相对较小。本文将以MySQL场景下的基准测试为例进行分析讨论。
在x86和Arm64架构下,分别测试了oltp_write_only
、oltp_read_only
和oltp_read_write
的测试场景结果。测试结果表明,TPS和QPS越大,avg latency
和avg 95th
越小,表明性能表现越优越。
以下图中的所有性能数据均已将none
的结果归一化为1,以便更加清晰地展示none
与voluntary
抢占模式下的性能对比。
x86
Arm64
根据测试数据,x86
和Arm64
在三种测试场景下的none
抢占模式表现更为优越。