Hyppää sisältöön

Lustre-tiedostojärjestelmä

CSC:n supertietokoneet käyttävät Lustrea rinnakkaisena hajautettuna tiedostojärjestelmänä. Tämä artikkeli tarjoaa lyhyen teknisen kuvauksen Lustresta.

Lustren arkkitehtuuri

Lustre erottaa tiedostodatan ja metadatan erillisiin palveluihin. Data on tiedoston varsinainen sisältö, kun taas metadata sisältää tietoja kuten tiedoston koon, käyttöoikeudet, käyttöpäivän jne.

Lustre-tiedostojärjestelmä koostuu joukosta I/O-palvelimia, joita kutsutaan nimellä Object Storage Servers (OSS), sekä levyistä, joita kutsutaan nimellä Object Storage Targets (OST), joille varsinainen data tallennetaan. Tiedoston metadataa hallitsevat Metadata Servers (MDS), ja se tallennetaan Metadata Targets (MDT) -kohteisiin. Käytännössä palvelimet käsittelevät pyynnöt tiedoston sisällön ja metadatan käyttämiseksi; sovellukset eivät käytä levyjä suoraan. Lustre-järjestelmät käyttävät tyypillisesti useita OSS-/MDS-palvelimia yhdessä useiden OST-/MDT-kohteiden kanssa tarjotakseen rinnakkaisen I/O:n ominaisuuksia.

  • Object Storage Servers (OSS): Ne käsittelevät asiakkaiden pyyntöjä tallennustilan käyttämiseksi. Lisäksi ne hallitsevat joukkoa OST-kohteita; kullakin OSS-palvelimella voi olla useampi kuin yksi OST I/O-rinnakkaisuuden parantamiseksi.
  • Object Storage Targets (OST): Yleensä OST koostuu RAID-kokoonpanon alla olevasta tallennuslaitteiden lohkosta. Data tallennetaan yhteen tai useampaan objektiin, ja kukin objekti tallennetaan erilliselle OST-kohteelle.
  • Metadata Server (MDS): Palvelin, joka seuraa kaiken datan sijainteja, jotta se voi päättää, mitä OSS- ja OST-kohdetta käytetään. Esimerkiksi kun tiedosto on avattu, MDS ei enää osallistu toimintaan.
  • Metadata Target (MDT): Tallennuskohde sisältää tietoa tiedostoista ja hakemistoista, kuten tiedostokoista, käyttöoikeuksista ja käyttöpäivistä. Kunkin tiedoston osalta MDT sisältää tietoa datan asettelusta OST-kohteissa, kuten OST-numerot ja objektitunnisteet.

"Kaaviokuva laskentasolmuista, jotka käyttävät OST- ja MDT-kohteita OSS- ja DST-palvelimien kautta verkon yli. Lyhenteet ja suhteet selitetään myös tekstissä."

Lustre-tiedostojärjestelmän näkymä

Lustre on suunniteltu tehokkaaseen rinnakkaiseen I/O:hon suurille tiedostoille. Pienten tiedostojen ja intensiivisten metadataoperaatioiden kohdalla MDS/MDT voi kuitenkin muodostua pullonkaulaksi. Esimerkiksi kun käyttäjä avaa/sulkee tiedoston monta kertaa silmukassa, MDT:n kuormitus kasvaa. Kun useat käyttäjät tekevät samankaltaisia operaatioita, metadataoperaatiot voivat hidastaa koko järjestelmää ja vaikuttaa moniin käyttäjiin. Koska kirjautumis- ja laskentasolmut jakavat saman tiedostojärjestelmän, tämä voi näkyä jopa hitaana tiedostojen muokkauksena kirjautumissolmulla. Myös silloin, jos rinnakkaissovelluksessa eri prosessit tekevät paljon operaatioita samoille pienille tiedostoille, metadataoperaatiot voivat hidastaa toimintaa. Myös viattoman näköiset Linux- komennot voivat lisätä metadatan kuormitusta: esimerkiksi ls -l tulostaa tiedoston metadatan, ja komennon antaminen hakemistossa, jossa on paljon tiedostoja, aiheuttaa paljon pyyntöjä MDS:lle.

