CPUShares 속성을 사용할 때 이 시스템 서비스 리소스가 제한되지 않는 이유는 무엇입니까?

CPUShares 속성을 사용할 때 이 시스템 서비스 리소스가 제한되지 않는 이유는 무엇입니까?

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예상대로 idiotCPU 사용률이 100%였습니다. 이제 따르면협회, 다음을 통해 서비스 리소스를 제한할 수 있어야 합니다.

sudo systemctl set-property idiot.service CPUShares=100
sudo systemctl daemon-reload
sudo systemctl restart idiot.service

이렇게 했는데 top... 그래도 idiotCPU 사용률이 100%라고 나오네요! 내가 뭘 잘못했나요?

CPUShares=100참고: 유닛 파일에 추가도 시도했지만 소용이 없었습니다.

답변1

man systemd.resource.control에 따르면 CPUShares=weight다음과 같이 작동합니다.

사용 가능한 CPU 시간은 CPU 시간 공유 가중치를 기반으로 슬라이스 내의 모든 장치에 분배됩니다.

동일한 슬라이스의 다른 구성원에 대해 아무 것도 알려주지 않았으므로 다른 구성원이 없으므로 서비스가 모든 CPU를 사용하는 것이 적절하다고 가정합니다.

CPU 제어로 플레이하고 싶다면 시도해 보세요 CPUQuota=20%. 명령은 다음과 같이 기록됩니다.

CPUQuota=20%는 실행 중인 프로세스가 CPU에서 CPU 시간의 20%를 초과하지 않도록 합니다.

관련 정보