LUNDS TEKNISKA HÖGSKOLA Schemaläggningsmetodik för multi-core inom Windows 7 OS Vad är scheduling och hur schemalägger Windows OS sina processer? 2015-12-07
1. Inledning Det är ett faktum idag att multi-core processorarkitektur tillhör nästa generations mikroprocessorarkitektur. Antalet kärnor per processor ökar än ständigt, det är inte ovanligt idag med fyra, kanske till och med i vissa fall upp till 12 kärnor per processor i marknadens konsumentdatorer. Flera kärnor förknippas ofta med desto bättre men applikationernas prestanda kommer alltmer förlita/bli begränsad av processorns minnesbandbredd. Att fördela arbetet parallellt mellan de olika kärnorna är en förutsättning för att få den förväntade prestandaökningen från multicore-system. Denna rapport kommer belysa hur realtidsssytemet Windows OS schemalägger sina processer för att göra cacheminnen mer effektiva inom multicore processorarkitektur. Arbetsområdet kommer att avgränsas och fokus kommer att ligga på homogenous multicore-processorarkitektur, d.v.s. att alla kärnor i en processorer är likadana. 2. Sammanfattning I ett enkelt system med en process körandes går tiden åt att vänta på I/O förlorad, föralltid. Ett system med någon sorts schemaläggningsmetod/algoritm tillåter t.ex. att en process använder en kärna, medans nästa kärna väntar på I/O och kan därmed utnyttja och ta tillvara den annars förlorade tidsåtgången i en klockcykel. Det är CPU scheduler ns uppgift att se till att tilldela nya uppgifter, från ett färdigt schema, till CPU:n att exekversa närhelst processorn blir ledig. I schemat finns alla instruktionerna lagrade för vad som skall tilldelas/exekveras härnäst av de olika CPU-kärnorna. I vilken ordning som instruktionerna skall hämtas från schemat behöver inte nödvändigtvis vara FIFO, utan kan vara en komplex algoritm med flera valmöjligheter och med olika justerbara parametrar för varje algoritm. Det är här de olika schemaläggningsmetoderna kommer in i bilden och möjliggör bl.a. kortare tidsåtgång vid exekevering av processer i bl.a. multicore-arkitekturer. Det kommer ständigt nya algoritmer för olika miljöer och situationer för att effektivisera systemet så mycket som möjligt. En kort översiktlig genomgång av två vanligt förekommande schemaläggninsmetoder inom multipleprocessor gås igenom härunder; Asymmetric multiprocessing; Där en kärna är såkallad master och kontrollerar alla aktiviteter och sköter all kernel-kod (kod som är inladdat i ett skrivskyddat område i minnet), medans resterande kärnor kör användar-kod. Detta tillvägagångsätt är relativt simpelt då ingen kritisk data delas sinsemellean kärnorna.
Symmetric multiprocessing (SMP); Här sköter och tilldelar varje kärna sitt eget jobb, antingen från ett delat schema bland kärnorna eller från ett separat schema för varje enskild kärna. I stort sett så stödjer samtliga dagens operativsystem SMP, varav bl.a. Linux, Mac OSX och Windows. SMP-system försöker kontinuerligt hålla processer inom samma processor och dess tillhörande cache med hjälp av affinitet (processor affinity) för att slippa behöva gå till primära minnet som kostar tid. En viktigt aspekt att ej glömma bort är att fördelningen mellan processorerna bör vara balanserad så att inte en kärna körs tomt (idle) medans andra är överbelastade. Då många av dagens system använder sig utav separata scheman för varje enskild processor så behöver dessa tas hänsyn till så att bördan fördelas ( load sharing ) balanserat i de olika scheman. Detta görs antingen med; Push migration; Denna metod flyttar processer periodiskt från överbelastade processorer till mindre belastade. Pull migration; Här tar de processorer som körs på idle processer från andra processorers scheman. Man bör vara observant på att flytta processer sinsemellan olika processorer är emot affinitets-principen och om de inte hanteras varsamt så kan tiden för att balansera systemet gå till spillo då cacheminen måste byggas om på nytt. Ett sätt att komma runt detta problem är att endast tillåta migration av arbetet då det råder en obalans som överstigit en viss tillåten gräns. Att utvärdera olika schemaläggningsmetoder må i vissa fall kräva lite arbete men lönar sig genast i form av ett effektivare system. Första steget är att bestämma sig för en algoritm, samt vilka parameter inställningar är lämpliga för den algoritmen, som är lämplig för en viss driftmiljö och dess kriterier som behöver uppfyllas. När kriterier väl har fastställts kan man börja utvärdera och kolla på olika algoritmer och vilken som är bäst. Hur vet man vilken är bäst? Det är inte alltid självtalande att en metod är bättre än den andra, för att underlätta arbetet bör man använda sig något utav följande metoder; Deterministic modeling; Om arbetsbelastningen ( workload ) är känd så kan man t.ex. beräkna genomsnittliga väntetiden etc. För att sedan jämföra vilken algoritm som är
bäst. Deterministisk modellering går snabbt att använda sig utav, men kräver särskilda kända input -värden. Ej glömma att att resultatet endast gäller för just det fallet med den givna indatan. Queuing models; I många fall finns ingen given data tillgängligt, däremot kan man dra nytta av historisk prestanda-värden som i sin tur kan användas för att beskriva vissa parametrar, bl.a. ankomstintensitet, betjäningsprocess, medelvärde för betjäning etc. Med hjälp av dessa och bl.a. Little s sats kan köteori modelleras och därmed möjliggörs det att beräkna vissa egenskaper hos enskilda scheman/köer. Tyvärr är många av dagens moderna realtidssystem såpass komplexa att även med hjälp av matematiken är det svårt att konstruera formler som tar hänsyn till alla aspekter. Simulations; Ett sätt är att köra datorsimuleringar av de utvalda algoritmerna under olika belastningsförhållande för att avgöra vilken som presterar bäst. Implementation; Det enda sättet att egentligen avgöra hur en utvald schemaläggningsalgoritm presterar är genom att implementera den i ett verkligt system. Denna metod må anses vara bäst i första anspråk det är dock inte alltid möjligt att kunna implementera i en färdig produkt. Även om så skulle vara fallet ska man inte glömma att ett systems arbetsbelastning inte är statisk, utan dynamisk och påverkas t.ex. av nya installerade program, ny hårdvara men även sociala beteenden. Senaste åren har användningen av internet ökat explosionsartat vilket har medfört en vikt av att kunna hantera den ökade trafiken med snabba svarstider. 1 2 Nu vidare till rapportens syfte; Dagens mest använda operativsystem med nära 80% 3 av marknaden är Windows Men hur går Windows 7 tillväga för att schemalägga sina processer inom multi-core system? Windows använder sig utav round robin teknik med multilevel feedback-queue scheduling för att schemalägga prioritet av processer i scheman. Schemaläggaren ändrades i Windows Vista med införandet av ett prioriterad schemaläggare och även ett cycle counter register för moderna processorer för att hålla reda på exakt hur många processorcykler en tråd har exekverat. 1 UIC Department of Computer Science: CPU scheduling, hämtat: 2015-12-05 2 Wikipedia: Scheduling (computing), hämtat: 2015-12-05 3 W3schools: OS Platform Statistics, hämtat: 2015-12-07
Round Robin scheduling påminner till en viss grad om First-Come First-Serve scheduling (FCFS) med skillnaden att CPU bursts är tilldelade med en gräns, såkallat time quantum. När processorn har blivit tilldelad en process så sätts en timer (till det värde som time quantum är inställd på). Om processen har hunnit bearbetas innan timern löper ut så lämnar processen CPU:n precis som vid FCFS. Om timern skulle hinna utlösas innan processen ej hunnit bearbetas färdigt så läggs processen sist i det färdiga schemat. Därmed bibehålls schemat/kön cirkulär enligt Figur 1 nedanför. Figure 1: Round Robin scheduling example Multilevel feedback-queue innebär att separate kön/scheman kan etableras där varje kö kategoriseras in i olika schemaläggnings-algoritmer, där de olika processerna sedan läggs in beroende på vilken algoritm som lämpar sig för just den. Processerna kan även flyttas från en kö till en annan beroende på om processens egenskaper har förändrats och/eller hur länge processen har legat i kön. Multilevel feedback-queue är en av de mest flexibla schemaläggningsmetoderna tillgängliga med anledning av att den går att anpassa efter situation. Dess flexibilitet innebär även en hake metoden är en av de mest komplexa att implementera just på grund av av alla parametrar som går att justera. Även priority preemptive scheduling används flitigt i realtidssystem, och så även i Windows 7. Med denna metod har processer med högre prioritet förtur (preemptive) när schemaläggaren säkerställer vid varje given tidpunkt att processorn verkligen exekverar den process som har högst prioritet bland de processer som ligger i det färdiga schemat. Detta går hand i hand med affinitet som tidigare belystes i denna rapport då man eftersträvade att hålla processer med hög prioritet inne i cacheminnet för att slippa gå till primärminnet. Det är alltså
inte nödvändigt att en process för köras färdigt tills timern (time quantum) har löpt ut då Windows implementerar en preemptive schemaläggare vilket med andra ord innebär att om en process med högre prioritet hamnar i det färdiga schemat, över processer som är redo att exekveras, så kan den befintliga pågående processen avbrytas och processen med högre prioritet exekveras istället innan ens dess tidskvanta har börjat. Gällande prioritetsnivåer så använder Windows 32 olika nivåer (som sträcker sig från 0 t.om. 31 enligt Figur 2 nedanför). Figur 2: Thread priority levels De olika prioritetsnivåerna sätts utifrån två perspektiv; Windows API (Application Programming Interfaces) och Windows kernel. API:n kategoriserar först processerna enligt det väde som processen initiellt har tilldelats. I kernel-koden konverteras processens prioritetsklass till en såkallad base priority enligt en fastställd mapping som inte kan ändras. Slutligen är det värt att påpekas att all schemaläggnings-kod är implementerad i kernel-koden hos Windows operativsystem. Med detta sagt kring vad scheduling är och hur Windows 7 schemalägger sina processer är det uppenbart att val av schemaläggningsmetod spelar en stor avgörande roll på hur t.ex. tidseffektivt ett system är. Vid implementation av verkliga realtidssystem bör man noga utvärdera val av algoritm för just de kriterier som sitt system skall upfylla. 2 4 4 Russinovich Mark, Solomon, David, Ionescu, Alex, 2012: s. 408-429
3. Referenslista Russinovich, Mark, Solomon, David, Ionescu, Alex (2012). Windows Internals Part 1 (6 th edition). Redmond, Washington: Microsoft Press UIC Department of Computer Science: CPU scheduling (hämtat: 2015-12-05) https://www.cs.uic.edu/~jbell/coursenotes/operatingsystems/5_cpu_scheduling.html Wikipedia (2015) Scheduling (computing) (hämtat: 2015-12-05) https://en.wikipedia.org/wiki/scheduling_(computing) W3schools.com (2015) OS Platform Statistics (hämtat: 2015-12-07) http://www.w3schools.com/browsers/browsers_os.asp