【发布时间】:2019-08-25 16:23:40
【问题描述】:
我正在尝试使用内核的cpuset 来隔离我的进程。为了获得这个,我按照内核文档cpusets 中的说明(2.1 Basic Usage),但是,它在我的环境中不起作用。
我在我的 centos7 服务器和我的 ubuntu16.04 工作电脑上都试过了,但都没有工作。
- centos 内核版本:
[root@node ~]# uname -r
3.10.0-327.el7.x86_64
- ubuntu 内核版本:
4.15.0-46-generic
我尝试过的如下。
root@Latitude:/sys/fs/cgroup/cpuset# pwd
/sys/fs/cgroup/cpuset
root@Latitude:/sys/fs/cgroup/cpuset# cat cpuset.cpus
0-3
root@Latitude:/sys/fs/cgroup/cpuset# cat cpuset.mems
0
root@Latitude:/sys/fs/cgroup/cpuset# cat cpuset.cpu_exclusive
1
root@Latitude:/sys/fs/cgroup/cpuset# cat cpuset.mem_exclusive
1
root@Latitude:/sys/fs/cgroup/cpuset# find . -name cpuset.cpu_excl
usive | xargs cat
0
0
0
0
0
1
root@Latitude:/sys/fs/cgroup/cpuset# mkdir my_cpuset
root@Latitude:/sys/fs/cgroup/cpuset# echo 1 > my_cpuset/cpuset.cpus
root@Latitude:/sys/fs/cgroup/cpuset# echo 0 > my_cpuset/cpuset.mems
root@Latitude:/sys/fs/cgroup/cpuset# echo 1 > my_cpuset/cpuset.cpu_exclusive
bash: echo: write error: Invalid argument
root@Latitude:/sys/fs/cgroup/cpuset#
它只是打印了错误bash: echo: write error: Invalid argument。
但是,谷歌一下,我无法得到正确的答案。
正如我上面粘贴的,在我操作之前,我确认cpuset根路径已经启用了cpu_exclusive功能,并且所有cpu都没有被其他子cpuset排除。
通过使用ps -o pid,psr,comm -p $PID,我可以确认如果我不在乎cpu_exclusive,CPU 可以分配给某个进程。但是我也证明了如果不设置cpu_exclusive,同样的cpu也可以分配给其他进程。
不知道是不是因为遗漏了一些预设。
我期望的是“使用cpuset获得cpus的独占使用权”。哪位大佬能提供点线索吗?
非常感谢。
【问题讨论】:
-
你达到你的目标了吗(使用cpuset获得cpus的独占使用)?我在Ubuntu16.04做了同样的测试,我发现仍然有一些用户进程在我想要的核心上运行隔离。我已经将这些用户进程设置为另一个 cpuset。任何提示?谢谢。
标签: linux-kernel ubuntu-16.04 centos7 cgroups cpuset