Tiedostojen stripe-jako ja kohdistus

Jotta Lustren rinnakkaisesta I/O:sta saadaan hyötyä, datan tulee olla jaettuna useille OST-kohteille. Tätä jakamista useille OST-kohteille kutsutaan tiedoston stripe-jakamiseksi. Loogisesti tiedosto on lineaarinen tavujono. Stripe-jaossa tiedosto pilkotaan tavulohkoihin, jotka sijaitsevat eri OST-kohteilla, jolloin luku-/kirjoitus- operaatiot voidaan suorittaa samanaikaisesti.

Stripe-jako voi kasvattaa tiedostojen käytettävissä olevaa kaistanleveyttä, mutta samalla syntyy myös lisäkuormaa lisääntyneiden verkko- operaatioiden ja mahdollisen palvelinkilpailun vuoksi. Siksi stripe-jako on yleensä hyödyllistä vain suurille tiedostoille.

Koska supertietokoneissa on paljon enemmän solmuja kuin OSS-/OST-kohteita, I/O- suorituskyky voi vaihdella paljon koko supertietokoneen I/O-kuorman mukaan.

Rinnakkaisohjelmassa suorituskyky paranee, kun kukin rinnakkainen prosessi käyttää eri stripeä tiedostosta rinnakkaisen I/O:n aikana. Lisäksi verkkokilpailun välttämiseksi kunkin prosessin tulisi käyttää mahdollisimman harvoja OST-/OSS-kohteita. Tämä voidaan saavuttaa stripe-kohdistuksella. Paras suorituskyky saavutetaan, kun data jakautuu tasaisesti OST-kohteille ja rinnakkaiset prosessit käyttävät tiedostoa siirtymistä, jotka vastaavat stripe-rajoja.

"Kaavio, jossa tiedosto on jaettu lohkoihin ja kukin lohko tallennetaan eri OST-kohteelle."

Lustren tiedoston stripe-jako ja kohdistus

Jos yllä olevassa esimerkissä tiedosto olisi 5 Mt, OST 0:lla olisi ylimääräinen 1 Mt dataa. Jos data jaettaisiin tasaisesti neljän prosessin kesken, kullakin prosessilla olisi 1,5 Mt ja käyttö ei olisi stripe-kohdistettua: ensimmäisen prosessin täytyisi käyttää OST 0:aa ja 1:tä, seuraavan prosessin OST 1:tä ja 2:ta, jne. prosessit eivät olisi kohdistettuja. Tämä voisi nyt aiheuttaa verkkokilpailuongelmia.

Stripe-jaon hallinta

CSC:n Lustressa oletusstripe-koko on 1 Mt ja stripe count on 1, eli oletuksena tiedostoja ei stripe-jaeta. Stripe-asetuksia voidaan kuitenkin muuttaa käyttäjän toimesta, mikä voi parhaimmillaan parantaa I/O-suorituskykyä merkittävästi.

Tiedoston tai hakemiston stripe-asetukset voidaan tarkistaa lfs getstripe -komennolla

lfs getstripe my_file
joka tulostaa:
my_file
lmm_stripe_count:  2
lmm_stripe_size:   1048576
lmm_pattern:       raid0
lmm_layout_gen:    0
lmm_stripe_offset: 11
    obdidx         objid        objid         group
        11      29921659    0x1c8917b             0
        20      29922615    0x1c89537             0
Tuloste osoittaa, että tiedosto on jaettu kahdelle OST-kohteelle (stripe count 2), ja tuloste näyttää myös, että kyseiset OST-kohteet ovat 11 ja 20.

Hakemiston kohdalla tuloste näyttää asetukset, joita käytetään kaikille hakemistoon luotaville tiedostoille.

Stripe-kokoonpano voidaan asettaa lfs setstripe -komennolla. Useimmissa tapauksissa riittää asettaa stripe count -c- valinnalla, mutta myös muita valintoja voidaan asettaa, katso esim. man lfs-setstripe tai Lustre wiki.

