Elaborato Gargiulo Federico n460001149

Transcript

Elaborato Gargiulo Federico n460001149
Scuola Politecnica e delle Scienze di Base
Corso di Laurea in Ingegneria Informatica
Elaborato finale in Sistemi Real Time
Algoritmi per lo scheduling di task real-time
su piattaforme multicore
Anno Accademico 2014/2015
Candidato:
Federico Gargiulo
matr. N46001149
Ai ragazzi della Capricorni, ma
soprattutto a tutti gli arrivisti
incontrati
Indice
Indice .................................................................................................................................................. III
Introduzione ......................................................................................................................................... 4
Capitolo 1: Panoramica ........................................................................................................................ 6
1.1 Terminologia .............................................................................................................................. 7
1.2 Problematiche delle piattaforme Multicore.............................................................................. 10
Capitolo 2: La prelazione nelle piattaforme multicore ...................................................................... 12
2.1 System Model, Assunzioni e Notazioni ................................................................................... 12
2.2 Policy e algoritmo di MPN ...................................................................................................... 12
2.3 Analisi di schedulabilità degli algoritmi MPN-* ..................................................................... 14
Capitolo 3: .......................................................................................................................................... 16
3.1 Algoritmo di scheduling PAS-SRTMS .................................................................................... 17
Capitolo 4: Bilanciamento del carico computazionale ...................................................................... 20
4.1 System Model, Assunzioni e Notazioni ................................................................................... 20
4.2 Scheduler Real-Time di Partizionamento ................................................................................ 21
4.3 Load Balancing Based Task Partitioning (LBTP) ................................................................... 22
4.4 Schedulabilità in LBTP ............................................................................................................ 23
Capitolo 5: Applicazioni Mixed-Criticality ....................................................................................... 25
5.1 Time-Triggered and Synchronisation-based strategy (TTS) ................................................... 26
5.2 Policy ....................................................................................................................................... 27
5.3 Schedulabilità e certificazione in TTS ..................................................................................... 28
Conclusioni ........................................................................................................................................ 30
Bibliografia ........................................................................................................................................ 32
Introduzione
I sistemi real-time sono quei sistemi il cui corretto funzionamento dipende anche dal tempo
di risposta.
Non basta, quindi, che la logica operazionale sia esatta ma è necessario anche che le
operazioni vengano compiute nel rispetto di vincoli temporali ben definiti.
Molteplici sono i settori di impiego: nel controllo di produzioni industriali, nell'ingegneria
biomedica, nell'aviazione, nelle telecomunicazioni, nella sorveglianza ambientale etc.
Il grado di affidabilità da garantire è spesso tanto elevato da far obbligo al progettista di
ricorrere a tecniche di programmazione ad hoc allo scopo di avere un controllo maggiore
del sistema. Vengono spesso usate tecniche di progetto più accurate, metodologie di analisi
statica del codice sorgente, e meccanismi per la gestione della variabile tempo. A questo va
aggiunto che la progettazione deve essere tale da garantire il perfetto funzionamento anche
a fronte della peggiore combinazione possibile di eventi.
Ai fini progettuali, un sistema di tipo real-time dovrà essere per così dire prevedibile. Nulla
dovrà essere lasciato al caso e i tempi di reazione di ciascun componente dovranno essere
sempre predicibili.
Per semplicità di progettazione vengono spesso adottati calcolatori meno complessi, in
genere mono core, e sistemi operativi minimali.
Oggi, però, la crescente richiesta di maggiori performance, in termini temporali e di calcolo,
assieme all'esplosione del mercato dei processori multicore hanno attirato l'attenzione della
comunità scientifica sulla ricerca di nuove tecniche per lo scheduling di task real-time.
Oltretutto bisogna ricordare che il parallel computing ormai è ovunque. Le architetture
multicore stanno dominando il mercato e trovano largo impiego in sistemi che vanno dagli
embedded, ai personal computer fino ai supercalcolatori ad alte performance.
Le tecnologie hardware hanno però mantenuto un passo diverso da quelle software. Le CPU
multicore necessitano di tecniche di programmazione ovviamente diverse da quelle
monocore, ma soprattutto il calcolo in parallelo e la gestione esplicita della memoria
aggiungono complessità alla progettazione dei sistemi. Una complessità che si ripercuote
4
per forza di cose anche nei sistemi real-time, dove certamente non è possibile lasciare nulla
al caso.
Un po' sospinti dai mutamenti del mercato hardware e un po' costretti dalle esigenze di
applicazione, l'attenzione dei team di ricerca sui sistemi real-time si è spostata per gran parte
anche sulle piattaforme multicore.
5
Capitolo 1: Panoramica
La bontà di un sistema di calcolo è data da una molteplicità di fattori che vanno da
caratteristiche fisiche, ai meccanismi di nucleo, fino agli applicativi. Ovviamente i
meccanismi di gestione dell'hardware devono essere accompagnati da modelli matematici
precisi che permettono di avere una stima dei comportamenti del sistema a tutti i possibili
stimoli in ingresso.
Questo pieno controllo può essere possibile solo attraverso un'adeguata chiaroveggenza da
parte degli algoritmi software di controllo. Questa prevedibilità diventa così il cardine
dell'intero apparato. Affinché un sistema possa essere adottato in un contesto
particolarmente delicato, nelle procedure ciascun parametro temporale dovrà essere noto a
priori e perché si possano anticipare i comportamenti, è indispensabile che essi siano
descritti da un modello matematico esatto che tenga conto anche dei peggiori scenari di
esecuzione. Arriviamo dunque a capire la motivazione che spinge i progettisti ad adottare
configurazioni fisiche semplici (e spesso anche non recenti) nelle quali vengono disabilitati
dispositivi e meccanismi che introducono aleatorietà nei comportamenti, come Cache,
DMA, Interrupt etc.
E' ovvio che non tutti i casi applicativi richiedano garanzie troppo forti, anzi può capitare
che i tempi di risposta siano importanti ma non tanto da inficiare la sicurezza di chi ne fa
uso. Garantire una maggiore affidabilità comporta maggiori costi di sviluppo e produzione,
dei costi che alla fine saranno a carico del cliente, motivo per cui non sempre è necessario
adottare strategie eccessivamente drastiche per il design del sistema.
Altre volte invece su uno stesso apparato può essere utile integrare sistemi di diverso grado
di affidabilità, ad esempio basti pensare che può tornare utile aggiungere anche
un'interfaccia utente per il controllo di alcuni parametri o per avere semplicemente la
possibilità di leggere dei report dal sistema. E' facile pensare che ad una interfaccia utente
non sarà riservata la stessa attenzione rivolta alla parte che si interessa del controllo vero e
proprio, quindi i vincoli temporali non assumeranno la medesima importanza.
Dal momento che il mercato lascia spazio a tipologie di sistemi real-time i cui vincoli sono
6
meno stringenti, la comunità scientifica sta partorendo nuovi algoritmi per gestire processi
Real-Time anche su piattaforme multicore, la cui adozione solo fino a qualche anno fa
poteva sembrare utopica. Dei primi modelli matematici per il dimensionamento software
sono stati introdotti ma non soddisfano ancora appieno tutti i gradi di affidabilità (o di
calcolo) richiesti dal mercato. Oltretutto l'introduzione di CPU multicore ha aperto molte
strade ancora da percorrere e nuove problematiche, alle quali un prima soluzione si è iniziata
a dare. In questo lavoro ci soffermeremo sugli ultimi sviluppi in questo campo e faremo una
fotografia dello state-of-art, trattando dapprima la terminologia tecnica usata,
successivamente introducendo le problematiche affrontate e in fine entrando nel dettaglio
di alcune soluzioni proposte.
Passiamo quindi ad introdurre alcuni concetti chiave.
1.1 Terminologia

