Preemptive kernel bra för spelservrar?

Permalänk
Medlem

Preemptive kernel bra för spelservrar?

Jag har lagt in 2.6.1 på min bf-server, och kör just nu med preemptive kernel. Det första jag reagerade på var att bf-servern helt plötsligt slukade MYCKET mer processorkraft när den var tom. I 2.4 tog den kanske 0.1-1% när jag just startat den, medans den nu drar runt 15%.

Jag kan inte säga exakt hur stor skillnad det är när det är folk inne på den, då jag inte har exakt koll på hur mycket prestanda den drog i 2.4.

Jag skulle gissa att det är för att preemptive ger servern allt den vill ha hela tiden och servern därmed tar runt 15%. Eller har jag fel? Drar spelservrar mer prestanda med en preemptive kärna eller ser det bara ut som så, och den egentliga prestandan den drar är ungefär lika som i 2.4 när den är fullt belastad?

Någon upplyst själ som har lite koll?

Visa signatur

Huvududator: AMD XP2500 @ 180x11 1980Mhz | Abit AN7 | 2x512 Mb TwinMos DDR400 | Gf4 Ti4200 128MB @ 315/560 | SB Audigy | WinXP Pro SP1
Serverburk: AMD XP1800 | 512 Mb Twinmos PC133 | MSI KT7 Turbo | Debian 3.0 stable (kernel 2.6.3)

Permalänk
Medlem

Om man ska prata hårdvarutermer så innebär preemptive att en process/flöde körs i CPU'n tills en uppsatt tid ( Time slice ) har passerats, ett interrupt skickas och processen/flödet får lämna platsen i CPU'n till nästa process/flöde som står på tur. Om det å andra sidan är en non preemptive så körs en process/flöde i CPU'n tills den själv väljer att lämna den, för till exempel systemanrop eller terminering ( Den är klar ).

Så om jag skulle tolka ditt inlägg så vet jag inte riktigt vad...

Visa signatur

Fame's a bitch, man

Permalänk
Medlem

Vad jag mest undrar över är varför bf-servern grabbar åt sig så jäkla mycket cpu-tid med preempt jämfört med vanligt, och om det är negativt för slutprestandan eller inte.

De två scenariona jag kan gissa är:
1. bf-servern drar mer prestanda hela tiden, och kommer att klara färre spelare än förr.
2. bf-servern drar mer prestanda när den är tom, men kommer att dra ungefär lika många cykler som förr när den är vid full belastning (fullt antal spelare).

Visa signatur

Huvududator: AMD XP2500 @ 180x11 1980Mhz | Abit AN7 | 2x512 Mb TwinMos DDR400 | Gf4 Ti4200 128MB @ 315/560 | SB Audigy | WinXP Pro SP1
Serverburk: AMD XP1800 | 512 Mb Twinmos PC133 | MSI KT7 Turbo | Debian 3.0 stable (kernel 2.6.3)

Permalänk
Medlem

Alltså, jag måste fråga. Är du säker på att du inte körde preemptive när du använde din gamla kernel? I stort sett alla system använder sig av preemtive decision mode och time slices. Att inte göra det skulle innebära stora risker för att ett flöde/en process kan monopolisera CPU'n.

Det borde alltså vara tvärtom tycker jag, att din preemptive kärna låter servern lämna ifrån sig CPU'n fler gånger än i din gamla kernel, om den nu kördes som non-preemptive.

Visa signatur

Fame's a bitch, man

Permalänk
Medlem

det är inte så att du har glömt att mosa in någonting i kerneln? testa att kompilera om utan preemptive, är det lika dant då så vet du ju att det inte är preempt som är snett.

Permalänk
Medlem

Man bör _inte_ köra en kernel i non-preemptive eftersom att då ett program kan använda hela CPU'n till vad den vill, hur länge som helst, tills det att programmet terminerar eller begär t.ex. I/O. Den kan alltså inte kastas ut från CPU'n ( S.k. parlellitet - emulerat att två program körs exakt samtidigt ) när en uppsatt tid har avverkats ( Time Slice ).

Visa signatur

Fame's a bitch, man

Permalänk
Medlem

Min gamla kärna är såvitt jag vet inte preemptive (2.4.18), preemptive fanns väl bara som patchar till 2.4?

Ska testa göra en icke-preemptive 2.6 och kolla vad som händer

Visa signatur

Huvududator: AMD XP2500 @ 180x11 1980Mhz | Abit AN7 | 2x512 Mb TwinMos DDR400 | Gf4 Ti4200 128MB @ 315/560 | SB Audigy | WinXP Pro SP1
Serverburk: AMD XP1800 | 512 Mb Twinmos PC133 | MSI KT7 Turbo | Debian 3.0 stable (kernel 2.6.3)

