Hoe kan ek cgroups skep en gebruik as 'n nie-wortelgebruiker?

Kan ek byvoorbeeld heeltemal as 'n nie-wortelgebruiker:

  • skep 'n cgroup met toegang tot een SVE
  • skep 'n nuwe proses in daardie cgroup

?

Ek het eers hier gevra , maar ek het nie 'n volledige antwoord gekry nie. Ek het ook gevra op stackoverflow , maar die vraag is gesluit as buite die onderwerp.

answer

Jy kan dit nie as 'n normale gebruiker doen nie. Maar jy kan 'n cgroup as root opstel en dit konfigureerbaar maak deur jou gebruiker.

As jy nie reeds die verstek cgroups beheerders het gemonteer deur bv systemd:

$ sudo mount -t tmpfs cgroup_root /sys/fs/cgroup
$ sudo mkdir /sys/fs/cgroup/cpuset
$ sudo mount -t cgroup -o cpuset cpuset /sys/fs/cgroup/cpuset

Skep 'n cgroep:

$ sudo mkdir /sys/fs/cgroup/cpuset/${USER}
$ sudo chown -R ${USER} /sys/fs/cgroup/cpuset/${USER}

U kan nou die konfigurasie van u cgroup as 'n normale gebruiker verander:

$ echo 0-3 > /sys/fs/cgroup/cpuset/${USER}/cpuset.cpus

Voeg 'n proses by daardie groep:

$ ./my_task &
$ echo $! > /sys/fs/cgroup/cpuset/${USER}/tasks

Of skep 'n subgroep:

$ mkdir /sys/fs/cgroup/cpuset/${USER}/subgroup
$ echo 0-1 > /sys/fs/cgroup/cpuset/${USER}/subgroup/cpuset.cpus
$ ./my_other_task &
$ echo $! > /sys/fs/cgroup/cpuset/${USER}/subgroup/tasks

As jy Ubuntu gebruik, kan jy (die wortelgebruiker) cgroup-lite installeer en byvoeg wat jy nodig het by /etc/cgconfig.conf, insluitend watter gebruiker(s) die cgroup se konfigurasie kan verander. Dit loop op selflaai.

As u nie (die wortelgebruiker) dit nie doen nie, kan u u eie skrip byvoeg om tydens opstart te loop.

Daar is 'n reeks artikels oor LWN oor cgroups, sien deel 1 , of kyk deur die soektog daar. Systemd bevat 'n stel helpers om (prosesse ingehok deur) cgroups te bestuur.

In teorie behoort jy in staat te wees om prosesse in tydelike (tydelike) c-groepe uit te voer, bv

$ systemd-run --user --scope /bin/bash

maar in werklikheid systemdis dit gebreek in baie Linux-verspreidings en dit misluk met iets soos

polkitd(authority=local)[1300]: Registered Authentication Agent for unix-process:10428:26722972 (system bus name :1.478 [/usr/bin/pkttyagent --notify-fd 5 --fallback], object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_DK.utf8)
systemd[2601]: run-rbe547d13ad2c41d7857ea9e660e51ab9.scope: Failed to add PIDs to scope's control group: Permission denied
systemd[2601]: run-rbe547d13ad2c41d7857ea9e660e51ab9.scope: Failed with result 'resources'.
systemd[2601]: Failed to start /bin/bash.
polkitd(authority=local)[1300]: Unregistered Authentication Agent for unix-process:10428:26722972 (system bus name :1.478, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_DK.utf8) (disconnected from bus)

Ek weet nie die presiese rede vir hierdie mislukking nie, maar totdat hierdie fout reggestel is, het jy worteltoegang nodig om beheergroepe te kan opstel ( cgroup).