Salta al contenuto
Note per Studenti Esercizio - Tempi di accesso al disco e capacità (slide di esercizi, eserciziario, esercizi 88, 89 e 94)

Esercizio - Tempi di accesso al disco e capacità (slide di esercizi, eserciziario, esercizi 88, 89 e 94)

In questa pagina 6

Testo.

  • Slide di esercizi, "Tempi di accesso al disco". Per trasferire 64 KB di dati da un disco rigido servono circa 9,728571 ms (senza contare l'attesa che il dispositivo o il suo canale sia libero). Il disco ha 524 288 tracce, settori da 512 B, tempo medio di posizionamento della testina 0,8 ms, velocità di rotazione 4200 rpm. Calcolare il numero totale di byte che il disco può memorizzare.
  • Esercizio 88. Disco a 7200 RPM, seek medio 3 ms, transfer rate 40 MB/s. Tempo medio per leggere 4 KB da una traccia tt; poi tempo medio per soddisfare una richiesta di 4 KB sempre relativa alla stessa traccia tt (la testina non si è ancora mossa). Si trascurano i tempi del kernel.
  • Esercizio 89. File system UNIX (UFS o EXT2) con blocchi da 4 KB, disco con tseek=10t_{\text{seek}}=10 ms a 7200 RPM; è stato aperto un file i cui blocchi sono sulla stessa traccia del rispettivo inode. (a) Quanto si impiega per accedere direttamente alla posizione 10 000 del file? (b) E alla posizione 100 000?
  • Esercizio 94. Un disco ha un tempo medio di servizio di 15 ms senza cache; con la cache attiva e hit ratio dell'80%, il tempo di servizio è di 6 ms. Calcolare il valore che deve avere l'hit ratio perché il tempo di servizio diventi 4,2 ms, a parità delle altre condizioni. Il tempo di servizio è la somma del tempo di servizio del disco (per i casi in cui non si usa la cache) e di quello della cache (quando il dato si trova nella cache).

Teoria: Memoria di massa e scheduling del discoLa memoria di massa è fatta di dischi rigidi (HDD: piatti, tracce, cilindri, settori) e memorie non volatili NAND (SSD); tempo di accesso HDD = seek + latenza rotazionale (mezzo giro, 30/RPM secondi), tempo di I/O = accesso + trasferimento + overhead del controller; i blocchi sono indirizzati con un LBA lineare; per l'HDD si minimizza il seek con FCFS, SSTF (rischio di starvation), SCAN (ascensore) e C-SCAN (più uniforme), con le varianti LOOK e C-LOOK e il deadline di Linux; per le NVM contano FTL, garbage collection, overprovisioning e wear leveling; il sistema operativo formatta (fisico e logico), partiziona, gestisce il boot e lo spazio di swap; parità ed ECC rilevano e correggono errori; il RAID usa striping, mirroring e parità (livelli 0, 1, 4, 5, 6, 10) per più velocità e affidabilità, con MTTDL = 1/PDL.Memoria di massa e scheduling del disco →.


Le formule

Tlat=30RPM s,Tacc=Tseek+Tlat,TI/O=Tacc+Ttrasf+Tctrl.T_{\text{lat}}=\frac{30}{\text{RPM}}\ \text{s},\qquad T_{\text{acc}}=T_{\text{seek}}+T_{\text{lat}},\qquad T_{I/O}=T_{\text{acc}}+T_{\text{trasf}}+T_{\text{ctrl}}.

Il tempo di trasferimento è dati/velocitaˋ\text{dati}/\text{velocità}. Se la richiesta è sulla stessa traccia della precedente, il seek è nullo.

Slide: capacità del disco

Il tempo totale di 64 KB è TI/O=TS+TL+Tt=9,728571T_{I/O}=T_S+T_L+T_t=9{,}728571 ms, con:

  1. TS=0,8T_S=0{,}8 ms;
  2. TL=30/4200=7,142857T_L=30/4200=7{,}142857 ms (mezzo giro a 4200 rpm: un giro dura 60/4200=14,28571460/4200=14{,}285714 ms);
  3. quindi Tt=9,728571−0,8−7,142857=1,785714T_t=9{,}728571-0{,}8-7{,}142857=1{,}785714 ms: il tempo per trasferire 64 KB.

Un giro completo dura TR=2TL=14,285714T_R=2T_L=14{,}285714 ms e in un giro passano sotto la testina tutti i dati di una traccia. In TtT_t passano 64 KB, quindi la traccia contiene

64 KB⋅TRTt=64⋅14,2857141,785714=64⋅8=512 KB.64\ \text{KB}\cdot\frac{T_R}{T_t}=64\cdot\frac{14{,}285714}{1{,}785714}=64\cdot8=512\ \text{KB}.

Il disco ha 524 288 tracce (cioè 2192^{19}):

512 KB⋅524 288=268 435 456 KB=256 GB512\ \text{KB}\cdot524\,288=268\,435\,456\ \text{KB}=\mathbf{256\ GB}

(precisamente 256256 GiB, perché si usano le potenze di 2). Si noti che 512 KB per traccia sono 1024 settori da 512 B.

Esercizio 88

  • Latenza media: Tlat=30/7200 s=4,167T_{\text{lat}}=30/7200\ \text{s}=4{,}167 ms (mezzo giro; un giro è 60/7200=8,3360/7200=8{,}33 ms).
  • Trasferimento di 4 KB a 40 MB/s: 4⋅102440⋅10242\dfrac{4\cdot1024}{40\cdot1024^2} s =440⋅1024=\dfrac{4}{40\cdot1024} s =9,77⋅10−5=9{,}77\cdot10^{-5} s ≈0,098\approx0{,}098 ms.

Prima richiesta (traccia tt qualunque): Tmedio=Tseek+Tlat+Ttrasf=3+4,167+0,098=7,27 msT_{\text{medio}}=T_{\text{seek}}+T_{\text{lat}}+T_{\text{trasf}}=3+4{,}167+0{,}098=\mathbf{7{,}27\ ms} (la soluzione del corso scrive 7,268 ms perché usa 4,17 ms).

Seconda richiesta, stessa traccia: la testina è già lì, non c'è seek: Tmedio′=Tlat+Ttrasf=4,167+0,098=4,27 msT'_{\text{medio}}=T_{\text{lat}}+T_{\text{trasf}}=4{,}167+0{,}098=\mathbf{4{,}27\ ms} (4,268 nel corso).

Esercizio 89

Blocchi da 4 KB: nella soluzione del corso si approssimano 4000 byte per blocco (4096 se si è esatti: cambia solo il blocco in cui cade la posizione, non il risultato qui). Con Tlat=4,17T_{\text{lat}}=4{,}17 ms (mezza rotazione a 7200 RPM).

(a) Posizione 10 000. 10 000/4096=2,4410\,000/4096=2{,}44: cade nel terzo blocco del file (indice 2), un blocco diretto dell'inode. L'inode è già in memoria (file aperto): serve 1 accesso al disco, con seek più latenza:

T=10+4,17=14,17 ms.T=10+4{,}17=\mathbf{14{,}17\ ms}.

(b) Posizione 100 000. 100 000/4096=24,4100\,000/4096=24{,}4: indice 24, cioè oltre i 12 puntatori diretti: cade in un blocco raggiungibile tramite il blocco indiretto singolo. Servono 2 accessi al disco: il blocco indiretto (per trovare l'indirizzo) e poi il blocco dati. Poiché i blocchi sono tutti sulla stessa traccia, il seek si paga una volta sola, la latenza due volte:

T=10+4,17+4,17=18,34 ms.T=10+4{,}17+4{,}17=\mathbf{18{,}34\ ms}.

(Il tempo di trasferimento di 4 KB è trascurabile rispetto a seek e latenza.)

Esercizio 94

Sia ss il tempo di servizio, sd=15s_d=15 ms quello del disco, scs_c quello della cache, hh l'hit ratio:

s=sd(1−h)+sc h.s=s_d(1-h)+s_c\,h.

Passo 1: il tempo di servizio della cache. Con h=0,8h=0{,}8 e s=6s=6: 6=15⋅0,2+sc⋅0,8⇒sc=6−30,8=3,75 ms6=15\cdot0{,}2+s_c\cdot0{,}8\Rightarrow s_c=\dfrac{6-3}{0{,}8}=\mathbf{3{,}75\ ms}.

Passo 2: l'hit ratio per s=4,2s=4{,}2 ms. 4,2=15(1−h)+3,75 h=15−11,25 h⇒h=15−4,215−3,75=10,811,25=0,964{,}2=15(1-h)+3{,}75\,h=15-11{,}25\,h\Rightarrow h=\dfrac{15-4{,}2}{15-3{,}75}=\dfrac{10{,}8}{11{,}25}=\mathbf{0{,}96}.

L'hit ratio deve salire dall'80% al 96%.


Errori tipici

  • Usare l'intera durata di un giro come latenza media (è mezzo giro, 30/RPM30/\text{RPM}).
  • Pagare il seek anche per due richieste sulla stessa traccia: nel secondo caso dell'88 non c'è.
  • Nell'89(b), pagare il seek due volte: blocco indiretto e blocco dati sono sulla stessa traccia.
  • Scambiare i ruoli di sds_d e scs_c nella formula del tempo di servizio.
  • Convertire male KB/s e MB/s nel tempo di trasferimento.

Versione ripasso

Formule. Tlat=30/RPMT_{\text{lat}}=30/\text{RPM} s (mezzo giro), Tacc=Tseek+TlatT_{\text{acc}}=T_{\text{seek}}+T_{\text{lat}}, TI/O=Tacc+dati/velocitaˋ+TctrlT_{I/O}=T_{\text{acc}}+\text{dati}/\text{velocità}+T_{\text{ctrl}}; stessa traccia: seek nullo.

Capacità (slide). 4200 rpm: TL=30/4200=7,1429T_L=30/4200=7{,}1429 ms, Tt=9,7286−0,8−7,1429=1,7857T_t=9{,}7286-0{,}8-7{,}1429=1{,}7857 ms (64 KB); giro TR=2TL=14,2857T_R=2T_L=14{,}2857 ms; traccia =64⋅TR/Tt=512=64\cdot T_R/T_t=512 KB; disco =512 KB⋅524 288=256=512\text{ KB}\cdot524\,288=256 GB.

88. Tlat=4,17T_{\text{lat}}=4{,}17 ms, trasferimento 4/(40⋅1024)4/(40\cdot1024) s =0,098=0{,}098 ms. Prima richiesta 3+4,17+0,098=7,273+4{,}17+0{,}098=7{,}27 ms; seconda (stessa traccia) 4,17+0,098=4,274{,}17+0{,}098=4{,}27 ms.

89. (a) posizione 10 000: blocco diretto, 1 accesso: 10+4,17=14,1710+4{,}17=14{,}17 ms. (b) posizione 100 000: blocco indiretto singolo, 2 accessi, seek una sola volta: 10+4,17+4,17=18,3410+4{,}17+4{,}17=18{,}34 ms.

94. s=sd(1−h)+schs=s_d(1-h)+s_ch; sc=(6−15⋅0,2)/0,8=3,75s_c=(6-15\cdot0{,}2)/0{,}8=3{,}75 ms; h=(15−4,2)/(15−3,75)=0,96h=(15-4{,}2)/(15-3{,}75)=0{,}96.

Passaggi. Capacità: TL=30/4200=7,1429T_L=30/4200=7{,}1429 ms; Tt=9,7286−0,8−7,1429=1,7857T_t=9{,}7286-0{,}8-7{,}1429=1{,}7857 ms; traccia 64⋅14,2857/1,7857=51264\cdot14{,}2857/1{,}7857=512 KB; 512⋅524 288512\cdot524\,288 KB =256=256 GB. Es. 88: 4,174{,}17 ms di latenza, 0,0980{,}098 ms di trasferimento: 7,277{,}27 ms (con seek) e 4,274{,}27 ms (stessa traccia). Es. 89: (a) 1 accesso, 14,1714{,}17 ms; (b) 2 accessi (indiretto), seek una sola volta, 18,3418{,}34 ms. Es. 94: sc=3,75s_c=3{,}75 ms, h=0,96h=0{,}96.

Errori tipici: latenza di un giro intero; seek pagato per richieste sulla stessa traccia o due volte nel caso indiretto; ruoli di sds_d e scs_c scambiati; unità del trasferimento.

Teoria: Memoria di massa e scheduling del discoLa memoria di massa è fatta di dischi rigidi (HDD: piatti, tracce, cilindri, settori) e memorie non volatili NAND (SSD); tempo di accesso HDD = seek + latenza rotazionale (mezzo giro, 30/RPM secondi), tempo di I/O = accesso + trasferimento + overhead del controller; i blocchi sono indirizzati con un LBA lineare; per l'HDD si minimizza il seek con FCFS, SSTF (rischio di starvation), SCAN (ascensore) e C-SCAN (più uniforme), con le varianti LOOK e C-LOOK e il deadline di Linux; per le NVM contano FTL, garbage collection, overprovisioning e wear leveling; il sistema operativo formatta (fisico e logico), partiziona, gestisce il boot e lo spazio di swap; parità ed ECC rilevano e correggono errori; il RAID usa striping, mirroring e parità (livelli 0, 1, 4, 5, 6, 10) per più velocità e affidabilità, con MTTDL = 1/PDL.Memoria di massa e scheduling del disco →.

Teoria collegata