gpt4 book ai didi

process - 内核调度程序如何通过定时器中断保持时间量子精度?

转载 作者:行者123 更新时间:2023-12-05 09:15:44 25 4
gpt4 key购买 nike

根据我的阅读,有一个由硬件调用的定时器中断,它经常执行并将控制权从正在运行的进程转移回内核/调度程序,然后内核/调度程序能够确定正在运行的进程是否超过了它的时间片,如果是的话运行另一个任务。

这似乎不准确。

例如:如果定时器中断是每 1 个单元

并且调度程序算法将 CPU 绑定(bind)进程时间份额确定为 1.5 个单位,它实际上将获得 2 个单位的 CPU 时间。

或者调度程序是否仅以中断计时器为单位向进程提供时间份额?

最佳答案

Linux 的调度程序 (CFS) 通过首先定义每个线程将运行一次的时间段来为线程分配时间片。此时间段由 sched_slice() 计算得出功能,取决于 CPU 上的线程数,以及可以从用户空间设置的 2 个变量(sysctl_sched_latencysysctl_sched_min_granularity):

如果线程数大于sysctl_sched_latency/sysctl_sched_min_granularity;那么周期将为 nr_threads * sysctl_sched_min_granularity;否则周期将为 sysctl_sched_latency

例如,在我的笔记本电脑上,我有以下值:

    % cat /proc/sys/kernel/sched_latency_ns
18000000
% cat /proc/sys/kernel/sched_min_granularity_ns
2250000

因此,sysctl_sched_latency/sysctl_sched_min_granularity = 8。现在,如果 CPU 上的线程少于 8 个,那么每个线程将分配 18.000.000 纳秒(即 18 毫秒);否则,每个将分配 2.250.000 ns(2.25 ms)。

现在,考虑到这些值,如果我们使用此命令查看节拍频率(在内核编译时定义):

    % zcat /proc/config.gz | grep CONFIG_HZ
# CONFIG_HZ_PERIODIC is not set
# CONFIG_HZ_100 is not set
# CONFIG_HZ_250 is not set
CONFIG_HZ_300=y
# CONFIG_HZ_1000 is not set
CONFIG_HZ=300

因此,在我的笔记本电脑上,我每秒有 300 个滴答声,这意味着每 3 毫秒一个滴答声。这意味着在我的例子中,如果一个 CPU 上有超过 8 个线程,我会在我的时间片中失去一点精度(一个应该运行 2.25 毫秒的线程将运行 3 毫秒),但我可以通过重新编译我的来修复它具有更频繁滴答的内核。

不过需要注意的是,这其实不是问题,因为CFS(Completely Fair Scheduler)顾名思义就是以公平为目标,这里也将是这样。

关于process - 内核调度程序如何通过定时器中断保持时间量子精度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52023463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com