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.