Vad är arbetsstöld?

Moderna datorer har flera bearbetningskärnor. Förutsatt att det finns tillräckligt med bearbetning så att varje kärna kan vara kontinuerligt upptagen. de kommer att tilldelas en kö med beräkningsarbetsobjekt. Eller trådar att fylla i av schemaläggaren.

Under körning av dessa trådar är det möjligt att skapa nya trådar eller arbetsobjekt. Dessa är separata trådar som kan bearbetas samtidigt. De kan behöva återföra resultaten till lekprogrammen eller förbli helt separata på obestämd tid. Vanligtvis är dessa underordnade trådar tilldelade till samma bearbetningskärna som föräldern.

Allt detta förutsätter att alla kärnor hålls upptagna. Detta kommer att hända om inga trådslut eller nya trådar skapas i samma takt eller snabbare än befintliga trådar. I den verkliga världen är dock den långsiktiga arbetsbelastningen sällan så enkel, särskilt i slutanvändares datorenheter. Så småningom kommer en bearbetningskärna sannolikt att slutföra alla tilldelade uppgifter. När detta händer, istället för att sitta sysslolös och slösa bort potentiell prestanda, kontrollerar den istället arbetsköerna för de andra bearbetningskärnorna och stjäl ett arbetsobjekt från dem.

Fördelar och nackdelar

Stöld av arbete innebär att en inaktiv bearbetningskärna aktivt söker efter arbete för att den ska slutföra. Detta förhindrar att en potentiellt stor del av den totala processorn blir inaktiv, vilket är användbart. Att stjäla arbete kan dock medföra vissa kostnader. Till exempel kommer den nya bearbetningskärnan sannolikt att behöva ladda all relevant data i sitt cacheminne.

Detta kan ta tid, särskilt om det måste begäras från system-RAM istället för att betjänas av en delad cache-nivå. Det är möjligt att den ursprungliga processorn skulle ha kunnat återuppta det arbetsobjektet inom den tidsramen, vilket leder till snabbare övergripande exekvering. Detta kan till och med vara fallet om bearbetningskärnan från vilken arbetsobjektet stals aldrig hade börjat bearbeta det. Vissa cachade värden kan vara identiska mellan överordnade och underordnade trådar.

Genomföranden

Flera programmeringsspråk har körtider som kan schemalägga arbete direkt på dedikerade processorer. Till exempel kan programmeringsspråket Cilk, Rust Tokio runtime och .Net Task Parallel Library göra detta. Alternativt kan operativsystemet ansvara för att schemalägga faktisk processortid. Med programmet lägger du helt enkelt till uppgifter till en pool av "arbetstrådar", som själva är schemalagda av operativsystemet.

Detta sker i system där programmet inte har dedikerad direktåtkomst till bearbetningskärnor utan måste dela åtkomst med andra processer. Extra försiktighet måste iakttas i det här scenariot för att säkerställa att en tråd inte stjäls upprepade gånger när den är inaktiv.

Det finns olika tillvägagångssätt för hur arbetsobjekt väljs ut för att bli stulna. I det ursprungliga konceptet var tillvägagångssättet att välja en annan slumpmässig kärna. Om den hade en eller flera arbetsobjekt i sin kö, ta den sista. Beroende på preferensen för huruvida en underordnad process omedelbart exekveras av den ursprungliga processorn. Eller, om den skjuts till processorns kö och den överordnade processen fortsätter att köras, kommer den överordnade eller underordnade tråden att bli stulen.

Det hela kan sammanfattas som Work Stealing, en lastbalanseringsteknik som säkerställer att ordbelastningen sprids jämnt mellan tillgängliga processorer. På så sätt gör alla processorer något för att hjälpa.

Slutsats

Arbetsstöld är en process som sker automatiskt i flerkärniga processorer. Varje kärna har en kö av uppgifter att utföra. När en processor slutför sina uppgifter, stjäl den sedan en annan uppgift från kön till en annan bearbetningskärna. Detta hjälper till att förhindra att processorn får vissa kärnor att vara lediga medan andra fortfarande har en kö med uppgifter att utföra.