我正在尝试为 linux 内核(版本 2.4.27
)实现调度程序,并且我正在尝试找出任务是 CPU 绑定(bind)还是 I/O 绑定(bind)。是否有任何变量/函数可用于获取此信息?
最佳答案
如果说 O(1) 调度器:
一个进程可以根据它在 CPU 上运行的时间片来确定它是 CPU bound 还是 I/O bound。
在允许它被调度到处理器上之前,每个进程都将设置其默认时间片(100 毫秒)。
如果进程消耗完整时间片(在处理器上运行整个时间片),则该进程称为 CPU 绑定(bind)进程。
类似地,任何不消耗其整个时间片但会在其时间片用完之前调用 sched_yield 的进程,或,如果进程等待/休眠任何事件发生,然后调用调度程序将其插入 sleep 队列,这意味着它正在等待一些 I/O 发生,是一个 I/O 绑定(bind)进程。
每个此类 CPU 密集型进程将受到优先级惩罚,保持时间片相同,并且每个此类 I/O 密集型进程将获得优先级奖励,保持时间片相同。
因此,在 GPOS(通用操作系统)上,它是 effective_priority 或 dynamic_priority,它将告诉您进程是行为良好(I/O 绑定(bind))还是行为不良(CPU 绑定(bind)进程),如新进程的默认优先级为 20,除非另有更改。
有一些参数可以根据它来判断。
effective_prio:返回任务的有效优先级(基于静态优先级,但包括任何奖励或惩罚)。
recalc_task_prio:根据空闲时间确定任务的奖励或惩罚。
引用:https://www.cs.columbia.edu/~smb/classes/s06-4118/l13.pdf
关于linux - 如何找出任务是否在 linux 内核中绑定(bind)了 I/O?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33490593/