Linux Kernel 5.12 后支持 PREEMPT_DYNAMIC
,与 realtime 版本需要修改 Kernel 代码不同,它允许在运行时切换内核的抢占模式,而不需要重新编译内核。目前支持的模式有:
PREEMPT_NONE
: 无抢占模式,这种模式适用于 CPU 密集型任务,可以最大化吞吐量。
PREEMPT_VOLUNTARY
: 默认模式。内核线程在某些特定的程序点点上可能会被抢占。相比 PREEMPT_NONE ,它提供了一定的低延迟,但不会像 PREEMPT 模式那样频繁地导致上下文切换。
PREEMPT_FULL
: 这个模式下,内核是完全抢占的。当一个更高优先级的任务准备好运行时,当前运行的内核线程可能会被立即抢占。这个模式适合对实时性有较高要求的应用程序。
一般来说,对服务器使用而言,重要的是吞吐量,但对于桌面应而言,延迟对于使用者更为敏感,尤其是多媒体音视频和游戏使用。对于桌面使用推荐激活 full
模式。
如果当前内核编译时使用 PREEMPT_DYNAMIC
(可以通过 uname -a
命令检查) ,则可以通过以下方式激活 full
模式:
通过修改 grub 引导内核参数,添加 preempt=full
来激活 full
模式
# 编辑 grub 配置文件
sudo vim /etc/default/grub
# 找到如下行,加入 preempt=full 内核参数
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
# 修改为
GRUB_CMDLINE_LINUX_DEFAULT="quiet preempt=full"
# 更新 grub
sudo update-grub
reddit 上有一些讨论可供参考: https://www.reddit.com/r/Fedora/comments/158fy6x/ive_turned_preemptfull_on_and_it_solved_most_of/
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.