Permalänk
Medlem

Jag har kikat runt lite och inte riktigt hajjat vad vissa installationer för kernel menar med preemptive. Det sägs ivf att en preemptive kernel är att föredra för spel, om nu en kernel i annat fall körs i non-preemptive vågar jag inte svara på - hela min världsbild blev just sned.

Jag förstår inte varför en kernel inte är satt till ett preemptive decision mode från ruta ett? Någon annan får belysa...

Visa signatur

Fame's a bitch, man

Permalänk
Medlem

Har just kört igång med en 2.6-kernel utan preempt, och bf tar upp lika mycket CPU-cycler... ska gå tillbaka till 2.4 en sväng och kolla den... kan vara nån skillnad med senare bf-patcher eller nåt sånt..

EDIT: Med 2.4.18 så är cpuanvändandet nere på 0-1% igen, alltså¨har det nånting med 2.6 att göra, dock inte med just preemptive som jag trodde. Jag kör vidare med 2.4 ett tag och kollar hur mycket prestanda server använder som mest, sen blir det test av 2.6 för att se om maxanvändandet är detsamma.

Visa signatur

Huvududator: AMD XP2500 @ 180x11 1980Mhz | Abit AN7 | 2x512 Mb TwinMos DDR400 | Gf4 Ti4200 128MB @ 315/560 | SB Audigy | WinXP Pro SP1
Serverburk: AMD XP1800 | 512 Mb Twinmos PC133 | MSI KT7 Turbo | Debian 3.0 stable (kernel 2.6.3)

Permalänk
Medlem

Bewman:
Preemptive kernel betyder att kernel kan avbryta sig själv på samma sätt som en process avbryts när dess timeslice är ute. Vanligtvis körs kernelkod tills den är färdig (cooperative multitasking ungefär). Normala processer körs preemptive även utan "preemptive kernel".

Jag är inte jätteinsatt men efter vad jag förstått så kan kernel preempta (vilket jag härmed inför som bytt verb) vid längre uppehåll som t ex när den väntar på svar från hårddiskar och annan kringutrustning. Kernel kan i dessa fall dyka på intressantare jobb som t ex att spela upp din mp3-fil utan hack.

Permalänk
Medlem

Nu ska jag svara lite Jag kan väll börja med att säga att jag inte är någon expert på operativsystem men jag har läst lite om schemaläggning och hur kärnorna i operativsystem fungerar. Också har jag skrivit en uppsats om 2.6 kärnan så jag har lite koll på hur det fungerar, men jag kan ju fortfarande ha fel så säg till om ni ser något som är direkt fel.

Citat:

Ursprungligen inskrivet av BeWMan
Alltså, jag måste fråga. Är du säker på att du inte körde preemptive när du använde din gamla kernel? I stort sett alla system använder sig av preemtive decision mode och time slices. Att inte göra det skulle innebära stora risker för att ett flöde/en process kan monopolisera CPU'n.

Det borde alltså vara tvärtom tycker jag, att din preemptive kärna låter servern lämna ifrån sig CPU'n fler gånger än i din gamla kernel, om den nu kördes som non-preemptive.

Nej, det lär han inte ha gjort efter som kärnan inte var preemptiv innan 2.6. Däremot så har ju schemaläggaren varit preemptiv rätt länge, dvs ingen process kan ta över hela CPU'n förutom kärnan som inte gick att avbryta.

Citat:

Ursprungligen inskrivet av BeWMan
Man bör _inte_ köra en kernel i non-preemptive eftersom att då ett program kan använda hela CPU'n till vad den vill, hur länge som helst, tills det att programmet terminerar eller begär t.ex. I/O. Den kan alltså inte kastas ut från CPU'n ( S.k. parlellitet - emulerat att två program körs exakt samtidigt ) när en uppsatt tid har avverkats ( Time Slice ).

Se svaret ovanför, det är kärnan som går att avbryta nu. Processer ska inte kunna svälta varandra i gammla kärnan heller.

Citat:

Ursprungligen inskrivet av Dytut
Min gamla kärna är såvitt jag vet inte preemptive (2.4.18), preemptive fanns väl bara som patchar till 2.4?

Ska testa göra en icke-preemptive 2.6 och kolla vad som händer

Japp, helt rätt 2.4 är inte en preemptiv kärna men går säkert att patcha.

Citat:

Ursprungligen inskrivet av BeWMan
Jag har kikat runt lite och inte riktigt hajjat vad vissa installationer för kernel menar med preemptive. Det sägs ivf att en preemptive kernel är att föredra för spel, om nu en kernel i annat fall körs i non-preemptive vågar jag inte svara på - hela min världsbild blev just sned.

Jag förstår inte varför en kernel inte är satt till ett preemptive decision mode från ruta ett? Någon annan får belysa...

