Lunds Tekniska Högskola Campus Helsingborg DATORARKITEKTURER MED OPERATIVSYSTEM EITF60 RAPPORT Hyper-Threading i Intelprocessorer 4 december 2017 Rasmus Hanning IDA2
Sammanfattning Det har sedan den första processorn skapades funnits ett intresse för en ökad processorhastighet och prestanda. En teknik för att uppnå detta kallas Hyper-Threading och är en teknik som gör att varje fysisk processorkärna kan ses och utnyttjas som två logiska processorkärnor, på bekostnaden av en minimal mängd extra hårdvara. Schemaläggningen av trådar för Hyper-Threading sköts av operativsystemets egen trådschemaläggare och fungerar identiskt med schemaläggningen för en processor med flera fysiska kärnor. Prestandamässigt så gäller det att prestandan generellt ökar lite, men för att kunna dra full nytta av Hyper-Threading så krävs att mjukvaran är optimerad för att exekveras med tekniken.
Introduktion I samband med jakten på allt snabbare datorsystem så har många olika möjliga förbättringar i processorer identifierats, bland annat en ökad klockfrekvens, högre instruktionsparallellism och förbättrad cachedesign. Problemet med dessa är att de antingen tar upp en stor snittyta på hårdvaran eller att de ökar strömförbrukningen för mycket. Istället så försöker man hitta tekniker för att öka prestandan utan att öka snittytan eller strömförbrukningen så mycket och en av dessa kallas Hyper-Threading. Hyper-Threading introducerades först år 2002 av Intel på deras Xeon-processor samt i Pentium 4-serien och hade därefter ett uppehåll fram tills 2008 då det kom tillbaka i Nehalemarkitekturen (Core i7). Tekniken liknar till viss del en teknik som kallas Symmetric Multiprocessing, men skiljer sig huvudsakligen i hårdvara och kostnad (Marr et. al 2002). Symmetric Multiprocessing (SMP) innebär en arkitektur där man har flera fysiska processorkärnor som alla har en egen uppsättning av cacheminnen, register och exekveringsenheter men som delar primärminne, se figur 1. Detta innebär att processorn kan arbeta med flera trådar parallellt men på bekostnad av en större mängd extra hårdvara och ökad strömförbrukning (Marr et. al 2002). Figur 1 (Marcraft International 2005). Överblick över en processorarkitektur som stödjer SMP. Hyper-Threading är Intels proprietära version av en teknik som kallas Simultaneous Multithreading (SMT). Det minsta kravet för att ett operativsystem ska kunna utnyttja SMT är att det redan stödjer Symmetric Multiprocessing. SMT innebär att man försöker efterlikna funktionen hos en flerkärnig processor med SMP-arkitektur fast i en enkelkärnig processor istället. Detta görs genom att man med hjälp av några mindre hårdvarumodifikationer skapar två logiska kärnor för varje fysisk kärna, och dessa ses sedan av operativsystemet som två fysiska kärnor. Dessa logiska kärnor delar cacheminnen och exekveringsenheter men varje logisk kärna har en egen uppsättning register för att kunna spara sina s.k. architectural states, d.v.s. nuvarande tillståndet på processorn, se figur 2. Alltså delar de två logiska kärnorna i en processor med stöd för SMT en stor del av resurserna vilket ökar den totala användningen av resurser i processorn (Marr et. al 2002 & Intel 2002). Figur 2 (Intel, 2009). Jämförelse av en enkärnig processor (grön ruta) med och utan Hyper-Threading.
Funktion I ett operativsystem så delas program upp i trådar vilka helt enkelt är serier av instruktioner. I en enkelkärnig processor utan Hyper-Threading så kan enbart en tråd bearbetas i taget. För att ändå kunna uppnå en till synes parallellism så används time sliceing vilket innebär att processorn tilldelar varje tråd ett litet tidsintervall i processorn. I en flerkärnig processor utan Hyper-Threading så kan lika många trådar som antalet kärnor bearbetas helt och hållet parallellt utan att behöva jobba med tidsintervall. I figur 3 visas detta i de två vänstra illustrationerna där orange och lila representerar en tråd var. Om man istället har en enkelkärnig processor som stödjer Hyper- Threading så kan dessa båda trådar i teorin bearbetas på samma tidsintervall som det hade tagit för den flerkärniga processorn, vilket visas i den högra illustrationen i figur 3. Huvudtanken är att minska tiden som processorn inte har något att göra. (Marr et. al 2009 & Intel 2002) Figur 3 (Intel, 2002). Jämförelse av schemaläggning hos en tvåkärnig processor och en processorkärna med stöd för Hyper- Threading. Schemaläggning Schemaläggning av trådar för processorer med Hyper-Threading sköts av operativsystemet och är i princip identiskt med hur schemaläggningen ser ut för flerkärniga processorer. Det exempel jag har valt att använda är Windows egen schemaläggare. Denna schemaläggare använder sig av ett prioritetssystem med en skala 0 31 där 31 är maximum. Vid start av en process så tilldelas denna en basprioritet (Real-time, High, Above Normal, Normal, Below Normal, and Idle) och denna process består sedan i sin tur av trådar som också har en individuell basprioritet (Time-critical, Highest, Above-normal, Normal, Below-normal, Lowest, and Idle). Korrelationen mellan denna terminologi för prioritet och prioritetsskalan 0 31 visas i figur 4. Utöver basprioriteten så har trådarna också en dynamisk prioritet, vilken från början utgår från basprioriteten och är den som används vid schemaläggning och som sedan justeras under exekvering. Vid schemaläggningen så bearbetas de trådar med högst prioritet först och alla trådar med samma prioritet precis likadant. (Microsoft Press Store, 2009). Schemaläggaren har också ett API som tillåter programmerare att skriva kod som är anpassad till processorer med Hyper-Threading. Med hjälp av denna kan man bland annat manuellt öka prioriteten på en tråd eller bestämma att en tråd enbart skall bearbetas på en specifik logisk kärna i processorn.
Schemaläggningen sköts därefter av några algoritmer som utgår ifrån ovanstående (The Microsoft Press Store, 2009) Figur 4 (The Microsoft Press Store 2009). Korrelation mellan prioritetsterminologi och prioritetsskalan 0-31 i Windows schemaläggare. Prestanda En påtalad fördel med Hyper-Threading är en ökad prestanda i hela systemet då dubbelt så många trådar kan exekveras samtidigt, men i praktiken så är det inte så enkelt. Eftersom de båda logiska kärnorna i en processor med Hyper-Threading delar på alla hårdvaruresurser så måste koden som skall exekveras vara anpassad efter detta. En annan faktor är att desto större del av koden som kan exekveras parallellt, desto högre kommer prestandaökningen att vara. Om koden inte är skriven för Hyper-Threading så finns en risk att systemet kan gå långsammare än det hade gjort utan Hyper- Threading då de båda logiska kärnorna frekvent försöker utnyttja samma hårdvaruresurser samtidigt. I figur 3 så visas en prestandajämförelse för en server som behandlar onlinetransaktioner där en genomsnittlig prestandaökning på 21% observerades i fallen med 1 eller 2 processorer med Hyper- Threading (Marr et. al, 2002).
Figur 5 (Marr et. al, 2002). Graf som visar prestandaökningen hos ett serversystem när Hyper-Threading är aktiverat. Diskussion Överlag så bidrar Hyper-Threading med en viktig teknik för förbättrad prestanda i system med endast små förändringar i hårdvaran. På senare år så har Hyper-Threading också börjat användas i redan flerkärniga system, t.ex. får en processor med 4 fysiska kärnor med hjälp av Hyper-Threading istället 8 logiska kärnor att arbeta med. Det enda egentliga problemet med Hyper-Threading är att det krävs en del kunskap och omsorg för att överhuvudtaget uppnå en prestandaökning i mjukvaran då koden måste anpassas för ändamålet. Det finns dock en stor potential ifall det blir praxis att skriva kod som kan exekveras så parallellt som möjligt och utan resurskonflikter, då det redan finns verktyg för att göra detta.
Referenser 1. Arkiverad version av Intels information om prestanda i Hyper-Threading, 2009 https://web.archive.org/web/20150217050949/https://software.intel.com/enus/articles/performance-insights-to-intel-hyper-threading-technology/ 2. Intels egen handledning för Hyper-Threading, 2002 https://software.intel.com/en-us/articles/introduction-to-hyper-threading-technology 3. Marcraft International, 2005, Server+ Certification Exam Cram, 1st Edition. Pearson IT Certification 4. Marr, D, Binns, F, Hill, D, Hinton, G, Koufaty, D, Miller, J, & Upton, M 2002, Hyper-Threading Technology Architecture and Microarchitecture, Intel Technology Journal, 6, 1, p. 1, Business Source Complete 5. Microsofts beskrivning av deras egen schemaläggare, The Microsoft Press Store 2009 https://www.microsoftpressstore.com/articles/article.aspx?p=2233328&seqnum=7