如何确定任务是否是在linux内核中绑定的I / O?

时间:2015-11-03 02:52:01

标签: linux linux-kernel scheduled-tasks

我正在尝试为linux内核(version 2.4.27)实现调度程序,我试图找出一个任务是CPU绑定还是I / O绑定。是否有可用于获取此信息的变量/函数?

1 个答案:

答案 0 :(得分:1)

如果谈论O(1) 调度器:

根据CPU在CPU上运行的时间片,可以将进程确定为CPU绑定或I / O绑定。

每个进程都会设置其默认时间片(100毫秒),然后才能在处理器上进行调度。

如果进程占用全时片(在处理器上运行整个时间片),则进程称为CPU绑定进程。

同样,任何进程不会消耗其整个时间片,但会在其时间片耗尽之前调用sched_yield,,如果进程等待/休眠以发生任何事件,然后调用调度程序将其推送到休眠队列,这意味着它正在等待一些I / O发生,是一个I / O绑定进程。

每个这样的CPU绑定进程都将受到优先处罚,保持时间片相同,并且每个这样的I / O绑定进程都将获得优先级的奖励,保持时间片相同。

因此,在GPOS(通用操作系统)上,它是effective_priority或dynamic_priority,它将告诉您进程是否良好(I / O绑定)或不良行为(CPU绑定进程),如新进程的默认优先级为20,除非另有更改。

根据哪些参数,你可以确定相同的。

effective_prio:返回任务的有效优先级(基于静态优先级,但包括任何奖励或惩罚)。

recalc_task_prio:根据空闲时间确定任务的奖励或惩罚。

参考:https://www.cs.columbia.edu/~smb/classes/s06-4118/l13.pdf