首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使cpuset的cpuset.cpu_exclusive功能正确工作

如何使cpuset的cpuset.cpu_exclusive功能正确工作
EN

Stack Overflow用户
提问于 2019-04-04 02:33:35
回答 1查看 2.8K关注 0票数 2

我试图使用内核的cpuset来隔离我的进程。为了获得这一点,我遵循内核文档 库塞斯的说明(基本用法),但是它在我的环境中不起作用。

我尝试过在我的centos7服务器和我的ubuntu16.04工作pc,但都没有工作。

  1. centos内核版本:
代码语言:javascript
复制
[root@node ~]# uname -r
3.10.0-327.el7.x86_64
  1. ubuntu内核版本:
代码语言:javascript
复制
4.15.0-46-generic

我所做的尝试如下。

代码语言:javascript
复制
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函数,并且所有的cpus都没有被其他的子程序排除。

通过使用ps -o pid,psr,comm -p $PID,我可以确认如果我不关心cpu_exclusive,cpus可以分配给某些进程。但我也证明了,如果没有设置cpu_exclusive,也可以将相同的cpus分配给其他进程。

我不知道是不是因为错过了一些预置。

我所期望的是“使用cpuset来获得cpus的独家使用”。任何男孩都能给出任何线索吗?

非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-29 14:04:19

我相信这是对cpu_exclusive旗帜的错误理解,就像我所做的那样。下面是https://www.kernel.org/doc/Documentation/cgroup-v1/cpusets.txt文档,引用如下:

代码语言:javascript
复制
If a cpuset is cpu or mem exclusive, no other cpuset, other than
a direct ancestor or descendant, may share any of the same CPUs or
Memory Nodes.

因此,您拥有bash: echo: write error: Invalid argument的一个可能原因是启用了其他cgroup cpuset,并且它与您的echo 1 > my_cpuset/cpuset.cpu_exclusive操作相冲突。

请运行find . -name cpuset.cpus | xargs cat列出所有cgroup的目标cpus。

假设您有12个cpus,如果要设置cpu_exclusive of my_cpuset,则需要仔细修改所有其他cgroup以使用cpus,例如。然后将my_cpuset的cpus设置为8-11.在完成所有这些cpus配置之后,您可以将cpu_exclusive设置为1。

但是,其他进程仍然可以使用cpu 8-11.只有属于的任务其他cgroup才不会使用cpu 8-11。

对我来说,我有一些码头集装箱运行,这使我无法设置我的cpuset cpu_exclusive

对于内核文档,我认为不可能完全由cgroup本身使用cpus。有一种方法(我知道这种方法是在生产中运行的)是我们隔离cpu,并自行管理cpu关联/cpuset。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55507022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档