eew*_*nco 7 systemd cgroups linux-kernel
我有两个系统,都运行 OpenSuSE 12.2 (Mantis) 的定制变体,都运行完全相同的内核。我在两个系统上/proc/self/cgroup
或/proc/$$/cgroup
在两个系统上得到两个非常不同的输出:
系统 A(或股票 OpenSuSE 12.1):
cat /proc/self/cgroup
9:perf_event:/
8:blkio:/
7:net_cls:/
6:freezer:/
5:devices:/
4:memory:/
3:cpuacct,cpu:/
2:cpuset:/
1:name=systemd:/user/root/6
Run Code Online (Sandbox Code Playgroud)
系统B:
root@msx:/sys/fs/cgroup> cat /proc/self/cgroup
9:perf_event:/
8:blkio:/
7:net_cls:/
6:freezer:/
5:devices:/
4:memory:/
3:cpuacct,cpu:/system/serial-getty@.service/ttyS0
2:cpuset:/
1:name=systemd:/system/serial-getty@.service/ttyS0
Run Code Online (Sandbox Code Playgroud)
为什么第 1 行不同,为什么第 3 行在一个中出现而在另一个中不存在?我找不到两个系统之间的配置差异。它们运行相同版本的 systemd ( systemd-44-10.1.1.x86_64
)。如果我复制 sysctl 值,它就没有效果。引导选项是相同的。我比较了/etc
、/usr
、 中的所有内容,/lib
看看是否有任何相关的配置差异。(安装了不同的 RPM,但没有一个提供任何系统配置文件,我想我删除了所有自定义 RPM。)
这不仅仅是一个好奇因素,因为在系统 B 上,我们无法创建SCHED_RR
线程,但在系统 A 上,我们可以。如果我设置DefaultController
为NULL
in /etc/systemd/system.conf
,它会起作用,并且第 3 行消失(第 1 行保持不同)。如果我将调用 shell 的进程 ID 写入/sys/fs/cgroup/cpu,cpuacct
:
root@msx:/root> ./a.out
Creation of real-time thread FAILED - Operation not permitted
root@msx:/root> cat /proc/$$/cgroup
9:perf_event:/
8:blkio:/
7:net_cls:/
6:freezer:/
5:devices:/
4:memory:/
3:cpuacct,cpu:/system/sshd.service
2:cpuset:/
1:name=systemd:/system/sshd.service
root@msx:/root> echo $$ > /sys/fs/cgroup/cpu,cpuacct/tasks
root@msx:/root> ./a.out
root@msx:/root> cat /proc/$$/cgroup
9:perf_event:/
8:blkio:/
7:net_cls:/
6:freezer:/
5:devices:/
4:memory:/
3:cpuacct,cpu:/
2:cpuset:/
1:name=systemd:/system/sshd.service
Run Code Online (Sandbox Code Playgroud)
不知道为什么会这样。我的同事对问题的理解并不满意,因为它不需要更改此配置。
内核是 3.4.47,CONFIG_RT_GROUP_SCHED
已启用,CONFIG_AUTOGROUP
已启用(禁用仍然不起作用,但它确实以不同的方式失败)
这是/sf/ask/1428863551/的衍生产品。
有一个 system.conf 配置选项 DefaultControllers,它控制附加到哪些 cgroup 层次结构。默认是cpu。我将其设置为null,/proc/$$$/cgroup不再列出cpuacct,cpu下的getty进程,测试程序可以工作。我不知道为什么相同的配置文件(我使用的是两个系统上都使用的默认配置文件)产生了两个不同的结果。我不确定这是解决问题的最佳方法或它为什么有效。所以我改变了
#DefaultControllers=cpu
Run Code Online (Sandbox Code Playgroud)
到
DefaultControllers=
Run Code Online (Sandbox Code Playgroud)
并/etc/systemd/system.conf
成功了。
归档时间: |
|
查看次数: |
2137 次 |
最近记录: |