pühapäev, 19. detsember 2010

VHD-dest ehk De Virtuaalsetestum Kõvaketastestum

Arvutiriistvara kursuse foorumis ühele küsimusele vastates läks jutt käest lippama, ja küsimusele, mille vastamiseks 2 lauset oleks piisanud, tekkis selline moodustis. Enne postitamist lugesin küsimuse üle, ja otsustasin, et see on lihtsalt Liiga Palju Infot ja juba eelmises vastuses lühidalt räägitud jutt. Samas ei tahtnud seda teksti lihtsalt korstnasse kah kirjutada, niisiis kleepisin slle hoopis siia. Taustaks: Laiema teemana sai arutatud, miks praktikumiarvutid kõvakettatestides müstilisi (1 GB/s) lugemiskiirusi saavutavad, mis suuremad on kui SATA 300 MB/s (Ei, ma ei ajanud bitte ja baite segamini).


K: Nende arvutite sees on ju Samsung HD502HJ 7200rpm 500GB suurused kõvakettad. Kas ma olen täiesti valesti aru saanud ja need on tegelikult virtuaalsed kettad?

V: Kui me praktikumiarvuteid käivitame, siis bootoaderis kästakse meil laadida Win 7 VHD, mitte Win 7 HDD. See tähendab, et ehkki jah, arvutis on füüsiliselt eelpoolnimetatud Samsungi ketas, siis Windows jookseb VHD pealt, mis ise istub sellel Samsungi kettal.

Ise küll mingil tasemel teadlik olles, et tegu on virtuaalse kettaga füüsilise ketta failisüsteemi sügavustes, näitab Windows VHD-d ülejäänud programmidele põhimõtteliselt tavalise kettana. Veelgi enam, ta määrab selle ketta tähiseks C: ehk tähise, mis on Windowsil reserveeritud süsteemikõvakettale. Loogiline, sest parajasti jooksev opsüsteem tõesti töötabki selle pealt.

Võtame nüüd Passmarki. Kui arvutis on tavaline ketas ja teha vaikeseadetega kettatest, siis Passmark, olles uurinud välja, milline ketas istub Windowsil tähise C: all, jalutab nüüd failisüsteemist mööda ning pöördub otse kettakontrolleri draiveri poole, palvega anda talle blokis x olev info. Kettakontroller keerab lugemispea õigesse asendisse, ootab kuni vastav info kettal pea alt läbi tuhiseb ja saadab seejärel selle info Passmarkile. See võtab aega suurusjärgus 7-14 ms.

Kui aga opsüsteem jookseb virtuaalselt kettalt, siis C: tähise all ei ole mitte füüsiline ketas, vaid fail füüsilisel kettal. Kontrolleriks on draiver, mis sellise palve korral omakorda pöördub füüsilise ketta kontrolleri draiveri poole palvega tagastada talle info aadressil y (mis on erinev x-ist).

Kuna see on draiver, on sel võrreldes kontrolleriga kasutada palju rohkem mälu (arvuti peamälu), ning seal talletab ta infot, mille abil klapitada nõutud aadressid aadressidega füüsilisel kettal. Mälu poole pöördumine, sinna kirjutamine ja kustutamine on (võrreldes kettapöördumisega) kiired protsessid, seega pole sellel draiveril põhjust mälus alles hoida infot andmete kohta, mida enam tarvis ei ole.

(Taustaks: Windows 7 on esimene windowsi opsys mis toetab TRIM käsku. Kui varem mõni fail kustutati, siis muudeti ainult failisüsteemi, mitte andmeid kettal. Põhjuseks see, et kustutamine ja ülekirjutamine magnetilisel andmekandjal võtavad täpselt sama palju aega. SSD-de puhul oleks aga kasulik kui ketas teaks, millised andmed enam vajalikud ei ole, et tagada häid kirjutamiskiirusi: SSD-de puhul võtab ülekirjutamine palju rohkem aega, kui tühjale kohale kirjutamine. Selle jaoks ongi käsk TRIM, mida ka VHD saab väga edukalt ära kasutada.)

Kui sellele draiverile esitatakse failisüsteemi või Passmarki poolt palve info järgi aadressil x, ning ta avastab et tema tabelis on aadressi x kohal mingi vastav aadress y füüsilisel kettal, siis pöördub ta füüsilise ketta poole palvega tagastada andmed aadressil y. See võtab praktiliselt sama kaua aega, kui pöördumine otse ketta poole.

Ent kui aadressile x tabelis vaste y puudub, võib sellest oletada, et antud kohal on tühjus, ning et failisüsteem on selle poole pöördudes teinud vea: Failisüsteem ei tea enam kus ta failid on. See pole siiski kontrolleri (draiveri) rida sellele kuidagi reageerida või isegi märgata: tema ülesanne on tagastada, mis kettal on, küsimata, kas see ka küsijale sobib.

Niisiis: see draiverijupp, teades, et kettal on antud kohas tühjus, tagastab nullide jada. Ja siin erinebki tema käitumine kõige rohkem füüsilise ketta omast: Kuna füüsiline ketas ei tea, et seal peaks olema tühjus, teeb ta ustavalt läbi kõik needsamad operatsioonid: Liigutab pead, ootab andmeid, saadab need tagasi. Kui sealsed andmed on mõistlikud, siis saab neid kasutada, ehkki failisüsteem nende andmete olemasolust teadlik ei ole. Ja kui ei ole kasutatavad (või pole plaaniski kasutada, nagu Passmarki kiirusetesti puhul), siis on just raisatud needsamad ~7-14 ms, selle asemel et mikrosekundite jooksul mälust andmete olemasolu kontrollida ja veelkord sama aja jooksul vastuseks rodu nulle anda.

See kõik on suures osas selle baasil kirjutatud, kuidas ma arvan et selline asi võiks ja peaks töötama, nii et siin võib olla nüansse, mida ma ei ole taibanud ning see võib ka päris vale olla. Foorumisse läks sellest ainult esimene lõik.

Kommentaare ei ole: