#!/bin/bash
sudo cgdelete cpu:/testgroup
sudo cgcreate -g cpu:/testgroup
# Test with and without the line below
sudo cgset -r cpu.cfs_quota_us=50000 testgroup
# See how much time do we need to complete the operation
echo "Starting CPU intensive operations"
date
stress-ng --qsort 1 --qsort-ops 200 &
sleep 1
PID=$(pgrep stress-ng-qsort)
sudo cgclassify -g cpu:testgroup $PID
wait
echo "Finished"
date
The results with cfs_quota_us=50000 are below. The top utility shows about 50% CPU usage.
➜ ./cpu_stress.sh
Starting CPU intensive operations
czw, 22 wrz 2022, 17:41:33 CEST
stress-ng: info: [3345901] defaulting to a 86400 second (1 day, 0.00 secs) run per stressor
stress-ng: info: [3345901] dispatching hogs: 1 qsort
stress-ng: info: [3345901] successful run completed in 33.05s
Finished
czw, 22 wrz 2022, 17:42:06 CEST
If the line is commented out (so no limitations apply), top shows 100% CPU usage and the output is:
➜ ./cpu_stress.sh
Starting CPU intensive operations
czw, 22 wrz 2022, 17:42:53 CEST
stress-ng: info: [3348203] defaulting to a 86400 second (1 day, 0.00 secs) run per stressor
stress-ng: info: [3348203] dispatching hogs: 1 qsort
stress-ng: info: [3348203] successful run completed in 15.98s
Finished
czw, 22 wrz 2022, 17:43:09 CEST
The corresponding file entries in sysfs:
$ cat /sys/fs/cgroup/cpu/testgroup/cpu.cfs_quota_us
50000
$ cat /sys/fs/cgroup/cpu/testgroup/tasks
3353629