Alternativ för systemresursallokering

Frågor kring allt som rör systemadministration.
Post Reply
erik_persson
Posts: 1474
Joined: 29 August 2002, 15:19

Alternativ för systemresursallokering

Post by erik_persson » 25 April 2010, 14:09

Jag undrar vilka alternativ som ni känner för systemresursallokering till vissa processer, tex att tilldela en, eller en grupp, processer viss del av minnet, viss del av CPU-tiden etc.

Jag har redan några olika alternativ för att handa detta, men jag behöver fler förslag.

/erik

User avatar
kjell-e
Posts: 2817
Joined: 21 December 2002, 16:27
Location: Linköping
Contact:

Re: Alternativ för systemresursallokering

Post by kjell-e » 25 April 2010, 15:18

Låter som att du vill titta på ulimit i ditt kommandoskal och /etc/security/limits.conf och /etc/security/limits.d/

För det var väl mängd minne som ett program ska få använda du vill kunna styra över respektive hur mycket CPU en process ska gå använda?

erik_persson
Posts: 1474
Joined: 29 August 2002, 15:19

Re: Alternativ för systemresursallokering

Post by erik_persson » 25 April 2010, 16:18

kjell-e wrote:Låter som att du vill titta på ulimit i ditt kommandoskal och /etc/security/limits.conf och /etc/security/limits.d/

För det var väl mängd minne som ett program ska få använda du vill kunna styra över respektive hur mycket CPU en process ska gå använda?
Tackar!!
Det är en av de saker som jag redan tittat på, även om jag vad gäller minnesbegränsning inte hunnit undersöka det ordenligt ännu (tex begränsning av RSS i relation till totalt minne osv, overcommits etc). Jag har inte heller hunnit se vad som händer om en process försöker ta mer minne än den tilldelats (vilket naturligtvis delvis kan ha med overcommits att göra). En sak som kan vara trevlig med limits är att inte oom_kill nödvändigtvis måste användas, och oom_kill ställer till problem med tex cgroups (se nedan).

För cpu:er så är problemet med limits att begränsningen för cpu-tiden anges i just tid, och att det är inte är helt trivialt att använda just total cpu-tid för begränsning. Jag vill hellre ha en begränsning i andel av CPU-tid, eller ett prioriteringssystem för att handha detta (nice/renice), fast gärna något hårdare.
Jag är också intresserad av system som omöjliggör att en viss process får för lite cpu-tid, oavsett hur många andra processer som kör på systemet. Jag har svårt att se att detta skulle gå att åstadkomma med nice/renice och den vanliga fair schedulern.

I detta sammanhang kan FAIR_GROUP_SCHED med tex CGROUPS användas (CGROUPS kan för övrigt också användas för minne), eller så kan naturligtvis processen sättas i SCHED_FIFO eller SCHED_RR, men det medför tyvärr en risk för att den prioriterade processen svälter andra processer. Det går iofs att minska risken för detta genom att sätta sched_rt_period_us och sched_rt_runtime_us, men rt-processer kan hur som helst svälta varandra.
CGROUPS verkar förvisso ha en lösning även för detta (genom en möjlighet att sätta dessa båda variabler per processgrupp), men det är markerat som inte helt stabilt och jag har inte hunnit testa detta ännu.
Vad gäller processer i SCHED_OTHER så motsvarar FAIR_GROUP_SCHED närmast renice fast på gruppnivå av processer, men det är ändå en fair scheduler. Jag har inte ännu hunnit testa hur detta fungerar med ett stort antal processer i en lågprioriterad grupp, men de preliminära testerna verkar lovande. Det går iofs inte att komma bort från utan att använda någon av SCHED_FIFO- och SCHED_RR-scheduleringsprinciperna.
För CGROUPS finns patchar, tex så har vserver och openvz sådana, för att sätta hårdare begränsningar för andel av CPU-tid.

Än en gång, tack.

Fler förslag?

/erik

User avatar
kjell-e
Posts: 2817
Joined: 21 December 2002, 16:27
Location: Linköping
Contact:

Re: Alternativ för systemresursallokering

Post by kjell-e » 25 April 2010, 17:18

I /etc/security/limits.conf och /etc/security/limits.d har du även:

# - nice - max nice priority allowed to raise to values: [-20, 19]
# - rtprio - max realtime priority

Då har du en viss möjlighet att styra hur mycket en process får lasta ner systemet. Men som du säger själv så är nice/renice långt ifrån perfekt.

erik_persson
Posts: 1474
Joined: 29 August 2002, 15:19

Re: Alternativ för systemresursallokering

Post by erik_persson » 26 April 2010, 18:37

Det finns några problem med limits vad jag förstår.
Rätta mig gärna om jag har fel.

Ett problem är att det inte går att ändra limits när processen är startad.

Ett annat problemet är att många limits gäller per process. Sätter du tex en as limit för en process och forkar denna så får de två processerna vardera samma limit, dvs totalt kan dubbelt så mycket minne allokeras. För att komma runt detta kan antalet processer per användare begränsas med limits, men det hade onekligen varit snyggare om det gått att sätta en limit för en användare så att om bara 1 process kördes så hade denna fått tex 100 mb minne medan 2 processer då tillsammans kunnat allokera också 100mb minne. Så verkar det dock inte vara. Begränsningen är per process och sedan går det att begränsa antalet processer.

Problemet med security/limits.conf är att denna är kopplad pam och till processer som har pam-stöd.
Vad jag förstår så går det inte att använda limits.conf för tex apache (som å andra sidan har visst stöd för att sätta limits i conf-filer) etc.

Å andra sidan tillför inte pam limits så mycket utöver setrlimit, så det är möjligt att använda en simple wrapper för att starta processer med limitsstöd.

/erikp

Post Reply