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抢占模式表现更为优越。