Linux 限制进程 CPU 核数
Linux 提供多种方法来限制进程使用的 CPU 核数,从而提高系统性能和公平性。
以下是一些关键要素:
1. CPU 限制组(cgroups)
cgroups 是 Linux 内核的一个特性,它允许用户创建和管理资源组,其中包括 CPU 使用限制。
您可以在系统上创建多个 cgroup 等级,并为每个等级分配不同的 CPU 分配。
2. cgroup 命令行工具
Linux 提供了几个用于管理 cgroup 的命令行工具,其中包括:
- cgcreate:创建新的 cgroup
- cgexec:在指定的 cgroup 中执行命令
- cgget:显示 cgroup 的属性
- cgset:设置 cgroup 的属性
3. cgroup 配置文件
在 /sys/fs/cgroup 目录下,每个 cgroup 都有一个配置文件。
这些文件包含有关 cgroup 属性的信息,包括 CPU 限制。
4. CPU 份额 (cpu.shares)
CPU 份额是一个整数,它指定一个 cgroup 相对于其他 cgroup 获得 CPU 时间的权重。
值为 1024 表示该 cgroup 应该获得平均 CPU 时间的 1%。
5. CPU 限制 (cpu.cfs_quota_us)
CPU 限制指定进程或 cgroup 在给定的微秒时间段内可以使用的最大 CPU 时间。
例如,将 cpu.cfs_quota_us 设置为 100000 意味着进程或 cgroup 每秒最多可以使用 100 毫秒的 CPU 时间。
6. CPU 实时优先级 (cpu.rt_priority)
CPU 实时优先级用于指定进程的实时优先级。
更高的优先级将使进程在 CPU 分配时获得更高的优先级。
示例:
以下示例创建名为 mycgroup 的 cgroup 并将进程 myprocess 的 CPU 份额限制为 512:
sudo cgcreate -g cpu:mycgroup
sudo cgexec -g cpu:mycgroup myprocess
sudo cgset -r cpu.shares=512 mycgroup
以下示例将进程 myprocess 的 CPU 限制设置为每秒 200 毫秒:
sudo cgcreate -g cpu:mycgroup
sudo cgexec -g cpu:mycgroup myprocess
sudo cgset -r cpu.cfs_quota_us=200000 mycgroup