想知道 15.04 中采用了什么调度机制,分时还是实时,我很确定是 FIFO、循环、SJF?
PS:Linux 新手
答案1
进程调度器
进程调度程序负责执行进程的 CPU 资源分配,旨在最大化整体 CPU 利用率,同时最大化交互性能。
自内核 2.6.23 起(即 Hardy 8.04 LTS)完全公平调度程序(CFS)基于“旋转楼梯最后期限”。kernel.org 的概述:
CFS 代表“完全公平调度程序”,是 Ingo Molnar 实现的新的“桌面”进程调度程序,并合并到 Linux 2.6.23 中。它取代了以前的 vanilla 调度程序的 SCHED_OTHER 交互代码。
CFS 80% 的设计可以用一句话来概括:CFS 基本上在真实硬件上模拟了一个“理想、精确的多任务 CPU”。
“理想的多任务 CPU” 是(不存在 :-))具有 100% 物理功率的 CPU,它可以以精确相等的速度并行运行每个任务,每个任务的速度为 1/nr_running。例如:如果有 2 个任务正在运行,则每个任务以 50% 的物理功率运行 --- 即实际上并行运行。
在实际硬件上,我们一次只能运行一个任务,因此我们必须引入“虚拟运行时间”的概念。任务的虚拟运行时间指定其下一个时间片在上述理想的多任务 CPU 上何时开始执行。实际上,任务的虚拟运行时间是其实际运行时间标准化为正在运行的任务总数。
- 内核 2.4:O(n) 调度器;没有使用该内核的 Ubuntu 版本。
- 内核 2.6.0 到 2.6.22:O(1) 调度器。Warty 4.10(第 1 版)使用 2.6.8。Gutsy 7.10 是最后一个使用 2.6.22 或更低版本的版本。
输入/输出调度程序
输入/输出调度是操作系统用来决定以何种顺序将块 I/O 操作提交到存储卷的方法。
Phoronix 关于调度的文章:Linux 3.16:截止期限 I/O 调度程序通常以 SSD 为主导。
您可以通过在 grub 中将选项“elevator=”附加到“GRUB_CMDLINE_LINUX_DEFAULT=”来更改 I/O 调度程序。
不过,这样做可能更容易(假设 sda 和 deadline):
显示可用调度程序列表:
cat /sys/block/sda/queue/scheduler
并改变调度程序(可以即时完成):
echo deadline > /sys/block/sda/queue/scheduler
来自 kernel/git/torvalds/linux.git
您可以检查正在使用的内容(假设 sda 为主要):
cat /sys/block/sda/queue/scheduler