Task. Con la parola Task intendiamo una sequenza di istruzioni che viene eseguita
dal processore in modo continuativo fino al suo completamento. Spesso viene
tradotto in Italiano con la parola Processo.

Scheduler. Col termine scheduler si intende l'algoritmo che, presi in ingresso un
insieme di Task, definisce un ordine gerarchico per l'accesso alle risorse (siano esse
fisiche o virtuali) allo scopo di conseguire, in modo efficiente, un coordinamento tra
i processi in esecuzione.
Questo algoritmo può essere ottimizzato per scopi diversi. Ad esempio un sistema
operativo per un utente client sarà caratterizzato da tempi di attesa per l'utente
nettamente inferiori rispetto ad un sistema operativo server. Questi tempi di attesa
sono una diretta conseguenza delle politiche di scheduling.

Vincoli su risorse. Alcune risorse, siano esse istruzioni, dati o quant'altro, possono
essere mutuamente esclusive, questo comporta che un task che voglia farvi accesso
deve sottostare ad una policy di scheduling che garantisca un coordinamento tale da
7
impedire più accessi in contemporanea e mantenere la consistenza delle strutture dati
interne.
Queste tipologie di risorse prendono il nome di risorse mutuamente esclusive e le
relative porzioni di codice, il cui accesso è sempre mutuamente esclusivo, prendono
il nome di sezioni critiche.
Rispettare un vincolo su risorsa significa quindi
sincronizzare i processi che tentano un accesso simultaneo, al fine di consentire un
uso della struttura dati condivisa, mutuamente esclusivo.

Stati di un processo. Si considerino due processi J 1 e J 2 , che utilizzano una
struttura dati condivisa. Supponiamo che i due processi possano subire preemption,
ossia una sospensione dovuta a una prelazione di task più importanti, e supponiamo
che J 1 sia più importante di J 2 .
In queste condizioni, se il task J 2 viene attivato per primo, e J 1 arriva quando J 2
è all'interno della sezione critica, si ha la situazione riportata in figura 1.1
Nell'istante t 2 , il processo J 1 tenta di entrare nella sezione critica occupata dal
processo J 2 . Il sistema blocca l'accesso di J 1 per garantire la mutua esclusione
sulla risorsa e restituisce il processore a J 2 . J 1 può riprendere l'esecuzione solo
quando, all'istante t 2 , J 2 libera la sezione critica.
I processi in attesa di risorse condivise occupate si dicono bloccati sulla risorsa, e
vengono accodati in una coda associata al meccanismo di protezione della risorsa. Il
8
sistema operativo deve prevedere uno stato apposito per la sospensione dei processi
bloccati su risorse, che chiameremo stato dei processi bloccati (BLOCKED).
Un processo entra nello stato BLOCKED ogni volta che tenta l'accesso ad una risorsa
occupata e ne esce quando la risorsa viene liberata.

Scheduler Real-Time. Uno scheduler viene definito di tipo Real-Time quando tiene
conto di vincoli temporali dettati dal contesto di applicazione.
Una schedulazione in questo caso si dice fattibile se esiste un assegnamento dei task
al processore tale che tutti i task siano completati rispettando un insieme di vincoli
prefissati.
Un insieme di task si dice schedulabile se per esso esiste una schedulazione fattibile.
Infine si definisce preemptive se il processo in esecuzione può essere sospeso in
qualsiasi istante, allo scopo di assegnare il processore ad un altro task secondo una
strategia prefissata. In questo caso è possibile che un processo sia eseguito in
intervalli di tempo disgiunti (ovvero non consecutivi).

Deadline. La parola Deadline (scadenza, in italiano) viene usata per definire un
particolare vincolo temporale attribuito ad un task. Essa rappresenta il tempo
9
massimo entro cui un processo deve terminare la propria esecuzione al fine di non
provocare malfunzionamenti nel sistema.

Classificazione. Le conseguenze dettate da un missed deadline sono il discrimine
con cui possiamo distinguere processi Hard Real-Time da processi Soft Real-Time.
Essi hanno un grado di importanza nettamente differente, poiché nei primi una
violazione temporale può avere conseguenze di elevata rilevanza (come disastri
ferroviari, aerei, fallimenti di apparecchiature biomediche etc.) mentre nei secondi
al
più
si
possono
avere
degradi
prestazionali.
Un sistema operativo dotato di uno scheduler in grado di processare task Hard realtime viene definito di tipo hard, analogamente uno dotato di scheduler in grado di
processare solo task Soft real-Time viene definito di tipo soft. Esiste un connubio
rappresentato dai sistemi Mixed-Criticality i quali si occupano di schedulare un
insieme di task con differente livello di importanza.

