Egy process erőforrásainak korlátozása (elsősorban CPU, de mem, disk is mint később kiderült)

Fórumok

Az foglalkoztat, hogy hogyan tudom egy process CPU felhasználását a kívánt szintre korlátozni. Ha pl. desktop gépen, amin dolgozni is szeretnék futattok egy CPU zabáló programot, akkor hogyan tudnám mondjuk 50%-ra korlátozni az adott program CPU használatát?

A nice használata itt nem segített semmit.

Ami eddig eszembe jutott, az a virtuális gép indítása volt mondjuk 1 processzormaggal, de ennél biztosan van egyszerűbb, elegánsabb megoldás is...

Hozzászólások

Van egy olyan program, amelynek az a neve, hogy cpulimit.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Mikor én memóriahasználatot akartam korlátozni, a cgroups felé irányítottak el. Bevált.

Természetesen megoldja, s a kérdés nem tűnik túl indokoltnak. Lehet, félreértik egyesek a CPU használatot. Ha van egy process, amelyben nincs sleep() - például a fordítás ilyen -, akkor az 1 mag 100%-át kihasználja. Amennyiben két ilyen process fut 1 magon, oszlik köztük az idő, s egyenként 50% lesz a CPU használat. (Az overhead-et most elhanyagoltam.)

Tehát szó sincs arról, hogy az a process, amelyik egyedül elviszi a CPU idő 100%-át, nem hagy majd más process-t futni. Igény esetén osztozni fognak az időn.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Köszönöm a válaszokat, a cpulimit hozott megoldást a kérdésemre.

Egyes feladatoknál a rendszer válaszideje zavaróan lecsökkent, a load 5-6 körülire felszökött.

A sudo cpulimit -p processid -l80
paranccsal a probléma megoldódott, a load nem kerül 1 fölé (2 CPU mag van) és az asztali rendszer (számomra) észlelhető válaszidő csökkenés nélkül működik.

Szinte biztos, hogy igazad van, mert hosszasabb próbálgatásnál egy nagyobb file feldolgozásánál (awk-val) a disk io tűnik a legszűkebb keresztmetszetnek és így is elszállt a load az egekbe :-(

Egy process disk io illetve memória felhasználása korlátozható valahogy hasonlóan elegánsan mint a cpu használat a cpulimittel?