Prestazioni & Co: CPU, Memoria, I/O CPU - progettazione - prestazioni ideali Panoramica Memoria - gerarchie di memoria: cache, memoria principale, etc. - organizzazione, dimensionamento, indirizzamento, gest conflitti - prestazioni reali considerando anche il fattore memoria Periferiche di I/O - politiche di gestione delle singole periferiche - politiche di interfacciamento con il processore - prestazioni reali considerando i tempi di I/O Le scelte fatte a per l organizzazione, le politiche di gestione etc. influenzano le prestazioni della macchina che si ottiene
Misure per le Prestazioni T = durata del ciclo di clock (in secondi) F = numero cicli di clock al secondo (in Hz) F = 1 / T T = 1 / F Exe_Time X = tempo di esecuzione (CPU) di un programma sulla macchina X Prestazioni X = 1 / Exe_Time X (programmi/secondi) Speedup = Prestazioni X / Prestazioni Y = Exe_Time Y / Exe_Time X (se la macchina X è più veloce della macchina Y) Misure per le Prestazioni num. cicli = numero dei cicli di clock per eseguire un programma Exe_Time X = num. cicli T = num. cicli / F IC = numero di istruzioni del programma (Instruction Counter) CPI = numero medio di cicli per istruzione num. cicli = IC CPI Exe_Time X = IC CPI T = IC CPI / F MIPS = IC / ( Exe_Time X 10 6 ) = (IC F) / (IC CPI 10 6 ) = F / CPI 10 6
CPU Partiamo da una situazione ideale, in cui solo le caratteristiche della CPU influenzano le prestazioni Valutazione Prestazioni : Esercizio 6 (CPU) Esercizio 6: Il responsabile del progetto di un nuovo processore, dopo il completamento della fase di progettazione del processore e della prima versione del compilatore, deve decidere se mandare in produzione il progetto così com è o spendere altro tempo per migliorarlo. Dopo aver discusso con un gruppo di specialisti hardware, deve decidere tra due alternative: a. Lasciare il progetto così com è: la macchina viene chiamata Mbase, la sua frequenza di clock? 500 MHz e utilizzando un simulatore vengono ottenute le misure riportate in tabella b. Ottimizzare l hardware: il gruppo di specialisti sostiene di poter migliorare il progetto del processore in modo da ottenere una macchina Mopt con frequenza 600 MHz. Utilizzando un simulatore si ottengono le misure riportate in tabella.
Valutazione Prestazioni : Esercizio 6 (CPU) Esercizio 6 (continua): Classe Mbase: CPI Freq. Mbase Mopt: CPI Freq. Mopt A 2 40% 2 40% B 3 25% 2 25% C 3 25% 3 25% D 5 10% 4 10% 1. Qual è il CPI di ciascuna macchina? CPI Mbase = 2 0.4 + 3 0.25 + 3 0.25 + 5 0.1 = 2.8 CPI Mopt = 2 0.4 + 2 0.25 + 3 0.25 + 4 0.1 = 2.45 Valutazione Prestazioni : Esercizio 6 (CPU) Esercizio 6 (continua): Classe Mbase: CPI Freq. Mbase Mopt: CPI Freq. Mopt A 2 40% 2 40% B 3 25% 2 25% C 3 25% 3 25% D 5 10% 4 10% 2. Quali sono i valori dei MIPS nativi di ciascuna macchina? MIPS X = IC / (Exe_Time X 10 6 ) = (IC F X ) / (CPI IC 10 6 ) = F X / (CPI 10 6 ) MIPS Mbase = 500 10 6 / 2.8 10 6 = 178.58 MIPS Mopt = 600 10 6 / 2.45 10 6 = 244.9
Valutazione Prestazioni : Esercizio 6 (CPU) Esercizio 6 (continua): Classe Mbase: CPI Freq. Mbase Mopt: CPI Freq. Mopt A 2 40% 2 40% B 3 25% 2 25% C 3 25% 3 25% D 5 10% 4 10% 3. Di quanto Mopt è più veloce di Mbase? Speedup = Perf Mopt / Perf Mbase = Exe_Time Mbase / Exe_Time Mopt = = (2.8 IC)/(500 10 6 ) (600 10 6 )/ (2.45 IC) = 1.37 Valutazione Prestazioni : Esercizio 6 (CPU) Esercizio 6 (continua): il gruppo che si occupa del compilatore viene a conoscenza della discussione per migliorare la macchina e propone di migliorare il calcolatore per aumentarne ulteriormente le prestazioni. La combinazione Mbase + nuovo compilatore viene chiamata Mcomp. Per quanto riguarda le istruzioni, il miglioramento viene stimato come segue: Classe Percentuale istruzioni eseguite rispetto alla macchina Mbase A 90% B 90% C 85% D 95% 4. Qual è il CPI di Mcomp? CPI Mcomp = (2 0.4 0.9 + 3 0.25 0.9 + 3 0.25 0.85 + 5 0.1 0.95) / (0.4 0.9 + 0.25 0.9 + 0.25 0.85 + 0.1 0.95) = 2.5075/ 0.8925 = 2.81
Valutazione Prestazioni : Esercizio 6 (CPU) Esercizio 6 (continua): il gruppo che si occupa del compilatore viene a conoscenza della discussione per migliorare la macchina e propone di migliorare il calcolatore per aumentarne ulteriormente le prestazioni. La combinazione Mbase + nuovo compilatore viene chiamata Mcomp. Per quanto riguarda le istruzioni, il miglioramento viene stimato come segue: Classe Percentuale istruzioni eseguite rispetto alla macchina Mbase A 90% B 90% C 85% D 95% 4. Di quanto Mcomp è più veloce di Mbase? Speedup = Perf Mcomp / Perf Mbase = Exe_Time Mbase /Exe_Time Mcomp = = (2.8 IC) / (500 10 6 ) (500 10 6 ) / (2.81 0.8925 IC) = 2.8 / (2.81 0.8925) = 1.116 Valutazione Prestazioni : Esercizio 7 (CPU) Esercizio 7: Sia M una macchina con frequenza di clock 400 Mhz. Per un insieme di benchmark viene osservata la distribuzione riportata in tabella. Viene proposta una macchina M* dove si aumenta la frequenza di clock fino ad ottenere un miglioramento della performance di 1.025 (2.5%), modificando però i CPI come riportato in tabella. Classe M: CPI distrib. M*: CPI A 2 50% 4 B 3 30% 4 C 5 15% 5 D 7 5% 5 1. Qual è la frequenza di M*? 2. Con quale frequenza di M* si ottiene esattamente la stessa performance?
Valutazione Prestazioni : Esercizio 7 (CPU) Soluzione esercizio 7: 1. Speedup = Perf M* / Perf M = Exe_Time M / Exe_Time M* = = (IC M CPI M / F M ) (F M* / IC M* CPI M* ) = 102.5/100 Poichè IC M = IC M* si ha: Speedup = ( CPI M F M* ) / (F M CPI M* ) = 102.5/100 Ma: CPI M = 0.5 2 + 0.3 3 + 1.5 5 + 0.05 7 = 3 CPI M* = 0.5 4 + 0.3 4 + 1.5 5 + 0.05 5 = 4.2 Quindi: Speedup = 3 F M* / (4.2 400 10 6 ) = 102.5/100 F M* = 102.5 4.2 400 10 6 / 100 3 = 574 10 6 2. Prestazioni uguali si hanno quando Speedup = 1 Speedup = 3 F M* / (4.2 400 10 6 ) = 1 F M* = 4.2 400 10 6 / 3 = 560 10 6 CPU + Memoria Ora cerchiamo di essere più realisti e vediamo cosa succede alle prestazioni considerando non solo la CPU ma anche la memoria
Hit & Miss Trasferimento di blocchi tra i livelli della gerarchia di memoria. Si usa la seguente terminologia: Hit (Successo) quando il blocco cercato a livello i è stato individuato Miss (Fallimento) quando il blocco cercato a livello i non è stato individuato Hit rate (%) percentuale di Hit rispetto ai tentativi fatti per accedere blocchi al livello i Miss rate (%) frequenza di Miss rispetto ai tentativi fatti per accedere blocchi al livello i Hit Time latenza di accesso di un blocco al livello i in caso di Hit Miss Penalty tempo necessario per copiare un blocco dal livello inferiore CPU + Memoria: Esercizio 1 Esercizio 1: Considerare una CPU su cui viene eseguito un programma P. Il CPI ideale è pari a 3, ma considerando i miss della cache si ottiene un CPI reale pari a 3.6. Sapendo inoltre che Miss penalty = 12 cicli e che Instruction miss rate = 4% determinare Data miss rate per il programma considerato, tenendo conto che la percentuale di load/store è del 40%. cicli tot. = CPI reale IC = CPI ideale IC + (IC perc. load/store Data miss rate Miss penalty) + (IC Instruction miss rate Miss penalty) cicli tot. = 3 IC + (IC 0.4 Data miss rate 12) + (IC 0.04 12) = 3 IC + (IC 4.8 Data miss rate) + (IC 0.48) CPI reale = cicli tot. / IC = 3 + 4.8 Data miss rate + 0.48 Data miss rate = 3.6-3.48 / 4.8 = 0.025 cioè 2.5%
Memoria Ora passiamo all organizzazione, dimensionamento, indirizzamento della memoria cache. Anche queste scelte influenzano le prestazioni complessive della macchina. Memoria: Esercizio 2 Esercizio 2: Considerare una cache 4-way associative in cui la parte dati è di 8KB e avente blocchi da 32B. L indirizzo fisico è di 16 bit. a. Determinare la suddivisione dell indirizzo fisico nei campi TAG, INDEX, OFFSET 1 Blocco = 32 B ==> OFFSET = log 2 32 = 5 bit Tot. blocchi =Cache size /Block size =8KB/32B = 2 13 /2 5 = 2 8 blocchi Poichè la cache è 4-way associative si hanno 2 8 /2 2 = 2 6 set Quindi INDEX = 6 bit e i rimanenti 5 bit sono per TAG
Memoria: Esercizio 2 (continua) Esercizio 2: Considerare una cache 4-way associative in cui la parte dati è di 8KB e avente blocchi da 32B. L indirizzo fisico è di 16 bit. b. Determinare se gli indirizzi 0xAFAF e 0xAFB0 sono inseriti nello stesso insieme della cache. TAG INDEX OFFSET 0xAFAF = 1010 1111 1010 1111 = 10101 111101 01111 0xAFB0 = 1010 1111 1011 0000 = 10101 111101 10000 Quindi i contenuti dei due indirizzi si trovano nello stesso set c. Supponendo che il contenuto di 0xAFAF sia nella cache, cosa accade se tentiamo di leggere il contenuto di 0xAFB0? I due indirizzi hanno lo stesso TAG!! Quindi se il contenuto di 0xAFAF si trova nella cache, allora c è anche il contenuto di 0xAFB0. Memoria: Esercizio 2 (continua) Esercizio 2: Considerare una cache 4-way associative in cui la parte dati è di 8KB e avente blocchi da 32B. L indirizzo fisico è di 16 bit. d. Cosa succede invece per gli indirizzi 0xAFAF e 0xA7B0? TAG INDEX OFFSET 0xAFAF = 1010 1111 1010 1111 = 10101 111101 01111 0xA7B0 = 1010 0111 1011 0000 = 10100 111101 10000 Anche in questo caso, i contenuti dei due indirizzi si trovano nello stesso set. Ma ora i due indirizzi hanno TAG diverso!! Quindi, se il contenuto di 0xAFAF si trova nella cache, non è detto che ci sia anche il contenuto di 0xAFB0.
Memoria: Esercizio 2 (continua) Esercizio 2: Considerare una cache 4-way associative in cui la parte dati è di 8KB e avente blocchi da 32B. L indirizzo fisico è di 16 bit. d. Cosa succede invece per gli indirizzi 0xAFAF e 0xA7B0? TAG INDEX OFFSET 0xAFAF = 1010 1111 1010 1111 = 10101 111101 01111 0xA7B0 = 1010 0111 1011 0000 = 10100 111101 10000 e. E... se la cache fosse 2-way associative? Tot. blocchi = 2 8 & cache 2-way associative ==> 2 8 / 2 = 2 7 Cioè INDEX = 7 bit...e i due indirizzi considerati sono su set diversi! TAG INDEX OFFSET 0xAFAF = 1010 1111 1010 1111 = 1010 1111101 01111 0xA7B0 = 1010 0111 1011 0000 = 1010 0111101 10000 Memoria: Esercizio 2 (continua) Esercizio 2: Considerare una cache 4-way associative in cui la parte dati è di 8KB e avente blocchi da 32B. L indirizzo fisico è di 16 bit. f. Cosa succede dei campi TAG, INDEX e OFFSET se invece la cache è completamente associativa?? 1 Blocco = 32 B ==> OFFSET = log 2 32 = 5 bit Tot. blocchi =Cache size/block size =8KB/32B = 2 13 /2 5 = 2 8 blocchi Poichè la cache è completamente associativa c è un unico set con 2 8 blocchi. Allora INDEX = 0 bit e TAG = 16-5 = 11 bit
Memoria Memoria cache: qualcosa sui conflitti... Memoria: Esercizio 3 Esercizio 3: Si consideri una cache 1-way associative (diretta) indirizzabile, rispetto a indirizzi fisici di 16 bit, mediante 4 bit OFFSET, 4 bit INDEX e 8 bit TAG. Si consideri inoltre la seguente sequenza di indirizzi di memoria fisica, ognuno dei quali corrisponde ad un accesso in lettura: 1. 0x7F5A 2. 0x3CC7 3. 0x7F5B 4. 0x10C2 5. 0x8F50 Si supponga che ogni blocco della cache sia inizialmente NON VALIDO. a. Quali saranno i blocchi VALIDI alla fine della sequenza di lettura? Rispetto agli indirizzi della sequenza, i blocchi interessati sono quelli con INDEX = 5 (cioè il sesto blocco) e INDEX = C (cioè il tredicesimo blocco). Questi saranno quindi gli unici blocchi VALIDI
Memoria: Esercizio 3 (continua) Esercizio 3: Si consideri una cache 1-way associative (diretta) indirizzabile, rispetto a indirizzi fisici di 16 bit, mediante 4 bit OFFSET, 4 bit INDEX e 8 bit TAG. Si consideri inoltre la seguente sequenza di indirizzi di memoria fisica, ognuno dei quali corrisponde ad un accesso in lettura: 1. 0x7F5A 2. 0x3CC7 3. 0x7F5B 4. 0x10C2 5. 0x8F50 b. Si verificano conflitti durante la sequenza di lettura? Se si, quali? " Gli accessi in memoria 1 e 3 fanno riferimento allo stesso blocco della cache, ma non si verifica conflitto. " L accesso in memoria 4 è in conflitto con il 2: il 4 rimuoverà dalla cache il blocco corrispondente al 2. " L accesso in memoria 5 è in conflitto con il 3 e 2: il 5 rimuoverà dalla cache il blocco corrispondente agli accessi 3 e 2. Memoria: Esercizio 3 (continua) Esercizio 3: Si consideri una cache 1-way associative (diretta) indirizzabile, rispetto a indirizzi fisici di 16 bit, mediante 4 bit OFFSET, 4 bit INDEX e 8 bit TAG. Si consideri inoltre la seguente sequenza di indirizzi di memoria fisica, ognuno dei quali corrisponde ad un accesso in lettura: 1. 0x7F5A 2. 0x3CC7 3. 0x7F5B 4. 0x10C2 5. 0x8F50 c. Come si presenta la cache (i blocchi VALIDI) alla fine della sequenza di lettura?
Memoria: Esercizio 3 (continua) Esercizio 3: Si consideri una cache 1-way associative (diretta) indirizzabile, rispetto a indirizzi fisici di 16 bit, mediante 4 bit OFFSET, 4 bit INDEX e 8 bit TAG. Si consideri inoltre la seguente sequenza di indirizzi di memoria fisica, ognuno dei quali corrisponde ad un accesso in lettura: 1. 0x7F5A 2. 0x3CC7 3. 0x7F5B 4. 0x10C2 5. 0x8F50 c. Se la cache è 2-way associative, si verificano conflitti durante la sequenza di lettura? Se si, quali?? Questa volta INDEX si riferisce ai set, e ogni set contiene due blocchi (In totale allora ci sono 32 blocchi). Non si verificano conflitti. Memoria: Esercizio 3 (continua) Esercizio 3: 1. 0x7F5A 2. 0x3CC7 3. 0x7F5B 4. 0x10C2 5. 0x8F50 La situazione dei blocchi validi alla fine della sequenza di lettura è:
Memoria Memoria virtuale: interazione con la memoria cache Memoria: Esercizio 4 Esercizio 4: Si consideri un sistema di memoria virtuale paginata, con pagine di 2KB e una cache (indirizzabile tramite l indirizzo fisico) con blocchi di dati di 16B. Considerare il seguente loop che accede ad un array di interi (memorizzati su 4B) for (i=0; i<2048; i++) if (a[i]%2) a[i]--; Si supponga inoltre che la porzione di memoria virtuale acceduta dal loop non sia inizialmente presente, nè in memoria fisica nè in cache. a. Che tipo di località sfrutta il loop? Spaziale, perchè elementi vicini vengono riferiti in sequenza; Temporale, quando la stessa locazione viene acceduta sia in lettura che in scrittura.
Memoria: Esercizio 4 (continua) Esercizio 4: Si consideri un sistema di memoria virtuale paginata, con pagine di 2KB e una cache (indirizzabile tramite l indirizzo fisico) con blocchi di dati di 16B. Considerare il seguente loop che accede ad un array di interi (memorizzati su 4B): for (i=0; i<2048; i++) if (a[i]%2) a[i]--; Si supponga inoltre che la porzione di memoria virtuale acceduta dal loop non sia inizialmente presente, nè in memoria fisica nè in cache. b. Rispetto all esecuzione del loop contare il numero di page fault, sia nel caso che l indirizzo virtuale &a[0] sia un multiplo della dimensione della pagina, sia nel caso che questo non sia vero. 2048 locazioni di interi ==> 2048 4B = 8KB per memorizzare l array. Se &a[0] è un multiplo della dimensione della pagina, si hanno in totale 8KB / 2KB = 4 page fault. Altrimenti si hanno 5 page fault. Memoria: Esercizio 4 (continua) Esercizio 4: Si consideri un sistema di memoria virtuale paginata, con pagine di 2KB e una cache (indirizzabile tramite l indirizzo fisico) con blocchi di dati di 16B. Considerare il seguente loop che accede ad un array di interi (memorizzati su 4B): for (i=0; i<2048; i++) if (a[i]%2) a[i]--; Si supponga inoltre che la porzione di memoria virtuale acceduta dal loop non sia inizialmente presente, nè in memoria fisica nè in cache. c. Rispetto all esecuzione del loop contare il numero di cache miss, sia nel caso in cui l indirizzo fisico corrispondente ad &a[0] sia un multiplo del blocco della cache, sia nel caso in cui questo non sia vero Se &a[0] è un multiplo della dimensione del blocco allora: 8KB / 16B = 2 13 B / 2 4 B = 2 9 = 512 cache miss Se invece &a[0] non è un multiplo della dimensione del blocco, si hanno 513 cache miss
Memoria: Esercizio 4 (continua) Esercizio 4: Si consideri un sistema di memoria virtuale paginata, con pagine di 2KB e una cache (indirizzabile tramite l indirizzo fisico) con blocchi di dati di 16B. Considerare il seguente loop che accede ad un array di interi (memorizzati su 4B): for (i=0; i<2048; i++) if (a[i]%2) a[i]--; Si supponga inoltre che la porzione di memoria virtuale acceduta dal loop non sia inizialmente presente, nè in memoria fisica nè in cache. d. Perchè non è stato necessario dare informazioni sul tipo di organizzazione della cache, o sulla politica di rimpiazzamento delle pagine della memoria virtuale? Perchè abbiamo considerato solo Compulsory Miss, che dipendono solo dalle dimensioni (dell array e delle memorie) e non dalle specifiche organizzazioni dei livelli di memoria Memoria Memoria principale: indirizzi virtuali e indirizzi fisici.
Memoria: Esercizio 5 Esercizio 5: Si consideri un sistema di memoria virtuale e page table di dimensione 8MB con valid e dirty bit. Ogni pagina è di 1024B e l indirizzo fisico è di 24 bit. Qual è la dimensione dell indirizzo virtuale? Ogni pagina è di 1024B = 2 10 B e quindi sono necessari 10 bit per indirizzare ciascun byte di ogni pagina (10 bit DISPLACEMENT) Quindi i 24 bit dell indirizzo fisico comprendono 10 bit di displacement e 14 bit per indirizzare le pagine Allora ogni ingresso della Page Table è composto dei 2 bit per valid e dirty, e 14 bit per indirizzare le pagine ==> 16 bit in totale (2B) Il numero totale di ingressi della Page Table è 8MB/2B=4MB=2 22 B e servono quindi 22 bit per indirizzarle. La dimensione dell indirizzo virtuale è quindi: 22bit + 10bit (displacement) = 32bit Memoria: Esercizio 6 Esercizio 6: Si consideri un sistema di memoria virtuale paginata, con pagine di 1KB e indirizzo virtuale di 32bit. Si consideri una TLB 2-way-associative di 512B, in cui ciascun elemento consiste di 4B suddivisi in 2 bit per valid e dirty, TAG e il corrispondente numero di pagina fisica. Derivare la dimensione dell indirizzo fisico. 1. Troviamo quanti bit sono necessari per il displacement di pagina: La pagina ha dimensione 1KB = 2 10 B e quindi servono 10 bit per il displacement di pagina. Quindi dei 32 bit dell indirizzo virtuale, 22 bit servono per indirizzare gli elementi della page table.
Memoria: Esercizio 6 (continua) Esercizio 6: Si consideri un sistema di memoria virtuale paginata, con pagine di 1KB e indirizzo virtuale di 32bit. Si consideri una TLB 2-way-associative di 512B, in cui ciascun elemento consiste di 4B suddivisi in 2 bit per valid e dirty, TAG e il corrispondente numero di pagina fisica. Derivare la dimensione dell indirizzo fisico. 1. Troviamo quanti bit sono necessari per il displacement di pagina: 2. Vediamo com è composto l indirizzo di TLB: tot. elementi TLB = 512B / 4B = 128 elementi tot. insiemi TLB = 128 / 2 = 64 (essendo la TLB 2-way associative) Quindi l indirizzo virtuale, letto come indirizzo di TLB, è così composto: Memoria: Esercizio 6 (continua) Esercizio 6: Si consideri un sistema di memoria virtuale paginata, con pagine di 1KB e indirizzo virtuale di 32bit. Si consideri una TLB 2-way-associative di 512B, in cui ciascun elemento consiste di 4B suddivisi in 2 bit per valid e dirty, TAG e il corrispondente numero di pagina fisica. Derivare la dimensione dell indirizzo fisico. 1. Troviamo quanti bit sono necessari per il displacement di pagina: 2. Vediamo com è composto l indirizzo di TLB: 3. Troviamo la dimensione dell indirizzo fisico: Ogni elemento della TLB è di 32 bit (come specificato) di cui 2 bit (valid, dirty) + 16 bit TAG + num.pag.fisica = 32 bit Quindi num.pag.fisica = 14 bit e dim. indirizzo fisico è di 14+10 = 24 bit.
Memoria Page Table & TLB (Translation Lookaside Buffer) Dischi: misure di prestazioni tempo (o latenza) di accesso = costante + tempo di trasferimento tempo di trasferimento = dim. blocco / banda di trasferimento costante = seek + lat. rotazione + overhead del controller seek = tempo medio necessario per posizionare le testine sul cilindro opportuno lat. rotazione = tempo medio di attesa del settore opportuno = 0.5 t.rotazione = 0.5 60 / RPM overhead del controller = ritardo dovuto al controller
Dischi: Esercizio 7 Esercizio 7: Si consideri un sistema con CPU a 400MHz e disco con frequenza di trasferimento di 16MB/s. Il processore si fa carico di gestire l I/O tra disco e memoria, impiegando 160 cicli di clock per trasferire blocchi di lunghezza fissa. Quando il disco è usato al massimo, il processore usa il 40% del tempo per la gestione dell I/O. Qual è la dimensione dei blocchi trasferiti da disco? tempo di trasferimento = dim. blocco / banda di trasferimento L inverso del tempo di trasferimento di un blocco misura quanti blocchi al secondo si possono trasferire (frequenza), ovvero il numero massimo di operazioni di I/O al secondo. Quindi: n. max I/O al sec. = banda di trasferimento / dim. blocco dim. blocco = banda di trasferimento / n. max I/O al sec. n.cicli al sec. per I/O = perc. I/O Freq. CPU = 0.4 400 10 6 =160 10 6 n. max I/O al sec. = n.cicli al sec. per I/O /n.cicli cicli per accesso = 160 10 6 / 160 = 10 6 Quindi dim.blocco = (16 MB/s ) / 10 6 = 16B Dischi: Esercizio 8 Esercizio 8: Si consideri un programma che legge blocchi di 2KB da disco, li elabora, e li riscrive su disco. Le tre fasi non hanno sovrapposizioni. Il processore è a 500MHz e la fase di elaborazione di ogni blocco costa 10 milioni di cicli. I parametri del disco sono: 6200 RPM, seek = 9 msec, banda di trasferimento = 10 MB/sec, overhead controller = 1.5 msec. a. Calcolare le prestazioni del sistema in termini di banda di elaborazione complessiva, cioè di blocchi letti+elaborati+scritti (les) al secondo. t_les (di un blocco) = 2 t.accesso + t.elab banda_les = 1 / t_les (numero di blocchi elaborati al secondo) t.elab = n.cicli impiegati / Frequenza = 10 10 6 / 500 10 6 = 20msec t.accesso = seek + lat.rotazione + overhead + t.trasferimento lat.rotazione = 0.5 60/RPM = 05 60 /6200 = 0.0048 sec = 4.8 msec t.trasferimento=dim.blocco/banda trasf = 2KB /10 MB/sec=0.2msec t.accesso = 9msec + 4.8msec + 1.5msec + 0.2msec = 15.5 msec t_les_a = 2 15.5msec + 20msec = 51msec banda_les_a = 1 / (51 10-3 ) = 19.6
Dischi: Esercizio 8 (continua) Esercizio 8: Si consideri un programma che legge blocchi di 2KB da disco, li elabora, e li riscrive su disco. Le tre fasi non hanno sovrapposizioni. Il processore è a 500MHz e la fase di elaborazione di ogni blocco costa 10 milioni di cicli. I parametri del disco sono: 6200 RPM, seek = 9 msec, banda di trasferimento = 10 MB/sec, overhead controller = 1.5 msec. b. Valutare, calcolando i relativi Speedup, se è meglio comprare un nuovo processore a 800MHz, oppure cercare di ottimizzare il tempo medio di seek fino a 4.5 msec. t_les (di un blocco) = 2 t.accesso + t.elab t.elab = n.cicli impiegati / Frequenza = 10 10 6 / 800 10 6 = 12.5msec t_les_b1 = 2 15.5msec + 12.5msec = 43.5msec banda_les_b1 = 1 / (43.5 10-3 ) = 23 Speedup = banda_les_b1 / banda_les_a = 23 / 19.6 = 1.17 t.accesso = 4.5msec + 4.8msec + 1.5msec + 0.2msec = 11 msec t_les_b2 = 2 11msec + 20msec = 42msec banda_les_b2 = 1 / (42 10-3 ) = 23.8 Speedup = banda_les_b2 / banda_les_a = 23.8 / 19.6 = 1.21 Meglio migliorare il tempo di seek