DEPRECATION NOTICE:
These scripts are useless on a modern linux with unified cgroup-v2 hierarchy.On a systemd-enabled machine, use "systemd-run --scope" instead.See also: mk-fg/fgtk#cgrc tool
A set of tools to work with cgroup tree and process classification/QoS according to it.
More (of a bit outdated) info can be found in a blog post here.
Main script there - cgconf - allows to use YAML like this to configure initial cgroup hierarcy like this:
path: /sys/fs/cgroup defaults: _tasks: root:wheel:664 _admin: root:wheel:644 # _path: root:root:755 # won't be chown/chmod'ed, if unset freezer: groups: # Must be applied to root cgroup memory.use_hierarchy: 1 # base: # _default: true # to put all pids here initially # cpu.shares: 1000 # blkio.weight: 1000 user.slice: cpu: cfs_quota_us: 1_500_000 cfs_period_us: 1_000_000 tagged: cave: _tasks: root:paludisbuild _admin: root:paludisbuild cpu: shares: 100 cfs_quota_us: 100_000 cfs_period_us: 250_000 blkio.weight: 100 memory.soft_limit_in_bytes: 2G desktop: roam: _tasks: root:users cpu.shares: 300 blkio.weight: 300 memory.soft_limit_in_bytes: 2G de_misc: memory.soft_limit_in_bytes: 700M memory.limit_in_bytes: 1500M vm: quasi: misc: cpu.shares: 200 blkio.weight: 100 memory.soft_limit_in_bytes: 1200M memory.limit_in_bytes: 1500M bench: # Subdir for adhoc cgroups created by user tmp: # Corresponding pw_gid will be used, if "user:" is specified # Specs like "user", ":group:770" or "::775" are all valid. _tasks: 'fraggod:' _admin: 'fraggod:' _path: 'fraggod:' # These will be initialized as dirs with proper uid/gid, but no stuff applied there cpuacct: memory: blkio: # Limits that groups in tmp/ can't transcend cpu.shares: 500 blkio.weight: 500 memory.soft_limit_in_bytes: 300M memory.limit_in_bytes: 500M
And then something like cgrc <tagged-name> <cmd> <args...>
to run anything
inside these (can also be used in shebang with -s, with cmd from stdin, etc).
Other tools allow waiting for threads within some cgroup to finish before proceeding (cgwait), put stuff running there on hold easily (cgfreeze) and run stuff in temp-cgroup, reporting accounting data for it afterwards (cgtime).
cgconf and cgrc turn out to be surprisingly useful still, despite systemd adding knobs to control cgroup resource limits (but not all of them, and spread over lot of small files, which are pain if you need a big picture of e.g. weights) and systemd-run, which hides i/o of whatever it runs in systemd slices.