我知道默认情况下Linux是先发制人的。我想知道正在运行的Linux机器上有关已设计的调度算法。另外,我想知道它是否先发制人?
在我们配置内核时,我们有一个调度选项 - Round Robin等。但是,如何在运行时识别linux系统的调度策略。此外,它是否是先发制人。
答案 0 :(得分:2)
请尝试以下操作。这将为您提供Linux系统正在使用的调度程序。
more /sys/block/sdX/queue/scheduler (sdX = sda or sdb , depend on your system)
其他方法是使用
make menuconfig
这将列出所有调度算法和您正在使用的算法。
答案 1 :(得分:2)
首先,您是指Linux IO还是进程调度程序? 如果是IO调度程序,那么已经提供了一些答案..
进程调度程序,Linux内核可以在执行'make menuconfig'时配置不同的选项。 例如,对于ARM系统:
cd <kernel-src-tree>
make ARCH=arm menuconfig
...
Under Kernel Features:
Preemption Model (Preemptible Kernel (Low-Latency Desktop)) --->
( ) No Forced Preemption (Server)
( ) Voluntary Kernel Preemption (Desktop)
(X) Preemptible Kernel (Low-Latency Desktop)
如果您应用(硬)RT补丁,您将获得第四个选项:CONFIG_PREEMPT_RT(暗示您基本上将Linux作为RTOS运行)。
此外,您可以通过查找内核配置文件来检查当前配置。 例如。在运行3.11.0-15通用内核的桌面Ubuntu 13.10上:
# grep -i preempt /boot/config-3.11.0-15-generic
# CONFIG_PREEMPT_RCU is not set
CONFIG_PREEMPT_NOTIFIERS=y
# CONFIG_PREEMPT_NONE is not set
CONFIG_PREEMPT_VOLUNTARY=y
# CONFIG_PREEMPT is not set
#
# grep -i SCHED /boot/config-3.11.0-15-generic
CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
CONFIG_CGROUP_SCHED=y
CONFIG_FAIR_GROUP_SCHED=y
CONFIG_RT_GROUP_SCHED=y
CONFIG_SCHED_AUTOGROUP=y
# IO Schedulers
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
CONFIG_CFQ_GROUP_IOSCHED=y
CONFIG_DEFAULT_IOSCHED="deadline"
...
注意也会显示IO sched值。