內(nèi)核搶占模式的修改及相關(guān)說(shuō)明
Alibaba Cloud Linux 3系統(tǒng)(內(nèi)核5.10.134-17及更高版本)支持動(dòng)態(tài)切換內(nèi)核搶占模式(preempt dynamic),用戶可以根據(jù)具體需求選擇合適的搶占模式(例如在存在延遲要求的場(chǎng)景中,可采用voluntary
搶占模式)。本文將介紹在Alibaba Cloud Linux 3系統(tǒng)(內(nèi)核5.10.134-17及更高版本)中對(duì)搶占模式的修改及相關(guān)說(shuō)明。
內(nèi)核搶占模式說(shuō)明
Alibaba Cloud Linux 3系統(tǒng)(內(nèi)核5.10.134-17及更高版本)支持以下兩種內(nèi)核搶占模式。
搶占模式 | 說(shuō)明 |
none |
|
voluntary |
|
除none和voluntary模式外,Linux upstream還支持full
模式。full模式說(shuō)明如下:
內(nèi)核可以在任意時(shí)刻被搶占。通過(guò)增加更多的代碼檢查點(diǎn),可以實(shí)現(xiàn)幾乎實(shí)時(shí)的任務(wù)調(diào)度,但這將增加內(nèi)核上下文切換的開(kāi)銷。
此模式主要應(yīng)用于實(shí)時(shí)系統(tǒng)或?qū)憫?yīng)速度要求極高的應(yīng)用場(chǎng)景,適用于任務(wù)繁重且需快速響應(yīng)的桌面環(huán)境,以提供流暢的用戶體驗(yàn)和較高的交互性。
Alibaba Cloud Linux 3系統(tǒng)的內(nèi)核主要服務(wù)于云服務(wù)器,full
模式的應(yīng)用場(chǎng)景與Alibaba Cloud Linux 3系統(tǒng)內(nèi)核的應(yīng)用場(chǎng)景幾乎沒(méi)有重疊。此外,合入動(dòng)態(tài)切換full
的代碼后,嚴(yán)重影響了系統(tǒng)性能,多項(xiàng)Linux測(cè)試基準(zhǔn)出現(xiàn)超過(guò)10%的性能回退。
修改內(nèi)核搶占模式
Alibaba Cloud Linux 3系統(tǒng)(內(nèi)核5.10.134-17及更高版本)引入了以下兩種方式來(lái)修改內(nèi)核的搶占模式。
持久化修改內(nèi)核搶占模式
持久化修改內(nèi)核搶占模式,即使在重啟實(shí)例后,配置依然被保留。
通過(guò)在內(nèi)核的bootcmdline
中添加或刪除preempt=none
參數(shù),以實(shí)現(xiàn)對(duì)內(nèi)核搶占模式的修改。
查看當(dāng)前的搶占模式。
sudo cat /sys/kernel/debug/sched_preempt
查看當(dāng)前內(nèi)核信息。
sudo grubby --info=0
修改搶占模式。
<kernel>
需替換為步驟2中查詢的內(nèi)核版本,例如/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"
重啟服務(wù),使配置生效。
sudo reboot
查看修改后的搶占模式。
sudo cat /sys/kernel/debug/sched_preempt
臨時(shí)修改內(nèi)核搶占模式
通過(guò)debugfs接口臨時(shí)動(dòng)態(tài)修改內(nèi)核搶占模式,在重啟實(shí)例后失效。
本文演示如何將搶占模式修改為voluntary
。
查看當(dāng)前的搶占模式。
sudo cat /sys/kernel/debug/sched_preempt
結(jié)果如下所示,當(dāng)前搶占模式為
none
。修改搶占模式為
voluntary
。sudo sh -c 'echo voluntary > /sys/kernel/debug/sched_preempt'
查看修改后的搶占模式。
sudo cat /sys/kernel/debug/sched_preempt
結(jié)果如下所示,表明搶占模式為
voluntary
。
內(nèi)核搶占模式分析說(shuō)明
在E2E(End To End)場(chǎng)景下,對(duì)MySQL、Redis和Nginx在x86
與Arm64
架構(gòu)下,采用none
和voluntary
搶占模式進(jìn)行的基準(zhǔn)測(cè)試結(jié)果表明,在大多數(shù)情況下,none
搶占模式具有更優(yōu)的性能,但兩種模式之間的性能差距相對(duì)較小。本文將以MySQL場(chǎng)景下的基準(zhǔn)測(cè)試為例進(jìn)行分析討論。
在x86和Arm64架構(gòu)下,分別測(cè)試了oltp_write_only
、oltp_read_only
和oltp_read_write
的測(cè)試場(chǎng)景結(jié)果。測(cè)試結(jié)果表明,TPS和QPS越大,avg latency
和avg 95th
越小,表明性能表現(xiàn)越優(yōu)越。
以下圖中的所有性能數(shù)據(jù)均已將none
的結(jié)果歸一化為1,以便更加清晰地展示none
與voluntary
搶占模式下的性能對(duì)比。
x86
Arm64
根據(jù)測(cè)試數(shù)據(jù),x86
和Arm64
在三種測(cè)試場(chǎng)景下的none
搶占模式表現(xiàn)更為優(yōu)越。