Puuhakemistoista flash-levyllä Antti Tikka Espoo 23.10.2009 Seminaari HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos
HELSINGIN YLIOPISTO HELSINGFORS UNIVERSITET UNIVERSITY OF HELSINKI Tiedekunta/Osasto Fakultet/Sektion Faculty/Section Matemaattis-luonnontieteellinen tdk Tekijä Författare Author Antti Tikka Työn nimi Arbetets titel Title Puuhakemistoista flash-levyllä Laitos Institution Department Tietojenkäsittelytieteen laitos Oppiaine Läroämne Subject Tietojenkäsittelytiede Työn laji Arbetets art Level Seminaari Aika Datum Month and year 23.10.2009 Sivumäärä Sidoantal Number of pages 7 Tiivistelmä Referat Abstract Suuret flash-levyt ovat tulleet houkuttelevaksi vaihtoehdoksi magneettisille kovalevyille johtuen niiden nopeasta hajaluvusta, pienestä virrankulutuksesta ja muista ominaisuuksista. Kuitenkin kirjoitukset, erityisesti hajakirjoitukset ovat huomattavasti hitaampia johtuen siitä, että levyllä oleva vanha tieto on pyyhittävä pois ennen kuin sen tilalle voidaan kirjoittaa uutta tietoa. Tästä johtuen kovalevyillä käytettävät B+-puut eivät sovellu käytettäväksi flash-levyillä. Tässä kirjoituksessa esitellään FD-puu, hakemistorakenne, joka on suunniteltu erityisesti flashlevyä varten. Tämä tietorakenne sisältää pienen B+-puun ja useita järjestettyjä taulukoita. FDpuuta käyttämällä pystytään vähentämään hajakirjoitusten määrää hakemista kuitenkaan hidastamatta. Kirjoituksessa osoitetaan teoreettisesti ja kokeellisesti, että FD-puu voittaa flashlevyä käytettäessä muut puutietorakenteet sekä haku- että kirjoitusvaltaisilla kuormilla. ACM B.3, H.2.2, E.1 Avainsanat Nyckelord Keywords tietokanta, flash, puu, hakemisto, tietorakenne Säilytyspaikka Förvaringställe Where deposited Muita tietoja Övriga uppgifter Additional information
Sisältö 1 Johdanto... 1 2 FD-puun rakenne... 2 3 Haku FD-puusta... 3 4 Lisäys FD-puuhun... 4 5 Poisto ja päivitys FD-puussa... 4 6 Testituloksia... 5 7 Yhteenveto... 7
1 1 Johdanto Flash-muistit tai SSD-levyt ovat tulleet uudeksi pysyvän tallennuksen vaihtoehdoksi perinteisen kovalevyn rinnalle. Flash-muistien etuja ovat tiedon nopea hajasaanti, alhainen virrankulutus ja erinomainen iskunkestävyys. Lisäksi flash-muistien kapasiteetti kaksinkertaistuu joka vuosi. Hiljattain on arveltu, että flash-muistit voivat syrjäyttää kovalevyt ja antaa paremman suorituskyvyn tietokantapalvelimissa. Puuhakemisto ovat yleisin tietokannoissa käytetty tiedonhakumenetelmä. Tässä kirjoituksessa tarkastellaan miten puuhakemisto tulisi toteuttaa flash-muisteja varten, jotta flash-muistin ominaisuuksista saataisiin mahdollisimman suuri hyöty [YBQ09]. Kovalevyillä tietosivun lukemiseen tai kirjoittamiseen kuluva aika koostuu pääasiassa hakuvarren siirrosta ja levyn pyörähdysviiveestä. Flash-muisteja käytettäessä aikaa ei kulu osien liikutteluun. Tämän vuoksi tiedon hajasaanti on noin 100 kertaa nopeampaa kuin kovalevyillä. Flash-muistit ovat kuitenkin EEPROM-tyyppisiä (electrically-erasable programmable read-only memory) mikä tarkoittaa, että flash-muisteja käytettäessä uutta tietoa ei voida kirjoittaa vanhan päälle vaan vanhat tiedot on ensin tyhjennettävä iso lohko kerrallaan. Näin ollen jokainen kirjoitusoperaatio voi vaatia ison lohkon tyhjentämistä. Lohkon tyhjentäminen flash-muistista on erityisen hidasta. Tästä johtuen tiedon kirjoittaminen hajanaisiin paikkoihin on noin 100 kertaa hitaampaa kuin lukeminen. Kuten taulukosta 1 näkyy Samsung 32 GB flash-muisti suorittaa sekunnissa 3100 hajalukua, mutta vain 25 hajakirjoitusta. Vaikka viime aikoina on valmistettu tehokkaampia flash-muisteja kuten Intel exreme, niiden hajakirjoitus on kuitenkin noin 10 kertaa hitaampaa hajalukuun nähden. Samsung 32 GB SSD Intel extreme 32/64 GB SSD Seagate 7200 RPM SATA kovalevy Hajaluku 3100 35000 100 Hajakirjoitus 25 3300 110 Taulukko 1. SSD- ja kovalevyjen luku- ja kirjoitusnopeudet (operaatiota/sekunti). Tässä kirjoituksessa esitellään FD-puu, jossa tietojen päivitystä on pyritty tehostamaan hakemista kuitenkaan hidastamatta. Tämä on puuhakemisto, jossa on otettu huomioon flash-muistien eritysominaisuudet. Tehostaminen saadaan aikaan tietorakenteella, jossa kirjoittaminen tapahtuu harvoin ja suurissa peräkkäisiä tietueita käsittävissä erissä. FD-puu koostuu pienestä B+-puusta, jota kutsutaan pääpuuksi (head tree) ja muutamasta tasosta järjestettyjä taulukoita (sorted run) pääpuun alla. Uudet tietueet lisätään pääpuuhun, josta ne ajoittain siirretään alempien tasojen järjestettyihin taulukoihin.
2 Luvussa 2 esitellään FD-puun rakenne. Luvuissa 3, 4 ja 5 tarkastellaan tietojen hakua, lisäystä, poistoa ja päivitystä FD-puussa. Luvussa 6 esitellään testituloksia ja vertaillaan erityyppisten puiden tehokkuutta erilaisissa tilanteissa. Luvussa 7 esitetään yhteenveto kirjoituksesta. 2 FD-puun rakenne FD-puu koostuu useista tasoista, joista käytetään merkintöjä L 0, L 1, jne. Ylin taso L 0 on B+-puu, jota kutsutaan pääpuuksi. Muut tasot L 1 :stä alaspäin ovat järjestettyjä taulukoita, jotka on tallennettu fyysisesti peräkkäisille sivuille. Kuvassa 1 on esitetty esimerkki FD-puun rakenteesta. Kuvan puussa on kolme tasoa, pääpuu ja kaksi järjestettyä taulukkoa. Pääpuun lehtisivuilta viitataan alemman tason järjestetyn taulukon sivuille. Kultakin järjestetyn taulukon ei-lehtisivuilta viitataan alemmalla tasolla olevaan järjestettyyn taulukkoon. Kuva 1. Esimerkki FD-puun rakenteesta. Jokaisella FD-puun tasolla on kiinteä kapasiteetti, joka kasvaa eksponentiaalisesti puuta alaspäin edettäessä. Päivitykset tehdään ensin pääpuuhun ja myöhemmin siirretään alemmilla tasoilla oleviin järjestettyihin taulukoihin. Koska pääpuu mahtuu kokonaan keskusmuistiin, flash-levylle ei ole yleensä tarpeen kirjoittaa yksittäisten FD-puuhun tehtävien päivitysten yhteydessä. Pääpuun koko valitaan siten, että se mahtuu yhteen flash-levyltä kerralla tyhjennettävään lohkoon. FD-puuta voidaan päivittää keskusmuistista flash-levylle suurissa useita fyysisesti peräkkäisiä sivuja sisältävissä lohkoissa, mikä on tehokasta flash-levyn ominaisuuksista johtuen. FD-puussa on kahdenlaisia tietueita: hakemistotietueita (index entry) ja aitoja (fence). Hakemistotietue sisältää kolme kenttää avaimen, monikkotunnisteen ja tyypin, jota käytetään apuna tietueiden poistamisprosessissa. Aita on osoitin FD-puun alemman tason sivulle. Siinä on kolme kenttää: avain, sivutunniste ja tyyppi. Aidat jaetaan edelleen ulkoisiin ja sisäisiin aitoihin.
3 o Ulkoinen aita (external fence). Ulkoisen aidan avaimeksi otetaan suurimman tietueen avain viitattavalta alemman tason sivulta. Esimerkiksi kuvassa 1 näkyvän sivun f tietue 46 on ulkoinen aita. o Sisäinen aita (internal fence). Jos kahden vierekkäisen ulkoisen aidan väliin jää tietueita vähintään yhden sivun verran, sisäisiä aitoja lisätään kunkin väliin jäävän sivun viimeiseksi tietueeksi. Sisäisen aidan avaimen arvo otetaan viittaavan sivun viimeisestä hakemistotietueesta. Kuvan 1 sivun f tietue 53 on sisäinen aita, joka viittaa sivulle n. Tämän aidan avulla voidaan välttää sivun g lukeminen kun haetaan avaimia väliltä 47 53. Kullakin FD-puun tasolla aidat ja hakemistotietueet järjestetään avainten arvojen mukaan nousevaan järjestykseen. Ulkoisten aitojen määrä kullakin tasolla on yhtä suuri kuin sivujen määrä alemmalla tasolla. Sisäisiä aitoja on enintään yksi per sivu. 3 Haku FD-puusta Haettaessa yksittäistä arvoa tai arvoväliä FD-puusta, kaikki tasot käydään läpi ylhäältä alaspäin. Ensin haetaan pääpuusta samoin kuin mistä tahansa B+-puusta. Seuraavaksi edetään kaikki järjestettyjen taulukoiden tasot läpi yksi kerrallaan. Yksittäisen sivun sisällä käytetään binäärihakua ensimmäisen tietueen löytämiseksi. Tämän jälkeen sivua selataan tietue kerrallaan ja ehdot täyttävät tietueet lisätään tulosjoukkoon. Sitten siirrytään aidan sivutunnisteen perusteella alemman tason sivulle. Kuvassa 2 on esitetty esimerkki avaimen 48 hakemisesta FD-puusta. Kuva 2. Esimerkki avaimen 48 hausta FD-puusta.. Haku FD-puusta ei välttämättä ole hitaampi kuin B+-puusta. Vaikka FD-puu voikin olla korkeampi kuin samankokoinen B+-puu, FD-puussa on kaksi hakua tehostavaa ominaisuutta. Ensinnäkin FDpuun sivut ovat täynnä tietueita ja yhden tason tietueet sijaitsevat muistissa fyysisesti peräkkäin. Kun taas B+-puussa sivut ovat yleensä noin 70 % täynnä. Toiseksi FD-puussa ei ole
4 vanhenemisongelmaa kuten B+-puussa, jossa lehtisivujen sijainnit hajaantuvat fyysisesti suurelle alueelle kun päivityksiä on tehty suuri määrä. 4 Lisäys FD-puuhun Uutta tietuetta lisättäessä tietue lisätään ensin pääpuuhun L 0. Jos tietueiden määrä pääpuussa ylittää sen kapasiteetin, siirretään L 0 tason tietueet L 1 tasolle lomittamalla tasot keskenään. Yleisesti ottaen lomitusoperaatio suoritetaan kahdelle vierekkäiselle tasolle aina kun niistä pienempi ylittää kapasiteettinsa. Operaatiossa selataan molempien tasojen tietueet järjestyksessä ja yhdistetään ne yhdeksi järjestetyksi taulukoksi peräkkäisille sivuille. Uusi järjestetty taulukko L i sisältää kaikki alemman tason hakemistotietueet sekä kaikki ylemmän tason L i-1 hakemistotietueet ja ulkoiset aidat. Uusia sisäisiä aitoja lisätään uuteen järjestettyyn taulukkoon tarpeen mukaan. Lomitusoperaation yhteydessä lomitusta ylemmät tasot päivitetään ulkoisten aitojen osalta. Näin ollen tasojen L i -1 ja L i lomittamisessa on päivitettävä tasot L 0 :sta L i :hin. eli i + 1 tasoa. Jos kahden tason lomituksessa syntyvä uusi taso L i ylittää kapasiteettinsa, tasot L i ja L i+1 lomitetaan myös. Lomittamista jatketaan kunnes lomituksen tuloksena saatava taso ei ylitä kapasiteettiaan. 5 Poisto ja päivitys FD-puussa Tietueen poistaminen FD-puusta tehdään lisäämällä puuhun erityinen suodintietue. Tällöin poistettavasta tietueesta tulee ns. haamutietue ja se jätetään puuhun sellaisenaan. Tarkastellaan nyt poistamisprosessia. Ensin FD-puusta haetaan poistettavat tietueet. Seuraavaksi puuhun lisätään suodintietueet, joiden avaimet ja monikkotunnisteet vastaavat poistettavia tietueita. Uusien tietueiden lisäyksellä yksinkertaisen poistamisen sijaan pystytään vähentämään pienten hajakirjoitusten määrää. Koska poistamisessa lisättävät suodintietueet tekevät poistettavista tietueista haamutietueita, hauissa saataviin hakutuloksiin tulee näitä molempia tyyppejä. Näin ollen hakutuloksista on poistettava suodintietueet ja näiden avainten ja monikkotunnisteiden arvoja vastaavat haamutietueet. Lomitusoperaatiossa suodintietueet ja haamutietueet siirretään muiden tietueiden mukana alemmille tasoille. Kun suodintietueet ja niitä vastaavat haamutietueet lomituksen yhteydessä kohtaavat toisensa samalla tasolla, ne jätetään tallentamatta uuteen järjestettyyn taulukkoon. Näin ollen suodin- ja haamutietueet lopulta poistetaan kokonaan. Kuvassa 3 on esitys poistamisprosessin eri vaiheista. Suodintietueet on merkitty siinä yhtenäisellä alleviivauksella ja haamutietueet katkonaisella alleviivauksella. Kuvassa 2(a) poistetaan
5 hakemistotietueet 37 tasolta L 0, 45 tasolta L 2 ja toinen 16 tasolta L 2. Koska tietue 37 on pääpuussa L 0, se poistetaan suoraan tasolta L 0. Suodintietueet 45 ja 16 lisätään pääpuuhun. Kun tasot L 0 ja L 1 lomitetaan kuten kuvassa 2(b) näytetään, suodintietue 45 kohtaa haamutietueensa ja molemmat tietueet jätetään tallentamatta. Kun tasot L 1 ja L 2 lomitetaan kuten kuvassa 2(c) on esitetty, suodintietue 16 ja sitä vastaava haamutietue jätetään pois. Huomattakoon, että ensimmäinen 16 tietue jää indeksiin lomituksen jälkeen. Kuva 3. Esimerkki tietueiden poistamisesta FD-puusta. Päivitysoperaatio eli olemassa olevan tietueen arvon muuttaminen toteutetaan FD-puussa poistamalla vanhaa arvoa vastaava tietue ja lisäämällä uusi tietue uudella arvolla. 6 Testituloksia Tarkastellaan nyt testaustuloksia, ja verrataan FD-puun suorituskykyä B+-puuhun, LSM-puuhun, BFTL:ään, joka on flash-muistia varten kehitetty B+-puun variaatio. Testit on ajettu PC:llä, jossa on Intel QuadCore CPU 2,4 GHz, Windows XP, 2 GB keskusmuistia ja 32 GB Samsung NAND flashlevy. Hakemistotietueet sisältävät 4-tavuisen avaimen ja toisen 4-tavuisen kentän, jossa on tyyppi ja monikkotunniste. Avainten arvot ovat tasaisesti jakautuneet. Sivun kooksi on asetettu 2 KB, joka on fyysinen sivun koko flash-muistissa. Käytössä on LRU-puskurinhallitsin, jotta viimeisimpinä käytetyt sivut saataisiin välimuistiin. Puskurin kooksi on asetettu 8 MB. Käyttöjärjestelmän puskurointi on kytketty pois päältä häiriöiden minimoimiseksi. Kuvassa 3 on esitetty haun tehokkuus neljälle erityyppiselle puuhakemistolle, kun hakemiston kokoa on muunneltu. Neljästä eri puutyypistä BFTL on hitain, koska se vaatii useiden hajanaisten sivujen lukemista puusolmun käsittelemiseksi. B+-puu ja FD-puu ovat parhaita ja ne suoriutuvat melko samalla tavalla hakemiston koosta riippumatta. FD-puu on hiukan nopeampi kuin B+-puu, koska järjestettyjen taulukoiden sivut ovat täysiä ja tallennettuna fyysisesti peräkkäin. LSM-puu on hitaampi kuin B+-puu tai FD-puu, koska yksittäinen haku LSM-puusta vaatii hakemista useasta eri B+-puusta.
6 Kuva 3. Haun tehokkuus hakemiston koon funktiona. Kuvassa 4 on esitetty lisäysoperaation tehokkuus neljälle erityyppiselle puuhakemistolle kun hakemiston kokoa on muunneltu. Neljästä erityyppisestä hakemistosta lisäysoperaatio on hitain B+puussa ja nopein LSM-puussa. Lisäysoperaation tehokkuus FD-puussa on hiukan hitaampi kuin LSM-puussa. Tämä johtuu siitä, että FD-puussa on enemmän aputietueita (esim. aitoja) kuin LSMpuussa. Kuitenkin LSM-puu ja FD-puu ovat kertaluokkaa nopeampia kuin B+-puu ja BFTL. Kuva 4. Lisäysoperaation tehokkuus hakemiston koon funktiona. Kuvassa 5 on esitetty neljän erityyppisen puuhakemiston kokonaistehokkuus kahdella eri työkuormalla. Kaikki neljä indeksiä sisältävät 10 9 tietuetta. Niiden koot ovat noin 8 GB. Pystyakselilla on keskimääräinen operaation suoritukseen kuluva aika. Kuvassa vaaka-akselilla näkyvä W-search simuloi hakuvaltaista työkuormaa. Se sisältää 80 % hakuja, 10 % lisäyksiä, 5 % päivityksiä ja 5 % poistoja. Kuvassa vaaka-akselilla oleva W-update simuloi päivitysvaltaista työkuormaa. Se sisältää 20 % hakuja, 40 % lisäyksiä, 20 % poistoja ja 20 % päivityksiä. W-search-
7 kuormalla flash-levyä käytettäessä FD-puu on 15.8X, 2.3X, 5.2X nopeampi kuin B+-puu, LSM-puu ja BFTL. W-update-kuormalla flash-levyä käytettäessä FD-puu on 61.4X, 1.7X, 4.9X nopeampi kuin B+-puu, LSM-puu ja BFTL. Kuva 5. Kahden eri kuormitustavan kokonaissuorituskyky. 7 Yhteenveto B+-puut on suunniteltu kovalevyä varten eivätkä näin ollen sovellu käytettäväksi flash-levyllä. FDpuu on suunniteltu erityisesti flash-levyä varten. Tämä puutietorakenne hyödyntää flash-muistin erityispiirteitä nopeita hajalukuja ja vähentämällä hitaiden hajakirjoitusten määrää. Kirjoituksessa esitellyt teoreettiset ja kokeelliset tutkimukset osoittavat, että FD-puussa yhdistyvät haun ja lisäysten kannalta parhaat piirteet muista puuhakemistoista ja, että se voittaa nämä puuhakemistorakenteet suorituskyvyltään sekä haku- että päivityspainotteisilla kuormilla. Lähteet YBQ09 Yinan, L., Bingsheng, H., Qiong, L., Ke, Y., Tree indexing on flash disks. ICDE 2009