内核抢占模式的修改及相关说明

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

  • 内核会在特定的抢占点主动释放CPU控制权。

  • 时延表现相比于none有所提升,但其性能仍不及none

为什么Alibaba Cloud Linux 3不支持full模式。

除none和voluntary模式外,Linux upstream还支持full模式。full模式说明如下:

  • 内核可以在任意时刻被抢占。通过增加更多的代码检查点,可以实现几乎实时的任务调度,但这将增加内核上下文切换的开销。

  • 此模式主要应用于实时系统或对响应速度要求极高的应用场景,适用于任务繁重且需快速响应的桌面环境,以提供流畅的用户体验和较高的交互性。

Alibaba Cloud Linux 3系统的内核主要服务于云服务器,full模式的应用场景与Alibaba Cloud Linux 3系统内核的应用场景几乎没有重叠。此外,合入动态切换full的代码后,严重影响了系统性能,多项Linux测试基准出现超过10%的性能回退。

修改内核抢占模式

Alibaba Cloud Linux 3系统(内核5.10.134-17及更高版本)引入了以下两种方式来修改内核的抢占模式。

持久化修改内核抢占模式

持久化修改内核抢占模式,即使在重启实例后,配置依然被保留。

通过在内核的bootcmdline中添加或删除preempt=none参数,以实现对内核抢占模式的修改。

  1. 查看当前的抢占模式。

    sudo cat /sys/kernel/debug/sched_preempt
  2. 查看当前内核信息。

    sudo grubby --info=0
  3. 修改抢占模式。

    <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"
  4. 重启服务,使配置生效。

    sudo reboot
  5. 查看修改后的抢占模式。

    sudo cat /sys/kernel/debug/sched_preempt

临时修改内核抢占模式

通过debugfs接口临时动态修改内核抢占模式,在重启实例后失效。

本文演示如何将抢占模式修改为voluntary

  1. 查看当前的抢占模式。

    sudo cat /sys/kernel/debug/sched_preempt

    结果如下所示,当前抢占模式为none

    image

  2. 修改抢占模式为voluntary

    sudo sh -c 'echo voluntary > /sys/kernel/debug/sched_preempt'
  3. 查看修改后的抢占模式。

    sudo cat /sys/kernel/debug/sched_preempt

    结果如下所示,表明抢占模式为voluntary

    image

内核抢占模式分析说明

在E2E(End To End)场景下,对MySQL、Redis和Nginx在x86Arm64架构下,采用nonevoluntary抢占模式进行的基准测试结果表明,在大多数情况下,none抢占模式具有更优的性能,但两种模式之间的性能差距相对较小。本文将以MySQL场景下的基准测试为例进行分析讨论。

在x86和Arm64架构下,分别测试了oltp_write_onlyoltp_read_onlyoltp_read_write的测试场景结果。测试结果表明,TPS和QPS越大,avg latencyavg 95th越小,表明性能表现越优越。

说明

以下图中的所有性能数据均已将none的结果归一化为1,以便更加清晰地展示nonevoluntary抢占模式下的性能对比。

  • x86

    image

  • Arm64

    image

根据测试数据,x86Arm64在三种测试场景下的none抢占模式表现更为优越。