Tôi có hai hệ thống, cả hai đều chạy các biến thể tùy chỉnh của OpenSuSE 12.2 (Thần chú), cả hai đều chạy chính xác cùng một hạt nhân. Tôi nhận được hai đầu ra rất khác nhau của /proc/self/cgroup
hoặc /proc/$$/cgroup
trên hai hệ thống:
Hệ thống A (hoặc cổ phiếu 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
Hệ thống 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
Tại sao dòng 1 khác nhau và tại sao dòng 3 hiện diện trong một và vắng mặt trong dòng khác? Tôi không thể tìm thấy sự khác biệt về cấu hình giữa hai hệ thống. Họ chạy cùng một phiên bản systemd ( systemd-44-10.1.1.x86_64
). Nếu tôi nhân đôi các giá trị sysctl thì nó không có hiệu lực. Các tùy chọn khởi động là như nhau. Tôi đã so sánh tất cả mọi thứ trong /etc
, /usr
và /lib
để xem nếu có bất kỳ sự khác biệt cấu hình có liên quan. (Có các RPM được cài đặt khác nhau nhưng không có RPM nào nằm trong bất kỳ tệp cấu hình hệ thống nào và tôi nghĩ rằng tôi đã xóa tất cả các RPM tùy chỉnh.)
Đây không chỉ là một yếu tố gây tò mò bởi vì trên Hệ thống B, chúng tôi không thể tạo một SCHED_RR
luồng, nhưng trên Hệ thống A, chúng tôi có thể. Nếu tôi đặt DefaultController
để NULL
ở /etc/systemd/system.conf
, nó hoạt động, và dòng 3 biến mất (dòng 1 vẫn khác nhau). Nó cũng hoạt động nếu tôi viết ID tiến trình của shell gọi vào /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
Không chắc chắn tại sao điều này hoạt động. Các đồng nghiệp của tôi không hài lòng rằng vấn đề được hiểu, vì nó không yêu cầu thay đổi cấu hình này.
Kernel là 3.4.47, CONFIG_RT_GROUP_SCHED
được bật, CONFIG_AUTOGROUP
được bật (vô hiệu hóa vẫn không hoạt động nhưng nó không hoạt động khác nhau)
Đây là một spinoff của /programming/20412336/how-to-check-for-permissions-for-sched-setscheduler .
mount | grep cgroup
mỗi hệ thống là gì?