Japp, eftersom kärnan kan avbrytas (inte i alla fall iofs men ofta) så kommer du att få en bättre responstid på I/O operationer. Det betyder i princip alla interaktiva program och tunga multimediaapplikationer drar stor nytta av en preemptiv kärna.
2.6 kärnan ska väll vara preemptiv från början? Eller menade du varför dom gammla inte var preemptiva. Det är i sånna fall för att man från början inte har orkat göra koden till kärnan reentrant, dvs så att den kan köras av flera trådar sammtidigt. Och det är ett rätt stort jobb att göra om koden till en kärna så den är säkrad för trådar.
Tidigare så skyddades kärnan av BKL (big kernel lock) som hindrade alla trådar från att göra flera anrop till kärnan sammtidigt men BKL är numera ganska så reducerad och skyddar bara dom allra viktigaste delarna.

Citat:

Ursprungligen inskrivet av Dytut
Har just kört igång med en 2.6-kernel utan preempt, och bf tar upp lika mycket CPU-cycler... ska gå tillbaka till 2.4 en sväng och kolla den... kan vara nån skillnad med senare bf-patcher eller nåt sånt..

EDIT: Med 2.4.18 så är cpuanvändandet nere på 0-1% igen, alltså¨har det nånting med 2.6 att göra, dock inte med just preemptive som jag trodde. Jag kör vidare med 2.4 ett tag och kollar hur mycket prestanda server använder som mest, sen blir det test av 2.6 för att se om maxanvändandet är detsamma.

Det där låter konstigt, iofs så bör inte preemptionen öka din CPU använding alls. Kanske har något med den nya O(1) schemaläggaren att göra men den borde knappast påverka heller. Är du säker på att det är just bf servern som tar cpu tiden? Annars kan det vara så att det är batchprocesser som tar tiden, dom utnyttjar cpu'n mycket effektivare (färre context switches) så du kan få en högre cpu användning (vilket är bra i det här fallet).

Citat:

Ursprungligen inskrivet av Karlsson
Bewman:
Preemptive kernel betyder att kernel kan avbryta sig själv på samma sätt som en process avbryts när dess timeslice är ute. Vanligtvis körs kernelkod tills den är färdig (cooperative multitasking ungefär). Normala processer körs preemptive även utan "preemptive kernel".

Jag är inte jätteinsatt men efter vad jag förstått så kan kernel preempta (vilket jag härmed inför som bytt verb) vid längre uppehåll som t ex när den väntar på svar från hårddiskar och annan kringutrustning. Kernel kan i dessa fall dyka på intressantare jobb som t ex att spela upp din mp3-fil utan hack.

Ja, du är helt rätt ute. Men det är inte bara när kärnan väntar på något man kan avbryta utan nästan alltid om det inte är något väldigt kritiskt som kärnan arbetar med.
Föresten, preempta är ett fint verb Men avbrytas skulle ju iofs fungera lika bra eftersom det är just det som händer.

[Edit] Kom på en sak, det är iofs möjligt att du tjänar på att inte köra med den nya kärnan eftersom den nya schemaläggaren antagligen kommer att tolka din serverprocess som en batchprocess och prioritera ner den. Speciellt om du gör något annat (dvs med tangentbordet eller musen) sammtidigt så riskerar du att andra processer kommer att buntas ihop som batchprocesser. Batchprocesserna får en väldigt lång kvanta (timeslice) på 3sek (för att optimera utnyttjandet av cpu-tid)vilket knappast är en höjdare på en spelserver om den bara stannar i tre sekunder.

Nu har jag iofs inte full koll på hur Ingo's schemaläggare hanterar serverprocesser av den där typen, den kanske inser att det är något som behöver mycket cpu-tid och boostar dens prioritet istället.

Visa signatur

Micael Ehn
ICQ: 2450221 Mail: micke(at-tecken)ehn.nu

Permalänk
Medlem

Jag antar att det är en batchprocess som tar upp cycler ja... för den startar fyra processer, och det är bara en av dom som används och tar upp cycler (är den SMP-kompatibel eller fattar jag fel? ). Eller är jag helt fel ute nu?

Visa signatur

Huvududator: AMD XP2500 @ 180x11 1980Mhz | Abit AN7 | 2x512 Mb TwinMos DDR400 | Gf4 Ti4200 128MB @ 315/560 | SB Audigy | WinXP Pro SP1
Serverburk: AMD XP1800 | 512 Mb Twinmos PC133 | MSI KT7 Turbo | Debian 3.0 stable (kernel 2.6.3)

Permalänk
Medlem

Bra förklaring, Micke. Jag "antog" att kernel och schemaläggaren var samma sak, att om den ena var preempitve så var även den andra det.

