Puncte:0

Cum să constrângeți procesele interactive care rulează deja cu cgroup2

drapel br

Serverul meu de acasă rulează hardware vechi (Core i5-3450, software RAID1 pe discuri SATA) și deseori are probleme când rulez lucruri cu performanță intensivă, cum ar fi o lucrare de compilare, pe lângă serviciile „normale” care rulează în fundal (DNS, Web, DHCP, e-mail etc. etc.)

Recent, aproape că mi-am distrus sistemul când un job de compilare a ajuns la aproape 100% CPU și, în consecință, așteptarea I/O a crescut vertiginos și practic niciun alt proces nu a mai putut obține resurse gratuite.

Am citit despre cgroup2 și am încercat. Setați opțiunea grub systemd.unified_cgroup_hierarchy=1 și repornit. Am creat un nou cgroup, am activat I/O și controlerul CPU și am putut să arunc PID-ul compilatorului meu în cgroup.procs și am putut să-l pun cu succes în „background” rulând cu doar 5% CPU și fără a interfera cu restul sistemul. Lucrarea de compilare a durat aproape o eternitate (câteva zile), dar nu m-a deranjat. Cu toate acestea, de mai multe ori pe zi, brusc setarea mea cpu.max a dispărut și sistemul a ieșit din nou din echilibru.După ce am citit mai multe despre cgroup și systemd, cred că este pentru că m-am amestecat cu controalele systemd și, practic, systemd părea să resetați setările mele personalizate înapoi la valorile implicite (cpu.max == 'max 1000000'), care apoi a început să-mi distrugă sistemul.

Așa că am citit despre cum să o fac corect.

Mai întâi am pus Delegat=adevarat pentru a mea [email protected] fișier și repornit.

Apoi am încercat să deschid un nou „job” alergând systemd-run --user CPUQuota=5% stress-ng --matrix 0 -t 10m care a funcționat cu succes, adică utilizarea procesorului per proces a fost limitată la 5%/4 per fir de stres!

Pot vedea un director nou mai jos /sys/fs/cgroup/user.slice/user-1000.slice/[email protected] care conține setarea mea:

cat /sys/fs/cgroup/user.slice/user-1000.slice/[email protected]/run-raef937da699b484b80f1bf03bc049f7a.service/cpu.max
5000 100000

și cgroups.procs conține PID-ul corespunzător al stress-ng. Succes!

Acum s-ar putea să vreau să schimb acea setare. Fie pentru că este de asemenea scăzut sau din ce alt motiv. Pot să scriu o altă valoare direct în cpu.max? Sau ar trebui să folosesc un instrument de comandă systemd pentru a face asta? (Care?)

Cealaltă problemă a mea este: dacă nu știu în prealabil că o comandă pe care o voi rula ar putea avea un impact negativ asupra performanței sistemului meu, cum pot să o constrâng mai târziu fără a o ucide și a rula din nou folosind systemd- alerga?

Să presupunem că doar rulez „stress-ng” în shell-ul meu (fără systemd-run), pot vedea că PID este membru al sesiunii normale cgroup

cat /proc/742779/cgroup
0::/user.slice/user-1000.slice/session-2232.scope

Dar acea cgroup este gestionat de systemd, așa că nu trebuie (și nici nu pot cu drepturi normale de utilizator) să scriu în structurile sale cpu.max, io.max etc., corect?

Ce modalități de limitare am pentru procesele care rulează deja în fișierul sesiune-xxx.scop în loc de sub mea [email protected]? Pot „prelua proprietatea” asupra PID 742779 și îl transfer cumva în contul meu [email protected] sesiune?

Știu că există cgcreate, cgclassify, etc. dar acestea sunt doar cgroup1, corect? (Măcar ei îmi dau cgcreate: inițializarea libcgroup a eșuat: Cgroup nu este montat ca urmare.)

Puncte:0
drapel us

așa cum a fost deja scris în altă parte, systemctl set-property(pagina de manual) ar putea fi ceea ce cauți.

cyberschlumpf avatar
drapel br
Multumesc Schtobia! Există, de asemenea, o modalitate de a trece respectivul PID pe care vreau să-l constrâng la un cgroup complet diferit? `systemctl set-property` va afecta întotdeauna întregul cgroup cu toate celelalte PID-uri acolo, corect?
drapel us
Nu sunt sigur. `libcgroup` pare să fie [capabil pentru cgroups v2](https://github.com/libcgroup/libcgroup/issues/12), dar nu am experiență cu el. Și da, `systemctl set-property` *va* afecta întotdeauna întregul cgroup - sau, mai corect, întreaga [unitate](https://www.freedesktop.org/software/systemd/man/systemd.unit.html ).

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.