Influenza dell` I/O sulle prestazioni (globali) di un sistema

Influenza dell' I/O sulle prestazioni (globali) di un sistema
Tempo totale per l'esecuzione di un programma
= tempo di CPU + tempo di I/O
Supponiamo di avere un programma che viene eseguito in 100
secondi e che 90 di questi secondi siano di CPU, 10 siano dedicati
ad operazioni di I/O.
Supponiamo inoltre che le prestazioni della CPU possano
migliorare nei prossi 5 anni del 50% ogni anno ma che la gestione
dell' I/O rimanga immutata.
Di quanto sara' più veloce il nostro programma tra 5 anni?
-------------------------------------------------------------------------------Miglioramento del tempo di CPU del 50% :
Speedup =
Performance anno(i+1)
CPU anno(i)
--------------------------- = ----------------- = 3/2
Performance anno(i)
CPU anno(i+1)
CPUanno(i) = CPUanno(i+1) + 1/2 CPU CPUanno(i+1) = 3/2 CPUanno(i+1)
tempo di CPU iniziale
tempo di CPU dopo 1 anno
tempo di CPU dopo 2 anni
tempo di CPU dopo 3 anni
tempo di CPU dopo 4 anni
tempo di CPU dopo 5 anni
= CPUanno(0) = 90 sec.
= CPUanno(1) = 2/3 ×90 = 60 sec.
= CPUanno(2) = 2/3 ×60 = 40 sec.
= CPUanno(3) = 2/3 ×40 ~ 27sec.
= CPUanno(4) = ~18 sec.
= CPUanno(5) = ~12 sec.
Dopo 5 anni lo speedup per il tempo di CPU e'
tempo di CPU iniziale
90
-------------------------------- = ----- = 7.5
tempo di CPU dopo 5 anni
12
Poiché il tempo di I/O non varia, il tempo totale passa da
100 a 22 secondi. Lo speedup totale è quindi
tempo totale iniziale
100
-------------------------------- = ------ = 4.5
tempo totale dopo 5 anni
22
La percentuale di tempo di I/O rispetto al tempo totale è
aumentata negli anni:
% I/0
% I/0
% I/0
% I/0
% I/0
% I/0
iniziale
= tempo I/O / tempo
dopo 1 anno = tempo I/O / tempo
dopo 2 anni = tempo I/O / tempo
dopo 3 anni = tempo I/O / tempo
dopo 4 anni = tempo I/O / tempo
dopo 5 anni = tempo I/O / tempo
(anno 0) = 10/100=10%
(anno 1) = 10/70 = 14%
(anno 2) = 10/50 = 20%
(anno 3) = 10/37 = 27%
(anno 4) = 10/28 = 36%
(anno 5) = 10/22 = 45%
Dischi magnetici o Hard disk
Parametri significativi
•Numero di piatti.
•Diametro dei piatti (unità di misura: inch)
•Numero delle tracce
•Numero dei settori
•Dimensione del settore (unità di misura: byte)
•Frequenza di rotazione (unità di misura: RPM - numero di
rotazioni al minuto)
Cilindro: tutte le tracce sotto la testina di lettura in un dato istante.
I tempi di accesso al disco dipendono dai tempi dedicati alle
tre operazioni necessarie per accedere ad un dato:
•Tempo di posizionamento (seek time).
Seek: è l'operazione di posizionamento della testina di
lettura/scrittura sulla traccia desiderata.
(Tempo medio: tra gli 8 e i 20 ms)
•Ritardo di rotazione (rotational latency o rotational delay).
Quando la testina è posizionata sulla traccia corretta si deve
attendere che la rotazione del disco porti il settore desiderato
sotto la testina. Chiaramente dipende dalla frequenza di
rotazione e dalla distanza del settore considerato.
Come tempo medio si considera il tempo di una mezza
rotazione, può essere tra 4 e 8 ms.
•Tempo di trasferimento.
E' il tempo impiegato nel trasferimento di un blocco di bit
(generalmente un settore). Questo dato dipende dalla
dimensione del settore e dalla frequenza di trasferimento.
Questa può variare tra 2 e 15 MB/sec.
Considerando anche il controllo, ai tempi precedenti si deve
aggiungere un'ulteriore componente: tempo del controllo.
Esempio
Si supponga di avere un disco con settori di 512 byte, che ruota a
5400 RPM, con tempo medio di posizionamento (seek time) = 12
ms, frequenza di trasferimento pari a 5 MB/sec ed un tempo di
controllo di 2 ms.
Il tempo medio di posizionamento è dato dal problema = 12 ms.
Il ritardo medio di rotazione, con una rotazione di 5400 RPM è
0.5 rotazione
0.5 × 60 sec
3 sec
----------------------------- = ------------------- = --------- = 5.6 ms
5400 rotazione /minuto
5400
540
Il tempo di trasferimento si ottiene considerando la dimensione del
settore (512 byte) e la frequenza di trasferimento (5 MB/sec).
512 byte
------------ =
5 MB/sec
0.5 KB
----------- = 0.1 ms
5 KB/ ms
Il tempo di controllo è dato dal problema: 2 ms.
Sommando: (12 + 5.6 + 0.1 + 2 =) 19.7 ms
Osservazione
Di norma quando si considera la banda di trasmissione nell’I/O
(bandwidth) la misurazione si fa in base 10.
Esempio: 100 KB/sec = 100 000 =100 × 103 byte/sec
20 MB/sec = 20 000 000 =20 × 106 byte/sec
Diversamente, quando si considerano le capacità di memoria si
considerano le potenze di 2.
Esempio: 1 KB
2 KB
4 KB
1 MB
= 1024 byte = 210 byte
= 2048 byte = 211 byte
= 4096 byte = 212 byte
= 1 048 576 byte = 220 byte
Questo puo’introdurre degli errori ma normalmente si accetta
l’approssimazione.
=============
Esempio: Quanto tempo serve per trasferire 1 MB di dati con una
frequenza di trsferimento di 1 MB/sec?
1 MB di dati = 1 048 576 byte
trasferimento di 1 MB /sec = 1 000 000 byte/sec
1 048 576 / 1 000 000 = 1. 048 576 ~ 1
I BUS
Collegamenti tra dispositivi I/O e CPU/Memoria
Un bus è un canale di comunicazione condiviso che offre il
vantaggio di un facile estensione delle interconnessioni (è facile
aggiungere nuovi dispositivi) ma anche lo
svantaggio di essere un collo di bottiglia per le comunicazioni (e
quindi influire negativamente sulle prestazioni del sistema di I/O).
Fattori fisici limitanti: lunghezza del bus e
numero di dispositivi collegati.
Linee di controllo
Memoria
Processore
Linee Dati
Le linee di controllo vengono usate per segnalare delle richieste,
confermare la ricezione o indicare il tipo di dato che sta
transitando sulle linee dei dati.
Le linee dei dati trasportano dati, comandi complessi, indirizzi …
Una tipica transazione sul bus si compone delle due parti:
•invio dell’indirizzo
•trasmissione (spedizione o ricezione) dei dati
e si distingue nei due tipi:
•di read: dalla memoria al processore o ad un dispositivo di I/O
•di write: scrittura dei dati in memoria
ma si usano anche i termini:
•di input (per il processore): dai dispositivi I/O alla memoria
•di output (per il processore): dalla memoria ai dispositivi I/O
Esempio: input da disco alla memoria
Memoria
Linee di controllo – richiesta scrittura
Processore
Linee Dati - indirizzo
Richiesta di scrittura (nella memoria)
Memoria
Linee di controllo
Linee Dati
Trasferimento dei dati
Processore
Esempio: output dalla memoria a disco
Memoria
Linee di controllo: richiesta lettura
Processore
Linee Dati : indirizzo
Richiesta di lettura (dalla memoria)
Memoria
Linee di controllo
Processore
Linee Dati
Accesso ai dati in memoria
Memoria
Linee di controllo – dati disponibili
Linee Dati
Trasferimento dei dati
Processore
Tipi di Bus
•Bus processore-memoria: sono caratterizzati dal fatto d’essere
corti, ad alta velocità e progettati tenendo conto delle
caratteristiche della memoria. Sono in genere progettati per un
singolo calcolatore.
•Bus di I/O: sono generalmente lunghi, devono essere
utilizzabili da molti dispositivi diversi. Sono in genere
utilizzabili su macchine diverse. Normalmente non si
interfacciano direttamente alla memoria.
Bus CPU-Memoria
CPU
adattatore
Bus
I/O
adattatore
Bus
I/O
Memoria
adattatore
Bus
I/O
•Bus generici di sistema (backplane): possono essere adottati
per tutti gli scopi. Come i bus di I/O hanno caratteristiche
standard che permettono il loro utilizzo su macchine diverse.
Bus sincroni e bus asincroni
I bus sincroni includono un clock tra le linee di controllo.
C’e’un protocollo prefissato (es: richiesta lettura dalla memoria al
primo ciclo e scrittura dati su disco al quinto ciclo) .
Svantaggi: la stessa frequenza di clock deve valere per tutti i
dispositivi collegati; i bus sincroni non possono essere troppo
lunghi per non incorrere in problemi di sfasamento.
Sono spesso sincroni i bus CPU-Memoria
(collegano dispositivi con frequenze di clock molto elevate, non a
grandi distanze)
Nei bus asincroni il coordinamento per la trasmissione NON
avviene tramite un clock ma si basa su di un protocollo detto
handshaking (stretta di mano) che stabilisce una serie di passi che
devono compiere mittente e destinatario, con il vincolo che
ciascuno inizi il passo successivo solo con l' accordo di entrambi
(stretta di mano).
Per la realizzazione di questo protocollo servono alcuni segnali e
linee di controllo.
Esempio: Richiesta di lettura di una parola di memoria.
Assumiamo le seguenti tre segnali di controllo (e quindi tre linee
di controllo)
•ReadReq. Indica una richiesta di lettura dalla memoria (viene
inviato assieme all’indirizzo)
•DataRdy. Indica che i dati richiesti sono pronti per essere
trasferiti.
•Ack. Indica che un partner ha ricevuto il segnale (di lettura o di
ready) inviato dall’altro partner. E’il segnale che permette
all’altro partner di procedere con il passo successivo.
ReadReq
1
2
3
Ack
6
2
4
5
DataRdy
7
Dati
1. Quando la memoria osserva il segnale ReadReq attivo, legge
l’indirizzo sul bus dei dati ed abilita il segnale Ack.
2. Quando il dispositivo di I/O vede il segnale Ack attivo,
disabilita il segnale ReadReq e rilascia la linea dei dati.
3. Quando la memoria vede che ReadReq è stato disabilitato,
disabilita Ack per dare un riscontro di ciò.
4. Quando la memoria ha i dati pronti attiva il segnale DataRdy e
pone i dati sulle linee dei dati.
5. Quando il dispositivo di I/O vede il segnale DataRyd attivo
legge i dati dal bus e segnala che ha prelevato i dati attivando
Ack.
6. Quando la memoria vede il segnale Ack attivo, disabilita il
segnale DataRdy e rilascia le linee dati.
7. Quando il dispositivo di I/O vede il segnale DataRdy
disattivato, disattiva anche Ack e la trasmissione si conclude.
Dispositivo I/O
Memoria
indirizzo su bus dati;
ReadReq:on
ReadReq
Ack
1
rilascia bus dati;
ReadReq:off
legge l'indirizzo
dal bus dati;
Ack:on
2
DataRdy
Legge bus dati;
Ack: on
DataRdy
ReadReq
4
3: Ack: off
Legge i dati e
li mette sul bus;
DataRdy: on
5
Ack
7: Ack: off
6
Rilascia il bus
dati;
DataRdy:off