Multicore. Introduciamo adesso il concetto di CPU multicore. Per aumentare le
performance dei processori, negli anni si è cercato di incrementare la frequenza di
clock e conseguentemente il numero di istruzioni eseguite in un quanto di tempo.
Questo approccio è stato possibile fintanto che la miniaturizzazione dei transistori
e il calore dissipato dal dispositivo non sono diventati un ostacolo troppo difficile da
superare. Integrare in una CPU più nuclei di calcolo ha permesso di valicare questi
impedimenti,
incrementando
l'efficienza
di
calcolo
e
riducendo
contemporaneamente anche il costo energetico. Le CPU composte da più processori
fisici, i nuclei di calcolo, prendono il nome di multicore.
1.2 Problematiche delle piattaforme Multicore
Come sempre, non tutto è oro quello che luccica. Le piattaforme basate su componenti di
calcolo multicore hanno portato con sé una sfilza di problemi ai quali ancora oggi si sta
cercando di ovviare. La crescente complessità delle componenti hardware si traduce in una
più difficoltosa gestione delle risorse fisiche e virtuali. Nei Sistemi Real-Time queste
10
problematiche di gestione si accentuano al punto da diventare probabilmente le tematiche
portanti della ricerca scientifica in questo campo. Innanzitutto i task attivi in un istante
qualsiasi possono essere molteplici, quindi l'accesso alle risorse condivise deve essere
regolato tenendo presente anche le richieste provenienti da più processi, a seconda della
policy adottata vi sarà un vincitore e gli altri processi che hanno partecipato alla contesa si
troveranno a cambiare stato, passando in quello di blocked. Non capita raramente che si
abbiano contemporaneamente core liberi e molti processi in stato di blocked, causando
quindi un decadimento dell'efficienza d'uso della CPU.
A queste si aggiungono problematiche di tipo energetico, in quanto spesso le CPU sono
capaci di adattarsi al contesto di lavoro, aumentando i livelli prestazionali. Un cattivo
bilanciamento del carico computazionale aumenta la spesa energetica, uno scenario che può
diventare critico in sistemi embedded che non sono collegati alla rete elettrica (ad es in
dispositivi biomedici come i pacemaker) .
Ulteriori problemi per questo tipo di piattaforme sorgono per l'uso della memoria Cache,
una memoria ad alte prestazioni di piccola quantità che viene spesso integrata nelle CPU.
Un task che richiede un dato, dovrà prima cercarlo in memoria cache e se la ricerca non
dovesse andare a buon fine, passare in memoria centrale, inoltre alcuni livelli di Cache, nei
processori commerciali, sono spesso in comune tra i core causando un numero
considerevole di competizioni per l'accesso. Entrambe possono essere delle operazioni non
predicibili temporalmente e quindi fonti di non determinismo. A queste problematiche se ne
aggiungono molte altre, come la gestione di bus comuni, l'uso del DMA, etc. , ma che
esulano dal compito di questo elaborato.
11
Capitolo 2: La prelazione nelle piattaforme multicore
Negli ultimi anni, la maggior parte delle teorie di scheduling real-time per piattaforme
multicore si è focalizzata su scheduling full-preemptive. Può capitare, però, che a seconda
della natura dei task, sia necessario per alcuni di essi (anche solo una piccola parte di un
set), che durante la loro esecuzione non vengano prelazionati da altri. Nei sistemi non realtime ovviamente sono state già adottate diverse soluzione ma non negli RTOS. Vale a dire
che finora non vi è stata possibilità di una via di mezzo tra politiche fully-preemptive o nonpreemtive.
Solo recentemente si è introdotto l' MPN (mixed preemptive/non-preemptive) policy, grazie
al quale ciascun task può essere di tipo preemptive o non-preemptive. Prima di introdurre
l'algoritmo vero e proprio, trattiamo brevemente le assunzioni e le notazioni da fare per il
System Model dopodichè passiamo a valutare l'affidabilità di questa politica osservando il
test di analisi correlato.
2.1 System Model, Assunzioni e Notazioni
Ciascun task τi ∈Φ (insieme di tutto il set di task) è rappresentato da (T i ,C i , Di ) , dove
Ti
è il tempo minimo tra due invocazioni successive, C i è il worst-case execution time, e
Di è la relativa deadline.
Per ciascun τi ∈Τ , introduciamo un parametro addizionale Y i che indica la proprietà di
prelazione del rispettivo task.
2.2 Policy e algoritmo di MPN
Passiamo ora a descrivere la politica di preemption di MPN. La decisione viene presa
innanzitutto sulla base di un parametro Y i del task τi . Cioè, se Y i =1 (Y i =0) , un job di
τi
può (o non può) essere prelazionato dagli altri job a priorità maggiore durante la sua
esecuzione. Chiameremo questa politica con l'appellativo di mixed preemptive/non12
preemptive (MPN) policy.
Da adesso useremo mpn-* per indicare l'algoritmo di scheduling che adotta MPN e * per
indicare genericamente la sua politica di preemption o non-preemption.
L'esempio riportato di seguito fornisce una descrizione di un mpn-* algoritmo di scheduling
una piattaforma multicore. Dal momento che ci possono essere alcuni job non-preemptive
sotto mpn-*, il Job Release avanza agli step 4 e 5 esentando gli job non-preemptive
attualmente in esecuzione dall'essere prelazionati da job appena invocati. Questa è la
principale differenza tra uno scheduler fp-* (algoritmi con fully-preemptive policy) a un
mpn-* . L'overhead implementato da mpn-* non è significativo in quanto la maggior parte
degli steps dell'algoritmo sono anche richiesti dall'algoritmo fp-* . Cioè mpn-* in aggiunta
richiede la verifica della condizione di Y k =1 nello step 4 e la seconda condizione di « if »
nello step 5, e la memorizzazione di un bit addizionale (Y k ) per il task. D'altronde, mentre
tutti i task sotto fp-* possono essere prelazionati, soltanto alcuni task sotto mpn-* possono
incorrere in preemption e migration.
Quando adottiamo EDF come prioritization policy, mpn-EDF determina le priorità dei job
a seconda delle rispettive deadline. Perciò la deadline dei job è usata per comparare le
13
priorità dei job nell'algoritmo di Job Realese agli step 4 e 5 e Job Completion al primo step
dell'algoritmo. D'altronde, mpn-FP determina le priorità su quelle fissate dai task, e quindi,
la task priority è usata per le comparazioni. Si noti che la descrizione dell'algoritmo, per ora,
soddisfa le politiche di priorità nelle quali la priorità di ciascun job non cambia nel tempo
(EDF, FP etc.), tuttavia può essere esteso anche a politiche a priorità dinamica. Quindi la
politica di MPN e l'algoritmo mpn-* sono delle generalizzazioni di non-preemptive e
preemptive policies, e di np-* e fp-* come dichiarato nel seguente lemma.
Lemma 1 : La politica MPN assume le politiche preemptive e non-preemptive, mentre gli
algoritmi di scheduling mpn-EDF e mpn-FP assumono np-EDF e fp-EDF, e np-FP e fp-FP,
rispettivamente.
La prova è abbasta semplice. La non-preemptive (o preemptive) policy è equivalente alla
MPN policy con Y i =0(Y i=1) per tutti i task τ∈ϕ e np-EDF (o fp-EDF) è equivalente a
mpn-EDF con Y i =0(Y i=1) per tutti i task τ∈ϕ . Lo stesso vale per mpn-FP con np-FP e
fp-FP.
2.3 Analisi di schedulabilità degli algoritmi MPN-*
14
L'analisi di schedulabilità per gli algoritmi MPN-* è data dalle due relazioni del teorema
che segue.
Teorema. Quando un insieme di task Φ è schedulato da un algoritmo di schedulazione
mpn-*, un upper-bound del tempo di risposta di un task preemptive τ k | Y k =1∈Φ è
⩽R xk soddisfi la seguente espressione, partendo da R0k =C k
Rk =Rkx tale che R(x+1)
k
𝑅𝑘𝑥+1 ⃪ 𝐶𝑘 + ⌊
1
𝑚
∑
∗
(𝐹𝑘𝑥 ), 𝐹𝑘𝑥 )⌋
min(𝐼𝑘⃪𝑖
𝜏𝑖 𝜖𝜙−{𝜏𝑖 }
E un upper-bound del tempo di risposta di un task non-preemptive 𝜏𝑘 | 𝑌𝑘 = 0 ∈ Ф è 𝑅𝑘 =
𝐹𝑘𝑥 + 𝐶𝑘 − 1tale che 𝐹𝑘𝑥+1 ≤ 𝐹𝑘𝑥 soddisfi la seguente espressione, partendo da 𝐹𝑘0 = 1
𝐹𝑘𝑥+1 ⃪1 + ⌊
1
𝑚
∑
∗
(𝐹𝑘𝑥 ), 𝐹𝑘𝑥 )⌋
min(𝐼𝑘←𝑖
𝜏𝑖 ∈Ф−{𝜏𝑘 }
Quindi se 𝑅𝑘 ≤ 𝐷𝑘 è soddisfatta per tutti i task 𝜏𝑘 ∈ Ф, 𝑎𝑙𝑙𝑜𝑟𝑎 Ф è schedulabile secondo
l’algoritmo.
15
Capitolo 3:
Il consumo energetico di un Sistema Real-Time può essere un fattore di particolare
importanza in quei sistemi dotati di alimentazione propria e quindi non collegati ad una
fonte energetica continua. L’impiego di dispositivi dotati di accumulatori di corrente è in
forte crescita, basti pensare che in ambito biomedico numerose protesi elettroniche
funzionano per mezzo di batterie, oppure un caso analogo può essere quello di
apparecchiature professionali portatili.
L’assorbimento energetico della CPU è spesso tra i fattori cruciali di consumo all’interno di
un calcolatore. La cosa si accentua nel momento in cui la complessità e le performance
richieste aumentano considerevolmente, la potenza dissipata da un processore generalmente
cresce in modo proporzionale alle sue performance. Spesso i processori sono in grado di
adattarsi dinamicamente al contesto di lavoro, qualora non fosse richiesta un’eccessiva
complessità di calcolo, la frequenza di lavoro della CPU potrebbe quindi ridursi
permettendo un risparmio di corrente, come accade ad esempio con la tecnologia DVFS, la
quale viene implementata su gran parte delle CPU e apporta ad esse la capacità di adattare
la frequenza di lavoro in base alle necessità. E’ facile capire che un aumento eccessivo della
frequenza di clock, causa spesso un degrado dell’efficienza energetica. Questa è una
problematica che attanaglia ogni tipologia di CPU, sia multiprocessore che multicore.
Le soluzioni che vengono adottate generalmente si dividono in due categorie: si può
decidere di adottare uno scheduler partizionato, ossia per un dato task, ciascuna sua
esecuzione può avvenire sempre sullo stesso core, oppure si può adottare uno scheduler di
tipo globale che permette le esecuzioni di un task su core differenti, ma restano soluzioni di
tipo euristiche.
Un metodo di schedulazione introdotto di recente per il contenimento del consumo di
energia è il Power Aware Scheduling of fixed priority tasks in Soft Real-Time Multicore
System (PAS-SRTMS). La particolarità dell’algoritmo PAS-SRTMS è che opera sia con
uno scheduling statico (Offline method) sia uno scheduling di tipo dinamico (Online
method). Grazie a tale algoritmo è possibile ridurre il consumo di potenza nei sistemi
16
multicore nei sistemi Soft real-time avvalendosi della tecnologia DVFS.
3.1 Algoritmo di scheduling PAS-SRTMS
L’algoritmo di Power Aware Scheduling of fixed priority tasks in Soft Real-Time Multicore
System innanzitutto nasce per sistemi di tipo Soft Real-Time e si basa su priorità fisse
assegnate attraverso tecniche come Deadline Monotonic (DM), Rate Monotonic (RM) etc.
Per semplicità useremo DM, indi i task con deadline più grandi assumeranno delle priorità
inferiori e viceversa.
Come già detto l’algoritmo può essere visto come il connubio di due metodi, offline e online.
Esso consiste nello scegliere frequenze di lavoro crescenti da assegnare ai core, in modo che
nello step successivo i task vengano assegnati ai core sulla base della priorità, in modo
proporzionale.

Il metodo offline viene usato per la ricerca e il settaggio della tensione e della
17
frequenza ottimale dei core. Ad esempio se prendiamo un processore con due core
(core A e core B), l’algoritmo dovrà dividere l’insieme dei task in due categorie,
quella ad alta e quella a bassa priorità. Ad esempio, nel nostro caso, usando Deadline
Monotonic, vediamo in figura che alla seconda riga avviene l’assegnazione delle
priorità. Dalla settima inizia la procedura di settaggio della tensione e della
frequenza ai core. Più in basso, alla riga 17, avviene la ricerca della tensione e della
frequenza minima che al contempo garantisce la schedulabilità. Si nota che queste
righe restano all’interno del costrutto for della settima riga, questo vuol dire che il
processo viene iterato un numero di volte sufficiente a trovare il miglior
compromesso tra consumo energetico e schedulabilità.

Il metodo online prende coscienza del lavoro svolto allo step precedente e si
preoccupa di schedulare i task. Possiamo vedere nell’esempio riportato sotto, che
l’algoritmo prende dalla coda Ready i task, verifica la priorità e assegna il task al
core corrispondente. Viene poi effettuato un resoconto di eventuali deadline sforate
e della potenza dissipata.
18
L’algoritmo ammette la possibilità che possano capitare delle deadline misses, questo
perché è impiegato per sistemi di tipo Soft Real-Time, ossia i vincoli temporali sono imposti
al solo scopo di garantire un adeguato standard prestazionale e nel caso non venissero
rispettati ciò non inficerebbe in alcun modo la sicurezza degli utenti o di quanti hanno
contatto con il sistema.
19
Capitolo 4: Bilanciamento del carico computazionale
Per sfruttare appieno i processori multicore, le applicazioni real-time dovrebbero fornire un
elevato grado di parallelismo, grazie al quale i task real-time possono utilizzare più core in
contemporanea. Per garantire delle prestazioni real-time, rendendo l’uso della CPU
efficiente, è richiesta una schedulazione di alta complessità capace anche di distribuire il
carico in modo bilanciato su tutti i core, una caratteristica che al contempo permette di
ottenere una riduzione anche dei costi energetici.
Molti metodi di scheduling real-time per piattaforme multicore proposti si focalizzano
sull’efficacia della schedulabilità o del load balancing, ma mai su entrambi (spesso due
caratteristiche mutuamente esclusive).
Una prima soluzione proposta dal Computer Science Laboratory Samsung di San Josè,
California, consiste in un approccio separatista, focalizzando l’attenzione ai processi
indipendenti per cui non ci sono chiari vincoli inter-task o relazioni. Il metodo si chiama
Load Balancing based Task Partitioning (LBTP), il quale rende i task schedulabili in scenari
complessi e, allo stesso tempo, fornisce un effettiva capacità di bilanciamento del carico.
Il meccanismo di ripartizione dei task viene eseguito senza effettuare un test di
schedulabilità durante la divisione dei processi ma con un test di bilanciamento del carico,
garantendo al contempo un soddisfacente rispetto dei vincoli di deadline. Il meccanismo si
ferma quando non può più effettuare operazioni di bilanciamento o quando oppure quando
le migliorie sono di lieve entità e questa caratteristica riduce l’overhead causato dalla
ripartizione.
L’ LBTP non si propone come il miglior algoritmo di schedulazione per piattaforme
multicore ma solo come miglior compromesso tra capacità di schedulazione e bilanciamento
del carico.
4.1 System Model, Assunzioni e Notazioni
Consideriamo un set di Task 𝑇 = {𝑡1 , 𝑡2 , … , 𝑡𝑛 }, dove 𝑛 è il numero di task, e un omogeneo
20
sistema multicore 𝐶 = {𝑐1 , 𝑐2 , … , 𝑐𝑚 }, dove m è il numero di core. Ciascun task 𝑡𝑖 è
caratterizzato dalla coppia (𝑒𝑖 , 𝑝𝑖 ), dove 𝑒𝑖 è il worst case execution time (WCET) del task
𝑡𝑖 e 𝑝𝑖 è il periodo di task 𝑡𝑖 . Assumiamo che il periodo è implicitamente uguale alla relativa
deadline. Il grado di utilizzazione dei task 𝑡𝑖 , 𝑢𝑖 , è rappresentato da 𝑢𝑖 = 𝑒𝑖 /𝑝𝑖 .
𝑒
L’utilizzazione totale del set di task 𝑇, 𝑈𝑡𝑜𝑡 è data da 𝑈𝑡𝑜𝑡 = ∑𝑛𝑖=1 𝑢𝑖 = ∑𝑛𝑖=1(𝑝𝑖 ). Si noti
𝑖
che la condizione necessaria di fattibile schedulabilità sugli m core identici è che il fattore
di utilizzazione non sia maggiore della capacità totale di calcolo del sistema.
𝑈𝑡𝑜𝑡 ≤ 𝑚
L’insieme di task assegnati al core 𝑐𝑖 è denotato con Π𝑖 . Conseguentemente l’utilizzazione
di un core dato un task assegnato ad un core, sarà 𝑈𝑖 = ∑𝑡𝑘 ∈Π𝑖 𝑢𝑘 .
Un task sarà schedulabile se e solo se tutte le sue istanze vengono completate entro le
deadline.
Per quanto riguarda il load balance, introduciamo un metodo di quantificazione, definito
come il coefficiente di variazione, ossia il rapporto tra deviazione standard del carico tra i
nuclei e il carico medio.
La misura dello squilibrio ci dà la deviazione dal corrente schema di bilanciamento del
carico rispetto a un bilanciamento perfetto. La deviazione standard di un assegnazione, 𝜎, è
𝑈
𝑖
rappresentata da 𝜎 = √(𝑈𝑖 − 𝜇)2 dove 𝜇 = ∑𝑚
𝑖=1 𝑚 (ossia il valore di utilizzazione del
core). Maggiore è il valore di squilibrio, minore è l’efficacia di bilanciamento del carico.
Infine introduciamo una proposizione utile in seguito per lo studio di schedulabilità.
Proposizione 3.1. Esiste uno squilibrio di carico se e solo se per due core, 𝑐𝑖 𝑒 𝑐𝑗 , si verifica
che 𝑈𝑖 − 𝑈𝑗 > 𝑢𝑘 , laddove 𝑡𝑘 ∈ Π𝑖 .
4.2 Scheduler Real-Time di Partizionamento
L’algoritmo di schedulazione usato per il partizionamento è stato realizzato partendo dalla
riduzione della problematica di schedulazione nei processori multipli ad un insieme di
problemi per processori singoli.
L’approccio consiste in due step. Nel primo si assegna ciascun task ad un core in modo che
21
venga rispettata la propria deadline. I processi possono essere ordinati secondo i criteri più
comuni (per deadline, per utilizzazione etc.). Nel secondo step, una volta assegnati i task,
viene applicato un algoritmo di schedulazione per sistemi uniprocessori (come EDF, RM
etc.) per schedulare i task assegnati all’interno della time line di ciascun core.
4.3 Load Balancing Based Task Partitioning (LBTP)
Entriamo adesso nel dettaglio dell’algoritmo LBTP (Load Balancing based Task
Partitioning). Esso consiste in tre step fondamentali:
1. Task ordering: I task vengono ordinati seguendo il fattore di utilizzazione in modo
decrescente.
2. Task partitioning : I task vengono assegnati al primo core libero che può soddisfare
i vincoli di deadline.
3. Task repartitioning: Questo passaggio può essere svolto solo dopo che una
schedulazione fattibile è stata trovata nello step precedente di partizionamento.
Utilizzando l’ordine inverso di ordinamento dei processi (cioè al crescere del fattore
di utilizzazione), ciascun task è riassegnato al core con la minima utilizzazione.
Questa ripartizione effettua intrinsecamente un test per il bilanciamento del carico e
non è necessario testare di nuovo la schedulabilità per ciascun task durante questa
procedura.
Il primo meccanismo di partizionamento implementato si chiama First Fit Deacresing
22
Utilization (FFDU), il quale produce una schedulabilità dalle buone performance ma
soprattutto si assicura il completamento dell’esecuzione dei task rispettando la deadline,
caratteristica fondamentale degli scheduler real-time. Durante la procedura di partizione,
ciascun task è verificato attraverso un test di schedulabilità per ciascun core disponibile,
dopodiché viene assegnato al primo tra quelli per il quale il risultato è positivo. Si passerà
al terzo step soltanto quando sarà stata trovata una soluzione praticabile dall’FFDU
assignment.
Una volta entrati nel passo successivo, entra in gioco un meccanismo di Worst-Fit per la
ripartizione dei processi, l’assegnazione avverrà con una logica diametralmente opposta. I
task vengono riassegnati in ordine crescente di utilizzazione e questa tecnica permette di
mantenere la condizione di fattibilità senza avvalersi nuovamente del test.
Questa tecnica combinata con il partizionamento Worst-Fit e l’ordinamento per
utilizzazione crescente prende il nome di Worst-Fit Increasing Utilization (WFIU). Il
meccanismo termina quando i benefici di bilanciamento non riescono più ad aumentare.
4.4 Schedulabilità in LBTP
L’algoritmo di LBTP può sempre generare una soluzione fattibile a condizione che anche
FFDU ne possa generare una, mentre il test di schedulabilità non viene eseguito durante
l’esecuzione di ripartizione.
Teorema. Se FFDU è in grado di generare una soluzione fattibile allora anche LBTP è in
grado di generare una soluzione fattibile.
Per provare questa tesi, dobbiamo partire dalla considerazione che per ciascun core, il fattore
di utilizzazione sarà minore o uguale ad 1 e che quindi tutti i vincoli di deadline possono
essere soddisfatti.
𝑈𝑖 ≤ 1, dove 𝑡𝑘 ∈ Π𝑖
(3.1)
Al core con valore di utilizzo minore, si riassegna un task e il suddetto valore non supera 1
23
in quanto l’assegnazione deve soddisfare i vincoli di deadline. Quindi il fattore di
utilizzazione non può mai essere uguale ad 1.
Supponiamo che l’utilizzo del task 𝑡𝑘 è inferiore alla differenza tra il fattore di
utilizzazione del core a cui è stato assegnato e il minore tra i fattori di utilizzazione di tutti
i core. Questo scenario comporta uno sbilanciamento del carico sulla base della
Proposizione 1.
𝑢𝑘 < 𝑈𝑖 − 𝑈𝑗 , laddove 𝑡𝑘 ∈ Π𝑖
(3.2)
In questo caso, LBTP rimuove il task 𝑡𝑘 dal core 𝑐𝑖 e lo riassegna al core 𝑐𝑗 avente il minor
fattore di utilizzazione. Ovviamente l’utilizzazione del core 𝑐𝑗 viene incrementata
dall’aggiunta di 𝑢𝑘 , ma sarà ancora minore di 1, per le (3.1), (3.2) e (3.3)
𝑈𝑗 = 𝑈𝑗 + 𝑢𝑘 < 𝑈𝑖 (3.3)
Quindi 𝑈𝑗 < 1 .
L’utilizzazione del core 𝑐𝑖 è anche inferiore ad 1 per la riduzione del valore di utilizzazione
del task 𝑡𝑘 . Si noti che 𝑢𝑘 > 0 e il fattore di utilizzazione modificato del core 𝑐𝑖 non potrà
essere 1.
𝑈𝑖 = 𝑈𝑖 − 𝑢𝑘 < 1
Il fatto che il fattore di utilizzazione dei core sia inferiore ad 1, implica che l’assegnazione
dopo la ripartizione di un task soddisfa ancora le deadline. Per la proposizione 2, il
processo si ferma quando il task successivo 𝑡𝑘 che sta per essere riassegnato, soddisfa il
seguente criterio
𝑢𝑘 ≥ (𝑈𝑚𝑎𝑥 − 𝑈𝑚𝑖𝑛 )
Giungiamo finalmente a dire che se l’assegnazione secondo FFDU soddisfa i vincoli di
deadline, allora anche l’assegnazione LBTP deve soddisfare i vincoli di deadline.
24
Capitolo 5: Applicazioni Mixed-Criticality
Le CPU multicore sono entrate con prepotenza anche nel mondo dei sistemi MixedCriticality, dove si è registrata una crescente tendenza d’uso di questi chip al fine di
allargare gli orizzonti industriali. Grazie a sofisticate tecniche di virtualizzazione, è stato
possibile integrare in un unico sistema un numero considerevole di applicazioni con livelli
di criticità differenti, noti come Safety Integrity Levels (SIL). Questi livelli esprimono il
grado di protezione richiesto contro i fallimenti, vengono usati in fase progettuale e poi
riflessi nelle fasi di sviluppo, di testing e di certificazione.
Per evitare interferenze tra applicazioni di CLs differenti coesistenti in una piattaforma
comune, gli standard di certificazione esistenti richiedono una certa indipendenza tra le
applicazioni. Si adotta quindi un isolamento spaziale e temporale su ogni core avvalendosi
di meccanismi di partizionamento a livello hardware. Purtroppo è possibile che alcune
risorse restino condivise, come ad esempio un bus o una porzione di memoria cache, per
motivi economici o anche di performance. Quindi se più core dovessero far accesso ad
esempio ad un bus di memoria, si causerebbe un’interferenza con conseguenze anche per
le applicazioni real-time.
Per incrementare l’isolamento tra i core che condividono banchi di memoria, si può
selezionare un bus di memoria schedulato staticamente oppure un server per gestire
l’accesso sulla base di un budget di accesso per ciascun core. In questo modo possiamo
facilmente quantificare gli effetti dovuti alla coesistenza delle applicazioni, sui tempi di
risposta poiché l’interferenza tra i core è limitata per costruzione. Di contro, però, la prima
soluzione è tutta a scapito della flessibilità (non possiamo modificare le politiche di
scheduling a Runtime qualora fosse necessario più spazio ad un’applicazione) e la seconda
soluzione comporta un notevole overhead e complessità progettuale.
Vestel nel 2007, per primo introdusse il modello attualmente dominante per i task MC, un
modello ripreso e modificato negli anni dalla comunità scientifica. Ma tutti i lavori
prodotti fino al 2013 non hanno mai affrontato le interferenze sulle risorse condivise e i
loro effetti sulla schedulabilità. È stato dimostrato empiricamente che il traffico sul bus di
25
memoria nei sistemi COTS può aumentare il tempo di risposta dei task nei sistemi realtime fino al 44%.
Una soluzione introdotta di recente per ovviare ai rischi di non determinismo dovuti all’uso
di risorse hardware condivise è quella del Time-Triggered and Synchronisation-based
strategy (TTS). Si tratta della prima soluzione di mixed-criticality mapping e scheduling
strategy che riesce a tenere in considerazione gli effetti temporali delle risorse condivise,
oltretutto è una soluzione implementabile su tutte le piattaforme COTS.
Viene introdotto una strategia di scheduling di partizionamento per un insieme di task MC,
il quale garantisce un isolamento temporale tra le applicazioni di differente CL, tiene conto
degli effetti dovuti alla contesa sulla memoria da parte dei task in esecuzione, aumenta
l’efficienza d’uso delle risorse. La strategia di scheduling TTS introduce un connubio tra le
attivazioni per mezzo time-triggered e event-driven e può supportare le tecniche di
prelazione a priorità fissa.
5.1 Time-Triggered and Synchronisation-based strategy (TTS)
Nei sistemi multicore in cui l’interferenza sulle risorse condivise non può essere evitata o
limitata, una soluzione può essere quella di imporre un isolamento temporale tra i diversi
livelli CS per concedere soltanto ai task di pari grado di essere eseguiti assieme.
Con l’algoritmo TTS si è assunto che sulla piattaforma sia possibile realizzare un clock
sincronizzato tra i core. L’algoritmo di scheduling avrà una periodicità uguale
all’iperperiodo 𝐻 dell’insieme dei task 𝜏, ossia il minimo comune multiplo di tutti i periodi.
Il ciclo di scheduling consiste in frames che inizia e finisce simultaneamente su tutti i core.
Ciascun frame può essere di lunghezza diversa ma fissa, e la dimensione massima è ristretta
al minimo periodo in 𝜏. Ciascun frame viene diviso in tante sub-frames quanti sono i livelli
di criticità nel sistema.
L’avvio di una sub-frame di TTS non è temporizzato, ma avviene attraverso la
sincronizzazione inter-core
con un meccanismo di barriera che guarda all’efficienza
26
d’utilizzo delle risorse.
Un nuovo subframe TTS inizia quando tutti i task schedulati nel precedente subframe sono
stati terminati su tutti i core. I task che sono schedulati entro uno stesso subframe sono
definiti dallo stesso livello di criticità e la cardinalità dei subframe di uno stesso frame
corrisponde all’inverso del grado di criticità. La schedulazione su ciascun core all’interno
di un subframe è sequenziale e segue un ordine prefissato, ciascun task viene attivato solo
al termine del precedente.
5.2 Policy
Data una schedulazione S fattibile e un funzione di barriera, vediamo il comportamento
dello scheduler su ciascun core. L’esecuzione dei processi all’interno di un frame 𝑓 ∈ 𝐹
avviene con i seguenti passaggi:
1. Per l’i-esimo subframe, lo scheduler sollecita in sequenza gli job corrispondenti sulla
base della tabella di schedulazione S e al termina segnala l’evento per poi mettersi in
attesa fino alla barrier syncronisation di tutti i core.
2. Finito il tempo di attesa, si cerca il livello di criticità 𝑙 che soddisfa la seguente
relazione
𝑡 ≤ min𝑙∈{1,…,𝐿} {𝑏𝑎𝑟𝑟𝑖𝑒𝑟𝑒(𝑓, 𝑙)𝑖 }
Lo scheduler attiverà i job nel subframe successivo, in modo che i task con grado di
criticità inferiore di 𝑙 vengano attivati con degraded mode, qualora però 𝑙 fosse
unitario, allora i job verrebbero attivati nel subframe successivo in 𝑛𝑜𝑟𝑚𝑎𝑙𝑒 𝑚𝑜𝑑𝑒.
La decisione sulla modalità di esecuzione del task nel subframe che segue, riguarda
solo il frame corrente e non è rilevante per quello successivo.
3. Gli steps precedenti vengono ripetuti per tutti i subframe fino a che non si arrivi al
frame successivo.
Qualora non venisse raggiunta la barrier syncronisation nei tempi stabiliti, sarà sintomo di
un comportamento bacato, in quanto in conflitto con la fattibilità della schedulazione
27
adottata.
E’ facile capire il motivo per cui questa soluzione si può adattare a tutte le architetture
COTS, la concorrenza sulle risorse non deve quindi essere eliminata con meccanismi
hardware. Inoltre si è rafforzato l’isolamento temporale tra i livelli di criticità CL
permettendo quindi la certificazione incrementale. Infine è interessante notare come è
stato possibile aumentare l’efficienza d’uso delle risorse: i subframe vengono adattati al
contesto dinamicamente, in base ai profili dei task in esecuzione. Se un task di livello
superiore presenta un profilo di esecuzione di livello 𝑙 > 1, si può forzare la modalità
d’esecuzione dei task per portarli in degraded mode, questa variazione durerà soltanto il
tempo di un frame TTS e non sarà in alcun modo permanente.
5.3 Schedulabilità e certificazione in TTS
Dato un insieme di task 𝜏, l’ammissibilità di una schedulazione S è data dal rispetto della
relazione che segue sulla base delle rispettive barriers(𝑓, 𝑙) dei frame 𝑓 ∈ 𝐹 e dei livelli di
criticità 𝑙 ∈ {1, … , 𝐿},
𝑏𝑎𝑟𝑟𝑖𝑒𝑟𝑠(𝑓, 𝑙)𝑖 ≤ 𝐿𝑓 , ∀𝑓 ∈ 𝐹
28
Dove 𝐿𝑓 indica la lunghezza di un frame 𝑓. Soltanto se la relazione è soddisfatta per
ciascun frame e, ovviamente, è garantito il rispetto di ciascuna deadline, la schedulazione
può dirsi fattibile secondo TTS.
Per poter certificare il sistema è quindi necessario conoscere il comportamento su tutti i
livelli di criticità, la peculiarità di questo algoritmo sta nel fatto che la variabilità dei tempi
di risposta viene appiattita dalle funzioni di barriera, quindi il comportamento su ciascun
livello di criticità è sempre prevedibile.
29
Conclusioni
E’ innegabile che l’impiego delle piattaforme multicore abbia allargato in modo
considerevole gli orizzonti dei Sistemi Real-Time, ma forse è ancora presto per affermare
che i tempi per questa tecnologia siano maturi.
Oltretutto con queste nuove CPU, i campi di ricerca si sono moltiplicati, infatti in questo
elaborato sono stati presi in esame, per forza di cose, solo 4 algoritmi di scheduling,
ciascuno ideato per la risoluzione di un solo problema. Ovviamente per quel singolo
problema, sono state proposte numerose altre soluzioni e in questo elaborato sono state
riportate soltanto le più recenti.
Possiamo notare che per tutti e 4 siamo dovuti scendere a compromessi. Ad esempio il
primo algoritmo analizzato, Mpn, riesce a creare un algoritmo capace di schedulare in
scenari differenti a seconda delle proprietà di prelazione, ma non garantisce un adeguato
bilanciamento del carico. L’inefficace bilanciamento del carico comporta una serie di
problematiche ampiamente trattati in questo elaborato. Il secondo algoritmo, LBTP, invece
si focalizza proprio sul problema del load balancing ma dal canto suo necessita che i task
siano completamente indipendenti tra loro. Il PAS-SRTMS è un algoritmo che può essere
applicato soltanto in sistemi di tipo Soft Real-Time, questo è un problema in quanto
preclude il suo impiego in una miriade di sistemi dotati di autonomia energetica. Infine per
l’algoritmo TTS c’è da dire che è possibile impiegarlo in molteplici configurazioni
hardware per la sua elevata portabilità, tuttavia non può essere di tipo preemptive.
Se andassimo ad analizzare altri algoritmi dello state-of-art, il discorso non cambierebbe,
le soluzioni trovate vanno ad ovviare soltanto alcuni aspetti delle problematiche più
comuni.
Possiamo concludere dicendo che a 10 anni dall’esplosione del mercato dei processori
multicore, la ricerca scientifica sui meccanismi di scheduling Real-Time si ritrova ancora
molta strada da percorre. Per progetti di importanza minore è già possibile adottare
30
molteplici soluzioni, molte delle quali anche ben testate e impiegate ordinariamente, ma
nei casi in cui l’affidabilità richiesta in un sistema sia una proprietà molto forte, resta
allora al designer il compito di fare le dovute scelte progettuali per cercare il giusto
compromesso tra i requisiti richiesti e le soluzioni adottabili.
31
Bibliografia
[1]
Jinkyu Lee and Kang G. Shin, Improvement of Real-Time Multi-Core Schedulability
with Forced Non-Preemption, IEEE Transactions on Parallel and Distributed Systems, vol.
25, pp. 1233 - 1243, May 2014.
[2]
Georgia Giannopoulou, Nikolay Stoimenov, Pengcheng Huang, Lothar Thiele,
Scheduling of Mixed-Criticality Applications on Resource-Sharing Multicore Systems,
Embedded Software (EMSOFT), IEEE Proceedings of the International Conference, 1 – 25,
Oct 2013.
[3]
Sanjoy Baruah, Vincenzo Bonifaci, Gianlorenzo D’Angelo, Haohan Li, Alberto
Marchetti-Spaccamela, Nicole Megow, and Leen Stougie, Scheduling Real-Time MixedCriticality Jobs, IEEE Transactions on Computers, vol. 61, pp. 1140 - 1152, Aug 2012.
[4]
Jaeyeon Kang and Daniel G.Waddington, Load Balancing Aware Real-Time Task
Partitioning in Multicore Systems, IEEE International Conference on Embedded and RealTime Computing Systems and Applications, pp. 404 - 408, 2012.
[5]
Giorgio C. Buttazzo, Sistemi in Tempo Reale, Pitagora editore, 2006.
[6]
Hang Su Univ. of Texas at San Antonio, San Antonio, TX, USA Dakai Zhu ; Mosse,
D., Load Balancing Aware Real-Time Task Partitioning in Multicore Systems, IEEE
Embedded and Real-Time Computing Systems and Applications (RTCSA), 19th
International Conference on, pp. 352 - 357, 2013
[7]
R . Pellizzoni, B . D . B u i , M . Caccamo, and L . Sha. Coscheduling of cpu and i/o
transactions in cots-based embedded systems. In RTSS, pp 221 - 231, 2008.
[8]
Wikipedia, http://en.wikipedia.org/wiki/Dynamic_voltage_scaling, 20 Feb 2015.
[9]
K. Hakkim Ansari, P. Chitra and P. Sonaiyakarthick, Power-Aware Scheduling of
Fixed Priority Tasks in Soft Real-Time Multicore Systems, In ICECCN, pp 496 - 502, 2013.
[10] Jinkyu Lee, Member, IEEE, and Insik Shin, Member, IEEEEDZL Schedulability
Analysis in Real-Time Multicore Scheduling, IEEE Transactions on software Engineering,
pp. 910 - 916, 2013
[11] G. Giannopoulou, K. Lampka, N. Stoimenov, and L. Thiele, Timed model checking
with abstract ions: toward s worst-case response time analysis in resource-sharing manycore
32
systems, In EMSOFT, pp 63 - 72, 2012
[12] G. Giannopoulou, K. Lampka, N. Stoimenov, and L. Thiele, Timed model checking
with abstract ions: toward s worst-case response time analysis in resource-sharing manycore
systems, In EMSOFT, pp 63 - 72, 2012
[13] B. B. Brandenburg, J. M. Calandrino, and J. H. Anderson, On the scalability of realtime scheduling algorithms on multicore platforms: A case study, Proc. IEEE Real-Time
Systems Symp. RTSS, pp. 157-169, Dec 2008
33