Visa signatur

Fame's a bitch, man

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Dytut
Jag antar att det är en batchprocess som tar upp cycler ja... för den startar fyra processer, och det är bara en av dom som används och tar upp cycler (är den SMP-kompatibel eller fattar jag fel? ). Eller är jag helt fel ute nu?

Det där hängde jag inte riktigt med på. Att bara en process tar cputid kan ju iofs bero på att det bar är den som behöver räkna på något annat. Om ett program använder sig av flera processer (eller trådar) så kan det dra nytta av SMP, fast jag tror inte att det hör hit alls. Att använda sig av flera processer kan man göra av flera anledningar, men oftast är det flera saker som behöver göras sammtidigt (vilket blir jobbigt att koda själv). Oftast använder man sig av trådar (vilket inte användaren ser) istället för processer i sånna fall men det finns fall när det kan vara bättre med flera processer också.

Citat:

Ursprungligen inskrivet av BeWMan
Bra förklaring, Micke. Jag "antog" att kernel och schemaläggaren var samma sak, att om den ena var preempitve så var även den andra det.

Jo, det är ju lätt hänt eftersom det är samma ord Föresten så är inte kärnorna i dom windows versionerna som är baserade på dos preemptiva heller.

Visa signatur

Micael Ehn
ICQ: 2450221 Mail: micke(at-tecken)ehn.nu

Permalänk
Medlem
Citat:

Det där hängde jag inte riktigt med på. Att bara en process tar cputid kan ju iofs bero på att det bar är den som behöver räkna på något annat. Om ett program använder sig av flera processer (eller trådar) så kan det dra nytta av SMP, fast jag tror inte att det hör hit alls.

Inte kan den väl dra nytta av SMP heller, om det inte finns fler än en CPU i burken? SMP, Symmetric Multiprocessors, innebär ju stöd för fler än en (1) CPU. Om endast en process tar CPU-tid, alltså helt monopoliserar CPU'n och låter de andra processerna i ready-to-run-lön svälta, visar att din schemaläggare använder ett decision mode som är non-preemptive. Låter som sagt konstigt i så fall, och att det bara ser ut som att en process tar upp all CPU-tid. Troligtvis använder de andra processerna väldigt lite CPU när de väl kommer in, och sen blockas de och/eller swappas när de begär ett I/O-anrop.

Citat:

Att använda sig av flera processer kan man göra av flera anledningar, men oftast är det flera saker som behöver göras sammtidigt (vilket blir jobbigt att koda själv). Oftast använder man sig av trådar (vilket inte användaren ser) istället för processer i sånna fall men det finns fall när det kan vara bättre med flera processer också.

Är det ett program som är rätt tugnt att köra, som behöver emulera egen paralellitet inom programmet brukar det lösas med ett multitrådat program i de flesta fall, ja. Men det är inte ovanligt att ett program är både multitrådat och multiprocessat - alltså att ett program skapar fler än en process, och att det i varje process är fler än en (1) tråd.

Visa signatur

Fame's a bitch, man

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av BeWMan
Inte kan den väl dra nytta av SMP heller, om det inte finns fler än en CPU i burken? SMP, Symmetric Multiprocessors, innebär ju stöd för fler än en (1) CPU. Om endast en process tar CPU-tid, alltså helt monopoliserar CPU'n och låter de andra processerna i ready-to-run-lön svälta, visar att din schemaläggare använder ett decision mode som är non-preemptive. Låter som sagt konstigt i så fall, och att det bara ser ut som att en process tar upp all CPU-tid. Troligtvis använder de andra processerna väldigt lite CPU när de väl kommer in, och sen blockas de och/eller swappas när de begär ett I/O-anrop.

Jojo, självklart så är det en förutsättning att man har flera processorer för att SMP ska fungera. För övrigt så står det nog ungefär samma sak i ditt inlägg som jag har skrivit ovanför. Föresten så kan det ju vara processer som utför något med en viss periodicitet så det behöver ju inte vara så att dom väntar på I/O hellre.

Angående svältande processer så fungerar Ingo Molnars O(1) schemaläggar algoritm såhär: Processer med låg prioroitet och som inte direkt interagerar med användaren läggs ihop och kallas för batchprocesser. Batchprocesser får automatiskt den lägsta prioriteten (+19) och kommer således omedelbart att avbrytas (preempt) om någon process som har högre prioritet behöver cpun. För att minska förlusten vid contextswitch (när man byter mellan processer som vill utnyttja cpun) så får batchprocesserna väldigt långa cputider (3sek) och då kommer alltså ingen annan få köra på en lång tid (om inte något med högre prioritet blir ready).

Visa signatur

Micael Ehn
ICQ: 2450221 Mail: micke(at-tecken)ehn.nu