Linux 进程按用户进行调度?

Linux 进程按用户进行调度?

Linux 似乎独立于进程的用户来调度进程执行。因此,如果一个用户正在运行 100 个进程,而另一个用户正在运行 1 个进程,则平均而言,第一个用户将比第二个用户多获得 100 倍的 CPU 时间。

是否有可能根据用户平衡 CPU 时间,也就是说,在这个例子中,两个用户都获得 50% 的 CPU 时间?

答案1

这是 Linux,当然默认设置相对比较基础,但有很多工具可供选择来更改这些设置。但并非所有发行版都提供这些工具,因此不清楚应该使用哪一个。

在 cgroups 系统上,CPU 资源支持加权分配模型,其中每个组按照权重的比例分配一部分可用资源。

在 systemd 系统上,切片概念直接对应于使用 cgroups。阅读man systemd.resource-control并考虑启用DefaultCPUAccounting=。对每个相关单元应用相同的 CPU 比率。例如,要对每个交互用户执行此操作,请将其输入如下 /etc/systemd/system/user-.slice.d/resource.conf

[Unit]
Description:Default CPU ratio
Documentation:man:systemd.resource-control

[Slice]
CPUWeight=100

该数字的精确值并不重要,只要每个相关单元都获得正确的比例即可。此外,它们并不是在划分整个系统的 CPU,而是分配给父级 user.slice 的 CPU。如果调整的是服务单元,则这些不在 system.slice 范围内。

在使用 pam_limit 的系统上,可以对登录用户设置 POSIX 资源限制。请参阅man limits.conf,配置文件可能是一个类似于的插件/etc/security/limits.d/resource.conf。一个实用的方法可能是将nproc用户获得的任务数设置为最大数量。超过该数量,则无法分叉。或者,cpu是一个诱人的限制,但是超过硬限制可能会开始终止进程​​,这不是很好的用户体验。

对于儿童游戏红灯绿灯的任务版本,有CPU限制。这会发送 SIGSTOP 和 SIGCONT 信号来管理 CPU 使用,很简单。值得注意的是,它有点特别,因为没有配置文件,需要调用它才能启动进程,或者给出 PID。

答案2

您可以根据需要使用 cgroup 并分配应用程序,一个参考是cgroups-v2

相关内容