Ich habe zwei Systeme, auf denen beide angepasste Varianten von OpenSuSE 12.2 (Mantis) ausgeführt werden und auf denen genau derselbe Kernel ausgeführt wird. Ich bekomme zwei sehr unterschiedliche Ausgänge von /proc/self/cgroup
oder /proc/$$/cgroup
auf den beiden Systemen:
System A (oder eine OpenSuSE 12.1-Aktie):
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
System 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/[email protected]/ttyS0
2:cpuset:/
1:name=systemd:/system/[email protected]/ttyS0
Warum unterscheiden sich die Zeilen 1 und warum ist die Zeile 3 in der einen vorhanden und in der anderen nicht vorhanden? Ich kann keine Konfigurationsunterschiede zwischen den beiden Systemen feststellen. Sie führen dieselbe Version von systemd ( systemd-44-10.1.1.x86_64
) aus. Wenn ich die sysctl-Werte dupliziere, hat dies keine Auswirkung. Die Startoptionen sind gleich. Ich habe alles in /etc
, verglichen /usr
und /lib
festgestellt, ob es relevante Konfigurationsunterschiede gibt. (Es gibt verschiedene installierte RPMs, aber keine, die Systemkonfigurationsdateien ablegen, und ich glaube, ich habe alle benutzerdefinierten RPMs entfernt.)
Dies ist mehr als ein Kuriositätsfaktor, da wir auf System B keinen SCHED_RR
Thread erstellen können, auf System A jedoch. Wenn ich festgelegt , DefaultController
um NULL
in /etc/systemd/system.conf
, es funktioniert, und Linie 3 verschwindet (Linien 1 bleiben unterschiedlich). Es funktioniert auch, wenn ich die Prozess-ID der aufrufenden Shell in Folgendes schreibe /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
Ich bin mir nicht sicher, warum das funktioniert. Meine Kollegen sind nicht zufrieden, dass das Problem verstanden wird, da diese Konfigurationsänderung nicht erforderlich sein sollte.
Kernel ist 3.4.47, CONFIG_RT_GROUP_SCHED
ist aktiviert, CONFIG_AUTOGROUP
ist aktiviert (das Deaktivieren funktioniert immer noch nicht, aber es schlägt anders fehl)
Dies ist eine Ausgründung von /programming/20412336/how-to-check-for-permissions-for-sched-setscheduler .
quelle
mount | grep cgroup
auf jedem System?Antworten:
Es gibt die Konfigurationsoption system.conf, DefaultControllers, die steuert, an welche Gruppenhierarchien angehängt wird. Standardmäßig ist es CPU. Ich habe es auf null gesetzt und / proc / $$$ / cgroup listet den getty-Prozess nicht mehr unter cpuacct, cpu auf und das Testprogramm funktioniert. Warum dieselbe Konfigurationsdatei - ich habe die auf beiden Systemen verwendete Standardeinstellung verwendet - zwei unterschiedliche Ergebnisse erzielt hat, weiß ich nicht. Ich bin mir nicht sicher, ob dies der beste Weg ist, um das Problem zu lösen oder warum es funktioniert. Also habe ich mich verändert
zu
in
/etc/systemd/system.conf
und es funktioniert.quelle