2017-04-24 8 views
1

ulimit -t 5을 사용하여 프로그램을 CPU 시간의 5 초로 제한하는 스크립트가 있습니다.cgroup의 총 CPU 사용량 제한

이 프로그램은 이제 자식을 생성하므로 대신 cgroups를 사용하므로 프로세스에 의해 사용 된 CPU와 그 자식을 제한 할 수 있습니다. 그러나 cgroup의 CPU 사용량에 대한 엄격한 상한값을 설정하는 방법을 찾을 수 없습니다.

+0

동일한 문제가 있었지만 허용 된 대답이 저에게 효과적이지 않았습니다. https://stackoverflow.com/questions/45555186에서 대안을 찾아 보았습니다. – Flogo

답변

2

Cgroup은 프로세스를 중단하지 않지만 특정 기간마다 런타임을 제한합니다. cpu.cfs_period_us에 대해 매우 오랜 기간을 사용하고 해당 기간 이후에 cgroup 작업 목록을 확인할 수 있습니다. 작업이 여전히 실행하는 경우, 수동으로 사용하여 죽일 :

kill -9 $(cat /sys/fs/cgroup/.../tasks)

cpu.cfs_period_us

하는 방법에 대한 ("우리"여기에 표현 μS,)는 마이크로 시간의 기간을 지정합니다 정기적으로 CPU 리소스에 대한 cgroup의 액세스가 재 할당되어야합니다. cgroup의 작업이 매 초당 0.2 초 동안 단일 CPU에 액세스 할 수 있어야하는 경우 cpu.cfs_quota_us를 200000으로 설정하고 cpu.cfs_period_us를 1000000으로 설정합니다. cpu.cfs_quota_us 매개 변수의 상한선은 1 초이고 하위 값은 1 초입니다. 한계는 1000 마이크로 초입니다.

cpu.cfs_quota_us

은 (cpu.cfs_period_us에 의해 정의 된대로) cgroup에있는 모든 작업을 한 기간 동안 실행할 수있는 ("우리"여기에 표현 μS) 마이크로 총 시간을 지정합니다. cgroup의 작업이 할당량에 지정된 시간을 모두 사용하는 즉시 해당 기간에 지정된 시간 동안 조절되며 다음 기간까지 실행되지 않습니다. cgroup의 작업이 매 초당 0.2 초 동안 단일 CPU에 액세스 할 수 있어야하는 경우 cpu.cfs_quota_us를 200000으로 설정하고 cpu.cfs_period_us를 1000000으로 설정합니다. 할당량 및 기간 매개 변수는 CPU 단위로 작동합니다. 프로세스가 2 개의 CPU를 완전히 활용할 수있게하려면 예를 들어 cpu.cfs_quota_us를 200000으로 설정하고 cpu.cfs_period_us를 100000으로 설정하십시오. cpu.cfs_quota_us의 값을 -1로 설정하면 cgroup이 CPU 시간 제한을 준수하지 않음을 나타냅니다. 이것은 모든 cgroup의 기본 값이기도합니다 (루트 cgroup 제외).