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