如何识别Linux机器的调度算法和抢先/非抢占性质?

时间:2014-01-07 02:31:11

标签: linux linux-kernel embedded-linux

我知道默认情况下Linux是先发制人的。我想知道正在运行的Linux机器上有关已设计的调度算法。另外,我想知道它是否先发制人?

在我们配置内核时,我们有一个调度选项 - Round Robin等。但是,如何在运行时识别linux系统的调度策略。此外,它是否是先发制人。

2 个答案:

答案 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值。