cgroups와 systemd를 사용하여 손을 더럽힐 수 있도록 제가 생각할 수 있는 가장 어리석은 C 프로그램(단지 타이머와 spinlock while 루프)을 작성하고 이름을 지정하고 idiot
다음 idiot.service
파일을 첨부했습니다 /sys/fs/systemd/system/
.
[Unit]
Description=Idiot - pretty idiotic imo
[Service]
Type=simple
ExecStart=/path/to/idiot
User=bruno
CPUShares=100
[Install]
WantedBy=default.target
그런 다음 이렇게 했는데 sudo systemctl start idiot.service; top | grep idiot
예상대로 idiot
CPU 사용률이 100%였습니다. 이제 따르면협회, 다음을 통해 서비스 리소스를 제한할 수 있어야 합니다.
sudo systemctl set-property idiot.service CPUShares=100
sudo systemctl daemon-reload
sudo systemctl restart idiot.service
이렇게 했는데 top
... 그래도 idiot
CPU 사용률이 100%라고 나오네요! 내가 뭘 잘못했나요?
CPUShares=100
참고: 유닛 파일에 추가도 시도했지만 소용이 없었습니다.
답변1
man systemd.resource.control
에 따르면 CPUShares=weight
다음과 같이 작동합니다.
사용 가능한 CPU 시간은 CPU 시간 공유 가중치를 기반으로 슬라이스 내의 모든 장치에 분배됩니다.
동일한 슬라이스의 다른 구성원에 대해 아무 것도 알려주지 않았으므로 다른 구성원이 없으므로 서비스가 모든 CPU를 사용하는 것이 적절하다고 가정합니다.
CPU 제어로 플레이하고 싶다면 시도해 보세요 CPUQuota=20%
. 명령은 다음과 같이 기록됩니다.
CPUQuota=20%는 실행 중인 프로세스가 CPU에서 CPU 시간의 20%를 초과하지 않도록 합니다.