Linux 似乎独立于进程的用户来安排进程执行。因此,如果一个用户运行 100 个进程而另一个用户运行 1 个进程,平均而言,第一个用户获得的 CPU 时间是第二个用户的 100 倍。
是否有可能按用户平衡 CPU 时间,也就是说,在此示例中,两个用户都获得 50% 的 CPU 时间?
Linux 似乎独立于进程的用户来安排进程执行。因此,如果一个用户运行 100 个进程而另一个用户运行 1 个进程,平均而言,第一个用户获得的 CPU 时间是第二个用户的 100 倍。
是否有可能按用户平衡 CPU 时间,也就是说,在此示例中,两个用户都获得 50% 的 CPU 时间?
这是 Linux,当然默认值是相对基本的,但是有许多相互竞争的工具选择来改变这些。但并非所有发行版都提供了所有这些,因此使用哪一个并不明显。
在 cgroups 系统上,CPU 资源支持加权分配模型,其中每个组根据权重按比例分配一部分可用资源。
在 systemd 系统上,切片概念直接对应于使用 cgroups。阅读
man systemd.resource-control
并考虑启用DefaultCPUAccounting=
. 对每个有问题的单元应用相同的 CPU 比率。例如,要对每个交互式用户执行此操作,请将其放在类似/etc/systemd/system/user-.slice.d/resource.conf
数字的精确值并不重要,只要所讨论的每个单元的比例正确即可。此外,并不是他们在划分整个系统 CPU,而是分配给父 user.slice 的 CPU。如果改为调整服务单元,则它们不在 system.slice 中。
在使用 pam_limit 的系统上,可以对登录用户设置 POSIX 资源限制。请参阅
man limits.conf
,配置文件可能是一个类似/etc/security/limits.d/resource.conf
. 一个实际的事情可能是设置nproc
用户获得的最大任务数。超过这一点,事情就无法分叉。或者,cpu
是一个诱人的限制,但是超过硬限制可能会开始终止进程,这不是很好的用户体验。而对于儿童游戏红灯绿灯的任务版,则有cpulimit。这发送 SIGSTOP 和 SIGCONT 信号来管理 CPU 使用,很简单。值得注意的是,它有点特别,因为没有配置文件,需要调用它来启动进程,或者给它一个 PID。
您可以使用 cgroup 并根据您的要求相应地分配应用程序,一个参考是cgroups-v2