mkdir experiments
lfs setstripe -c 4 experiments
touch experiments/new_file
Komennon lfs getstripe experiments/new_file suorittaminen tulostaa nyt:
experiments/new_file
lmm_stripe_count:  4
lmm_stripe_size:   1048576
lmm_pattern:       raid0
lmm_layout_gen:    0
lmm_stripe_offset: 6
    obdidx         objid        objid         group
         6      29925064    0x1c89ec8             0
         1      29925258    0x1c89f8a             0
        19      29926834    0x1c8a5b2             0
        15      29921764    0x1c891e4             0

Stripen asettaminen tiedostolle on pysyvää

Jos tiedosto on jo luotu tietyllä stripe-asetuksella, sitä ei voi muuttaa. Myöskään jos siirrät tiedoston, sen stripe-asetukset eivät muutu. Jotta stripe-jakoa voidaan muuttaa, tiedosto täytyy kopioida:

  • luo setstripe-komennolla uusi tyhjä tiedosto halutuilla stripe-asetuksilla ja kopioi sitten vanha tiedosto uuteen tiedostoon, tai
  • määritä hakemisto halutulla kokoonpanolla ja kopioi (älä siirrä) tiedosto hakemistoon.

Lustre-pakkaus

Roihun Lustre-tiedostojärjestelmässä käyttäjät voivat myös muuttaa asetuksia tiedostopakkauksen käyttöönottoa varten. Pakkaus voi merkittävästi vähentää hyvin pakkautuvien tiedostojen käyttämää fyysistä tallennustilaa, ja joissakin tapauksissa se voi myös parantaa I/O-suorituskykyä vähentämällä tallennusjärjestelmän ja laskentasolmujen välillä siirrettävän datan määrää.

Lustre-pakkausta ei vielä tueta Roihussa, ja siitä ilmoitetaan myöhemmin.

Lustren kokoonpano Roihussa

Roihussa on kolme Lustreen perustuvaa tallennusaluetta: home, project ja scratch.

Levyalue # OST:t # MDT:t
home 4 4
projappl 4 4
scratch 24 4

scratch-aluetta palvelee erillinen joukko OST- ja MDT-kohteita verrattuna home- ja projappl-alueisiin, joten yhden tallennusalueen metadatasuorituskyky ei häiritse muita.

Roihun scratch-alueen huippu-I/O-suorituskyky on kirjoituksessa 219 Gt/s ja luvussa 180 Gt/s.

Parhaat käytännöt

  • Jos mahdollista, vältä ls -l -komennon käyttöä, koska omistajuus- ja käyttöoikeusmetadata tallennetaan MDT-kohteille, kun taas tiedostokoon metadata on saatavilla OST-kohteilta. Käytä mieluummin ls, jos et tarvitse lisätietoja.

  • Vältä suuren tiedostomäärän tallentamista yhteen hakemistoon; on parempi jakaa ne useampaan hakemistoon.

  • Jos mahdollista, vältä suuren määrän pieniä tiedostoja käyttämästä Lustressa.

  • Varmista, että pienten tiedostojen stripe count on 1.

  • Jos sovellus avaa tiedoston lukemista varten, avaa tiedosto vain lukutilassa.

  • Kasvata stripe countia rinnakkaista käyttöä varten, erityisesti suurilla tiedostoilla:

    • Stripe-tekijän tulisi olla käytettyjen rinnakkaista I/O:ta suorittavien prosessien lukumäärän tekijä
    • Nyrkkisääntönä stripe-jakona kannattaa käyttää tiedostokoon neliöjuurta gigatavuina. Jos tiedosto on 90 Gt, neliöjuuri on 9,5, joten käytä vähintään 9 OST-kohdetta.
    • Jos käytät esimerkiksi 16 MPI-prosessia rinnakkaiseen I/O:hon, käytettyjen OST-kohteiden määrän tulisi olla enintään 16.

Lisätietoja on Lustren suorituskyvyn optimoinnin opetusmateriaalissa.

Onko tämä sivu hyödyllinen?
Kiitos palautteestasi!
Kiitos! Arvostamme palautettasi.

Kerro meille miten voisimme parantaa tätä sivua ottamalla meihin yhteyttä .