我的 Linux 系统使用哪个进程调度程序?

我的 Linux 系统使用哪个进程调度程序?

我不太确定 stackoverflow 或 serverfault 是否是用于解决此问题的论坛,但我会在这里尝试。

是否有一些我可以使用的命令或我可以检查的文件,以便找出我在 Linux 系统上使用的进程调度程序?我不是在寻找 I/O 调度程序,而是进程调度程序,请不要参考指南或指南来了解什么是调度程序,我只是问是否有一个命令或文件我可以运行/检查看看这个。我可以检查我的内核的文档,但我再次想知道是否有我可以检查的命令或文件。

我上面的内容可能有点多余,但那是因为我看到的帖子似乎有人将进程调度程序与 I/O 调度程序混淆了,而且他们似乎没有回答实际问题,只是提供了调度程序是什么的链接这不是我在这里所追求的,所以如果上述评论听起来很粗鲁,我深表歉意。

答案1

是否有一些我可以使用的命令或我可以检查的文件,以便找出我在 Linux 系统上使用的进程调度程序?

不,因为与 I/O 调度程序的 WRT 不同,只有一种可能:CFS(“完全公平调度程序”),其中包括实时功能。 CFS 的命名部分是为了与“O(1)”调度器,正如该文章中所述,已在版本 2.6.23 中被取代。


2023 年 10 月

从内核版本 6.6 开始,CFS 调度程序已被取代由 EEVDS(“最早符合资格的虚拟截止日期优先”0 调度程序:

这来自一位英特尔工程师,这很有趣,因为近年来他们通过自己的发行版表现出了对 Linux 开发的广泛兴趣,清除Linux,目前优于所有其他操作系统在高端英特尔硬件上。

“替换”意味着旧的调度程序不再可用。因此,要确定您的系统正在使用哪一个,只需检查内核版本:

  • < 2.6.23:O(1) 调度程序。
  • >= 2.6.23 < 6.6:完全公平的调度程序。
  • >= 6.6:EEVDF 调度程序。

答案2

cat /proc/config.gz | gunzip | nano -(或者cat /proc/config.gz | gunzip | gedit -就此而言)是更好的替代方案eyoung100 的回答这不需要“gunzipping”到临时文件。
编辑:甚至更简单 -zcat /proc/config.gz | nano -或者zcat /proc/config.gz | gedit -

或者,如@特登在该答案下的评论中建议使用 zgrep。我只是推荐一个不同的搜索字符串:

zgrep "CONFIG_SCHED_" /proc/config.gz

例如,如果您看到:CONFIG_SCHED_y,则内核已配置为使用 MuQSS 调度程序。然而,这并不能保证它。拱门维基建议:

$ dmesg | grep -i muqss
...
MuQSS CPU scheduler v0.120 by Con Kolivas.

答案3

尝试:

cat /proc/config.gz | gunzip > ~/running.config
nano -w ~/running.config
CTRL + W SCHEDULE

看这里:第14章:调整

答案4

如果它有帮助并且我正确理解了这些问题,我已经在 Ubuntu 中使用了一段时间的问题是:

CPU调度器

在内核 6.6 之前,它是 CFS(完全公平调度程序)。从 6.6 及更高版本开始,将采用 EEVDF(最早符合资格的虚拟截止日期优先)。请注意,EEVDF 仍在获取更新。截至 6.8、6.9 和 6.10,仍在进行优化。我从未找到一种简单的方法来获取 Scheduler 类型或对其的引用,甚至阅读了有关它的文章https://blogs.igalia.com/changwoo/sched-ext-a-bpf-extensible-scheduler-class-part-1/

我这样做了dmesg | grep 'scheduler',但我只收到了 mq-deadline 的信息。没有说 CFS 或 EEVDF 之类的东西。

磁盘调度程序

cat /sys/block/sda/queue/scheduler

可以sda针对您的 SSD、NVME 等设备进行更改,甚至可以通过像这样检查所有设备来更改 Rambo(以下内容将仅查找 SDx 和 NVMEx 单元):

cat /sys/block/{sd?,nvme*n1}/queue/scheduler

它会显示这样的内容:

在此输入图像描述

括号内的调度程序是用于该块设备的调度程序。因此,对于 SDA 来说,它是 mq-deadline,对于 NVME 情况,它不使用任何调度程序。

相关内容