Astăzi vom vorbi despre o tehnologie interesantă implementată în sistemul de stocare Unity/Unity XT, – FAST VP. Dacă auziți pentru prima dată despre Unity, puteți consulta specificațiile sistemului prin linkul de la sfârșitul articolului. În echipa de proiect Dell EMC am lucrat la FAST VP mai bine de un an. Astăzi vreau să vă povestesc mai în detaliu despre această tehnologie și să dezvălui câteva detalii ale implementării sale. Desigur, doar acelea care îmi sunt permise să le dezvălui. Dacă sunteți interesat de întrebarile legate de stocarea eficientă a datelor sau pur și simplu nu v-ați lămurit complet cu documentația, atunci acest articol va fi cu siguranță util și interesant.

Voi spune imediat ce nu va conține materialul. Nu va include cercetarea concurenților și comparația cu aceștia. De asemenea, nu intenționez să vorbesc despre tehnologii similare din open source, pentru că cititorul curios știe deja despre ele. Și, desigur, nu intenționez să fac nicio reclamă.
Stocarea pe niveluri. Scopurile și obiectivele FAST VP
FAST VP este prescurtarea pentru Fully Automated Storage Tiering for Virtual Pool. Sună complicat? Nimic, acum ne vom lămuri. Tiering-ul este un mod de organizare a stocării datelor, în care există mai multe niveluri (tiers) unde aceste date sunt stocate. Fiecare are propriile caracteristici. Cele mai importante sunt: performanța, volumul și prețul pentru o unitate de informație. Desigur, există o interconexiune între ele.
O caracteristică importantă a tiering-ului este că accesul la date este uniform, indiferent de nivelul de stocare pe care se află în acel moment, iar dimensiunea pool-ului este egală cu suma dimensiunilor resurselor care îl compun. Aici se află diferențele față de cache: dimensiunea cache-ului nu se adaugă la volumul total al resursei (pool-ului în acest caz), iar datele din cache își duplică un anumit fragment de date de pe suportul principal (sau vor duplica, dacă datele din cache nu au fost încă scrise). De asemenea, distribuția datelor pe niveluri este ascunsă de utilizator. Adică, utilizatorul nu vede exact ce date sunt plasate pe fiecare nivel, deși poate influența acest lucru indirect, prin stabilirea politicilor (despre acestea mai târziu).
Acum să ne uităm la caracteristicile implementării stocării pe niveluri în Unity. În Unity se disting 3 niveluri, sau tiers:
- Performanță extremă (SSDs)
- Performanță (SAS HDD 10k/15k RPM)
- Capacitate (NL-SAS HDD 7200 RPM)
Ele sunt prezentate în ordine descrescătoare a performanței și prețului. În Extreme performance sunt incluse exclusiv unități de stocare de tip SSD. Celelalte două niveluri conțin unități pe discuri magnetice, diferite prin viteza de rotație și, prin urmare, prin performanță.
Discurile de stocare din același nivel și dimensiune sunt grupate într-un RAID, formând un RAID group; informațiile despre nivelurile RAID disponibile și recomandate pot fi găsite în documentația oficială. Grupurile RAID din unul sau mai multe niveluri formează pool-uri de stocare (Storage pool), din care este apoi distribuit spațiul liber. Apoi, din pool este alocat spațiu pentru sisteme de fișiere și LUN-uri.

De ce am nevoie de Tiering?
Pe scurt și abstract: pentru a obține un rezultat mai bun, folosind un minim de resurse. Dacă ne referim mai concret, rezultatul se referă de obicei la un ansamblu de caracteristici ale SDD – viteza și timpul de acces, costul de stocare și altele. Minim de resurse se referă la cele mai mici cheltuieli: bani, energie și așa mai departe. FAST VP implementează tocmai mecanismele de redistribuire a datelor pe diferite niveluri în SDD Unity/Unity XT. Dacă mă credeți, puteți sări la următorul paragraf. Pentru ceilalți, vă voi explica puțin mai în detaliu.
O distribuție corectă a datelor pe nivelurile de stocare permite economisirea pe costul total al SDD-ului, sacrificând viteza de acces la unele informații rar utilizate, și îmbunătățește performanța, mutând datele utilizate frecvent pe suporturi mai rapide. Aici cineva ar putea obiecta că și fără tiering, un administrator normal știe unde să plaseze care date, ce caracteristici ale SDD-ului sunt dorite pentru sarcina sa etc. Fără îndoială, este adevărat, dar distribuția datelor „manual” are propriile dezavantaje:
- necesită timp și atenție din partea administratorului;
- nu reușește întotdeauna să „reconfigureze” resursele SDD-ului în funcție de condițiile schimbate;
- dispare un avantaj important: accesul unificat la resursele aflate pe diferite niveluri de stocare.
Pentru a reduce îngrijorările administratorilor de storage legate de securitatea locului de muncă, vreau să adaug că o planificare judicioasă a resurselor este, de asemenea, necesară. Acum, când sarcinile de tiering sunt prezentate în linii mari, să vedem ce putem aștepta de la FAST VP. Aici este momentul să revenim la definiție. Primele două cuvinte – Fully Automated – se traduc literal ca „complet automatizat” și înseamnă că distribuția pe niveluri se face automat. Iar Virtual Pool este un pool de date care reunește resurse din diferite niveluri de stocare. Iată cum arată:

Înaintându-mă, voi menționa că FAST VP mută date doar în cadrul unui singur pool, nu între mai multe pools.
Sarcinile rezolvate de FAST VP
Să discutăm mai întâi la nivel abstract. Avem un pool și un mecanism care poate redistribui datele în interiorul acestui pool. Ținând cont că scopul nostru este de a atinge performanța maximă, să ne punem întrebarea: prin ce metode putem realiza acest lucru? Pot exista mai multe modalități, iar FAST VP are multe de oferit utilizatorului, deoarece tehnologia reprezintă ceva mai mult decât simplu tiering de storage. Iată cum poate FAST VP să crească performanța pool-ului:
- Distribuția datelor pe diferite tipuri de discuri, niveluri
- Distribuția datelor între discuri de același tip
- Redistribuția datelor atunci când pool-ul este extins
Înainte de a analiza modul în care aceste sarcini sunt îndeplinite, trebuie să știm câteva fapte necesare despre modul în care funcționează FAST VP. FAST VP operează pe blocuri de dimensiuni specifice – 256 megabiți. Aceasta este dimensiunea minimă a unui „bucată” continuă de date care poate fi mutată. În documentație, i se spune pur și simplu: slice. Din perspectiva FAST VP, toate grupurile RAID sunt formate dintr-un set de astfel de „bucăți”. Prin urmare, toate statisticile de intrare-ieșire sunt acumulate pentru aceste blocuri de date. De ce a fost ales acest dimensiune a blocului și va fi redus? Blocul este destul de mare, dar reprezintă un compromis între granularitatea datelor (cu cât dimensiunea blocului este mai mică – cu atât distribuția este mai precisă) și resursele computaționale disponibile: având în vedere limitările existente ale memoriei RAM și numărul mare de blocuri, statisticile de date pot ocupa prea mult, iar numărul de calcule va crește proporțional.
Cum FAST VP plasează datele în pool. Politici
Pentru a gestiona plasarea datelor într-un pool cu FAST VP activat, există următoarele politici:
- Cel mai înalt nivel disponibil
- Auto-Tier
- Începe de sus, apoi Auto-Tier (implicit)
- Cel mai scăzut nivel disponibil
Acestea influențează atât plasarea inițială a blocului (când datele sunt scrise pentru prima dată), cât și redistribuția ulterioară. Odată ce datele sunt plasate pe discuri, redistribuția va fi inițiată conform unui program sau manual.
Cel mai înalt nivel disponibil încearcă să plaseze un nou bloc la cel mai performant nivel. Dacă nu este suficient spațiu, va trece la următorul nivel de performanță, dar apoi datele pot fi mutate la un nivel mai performant (dacă există spațiu sau prin eliminarea altor date). Auto-Tier plasează datele noi la diferite niveluri în funcție de dimensiunea spațiului disponibil, iar redistribuția se face în funcție de cerere și spațiul liber. Începe de sus, apoi Auto-Tier – politica implicită și de asemenea recomandată. La plasarea inițială funcționează ca cel mai înalt nivel disponibil, iar ulterior datele sunt mutate în funcție de statisticile lor de utilizare. Politica cel mai scăzut nivel disponibil caută să plaseze datele la cel mai puțin performant nivel.
Mutarea datelor se desfășoară cu prioritate scăzută pentru a nu afecta activitatea utilă a SVD, însă există o setare „Rata de relocare a datelor” care schimbă prioritatea. Aici există o particularitate: nu toate blocurile de date au aceeași ordine de redistribuire. De exemplu, blocurile marcate ca metadate vor fi mutate la un nivel mai rapid în primul rând. Metadatele reprezintă, ca să spunem așa, „date despre date”, o informație suplimentară care nu este datele utilizatorului, dar care păstrează descrierea acestora. De exemplu, informația din sistemul de fișiere despre în care bloc se află un anumit fișier. Așadar, viteza de acces la date depinde de viteza de acces la metadate. Având în vedere că metadatele sunt de obicei mult mai mici ca dimensiune, se așteaptă o câștigare mai mare prin mutarea lor pe discuri mai performante.
Criteriile pe care Fast VP le utilizează în funcționare
Criteriul principal pentru fiecare bloc, în termeni foarte generali, este caracteristica de «cerere» a datelor, care depinde de numărul de operațiuni de citire și scriere ale unui fragment de date. Această caracteristică se numește «Temperatură». Există date cerute (hot) care sunt «mai fierbinți» decât cele nefolosite. Aceasta se calculează periodic, de obicei cu un interval de o oră.
Funcția de calcul a temperaturii are următoarele caracteristici:
- În lipsa operațiunilor de intrare-ieșire, datele «se răcesc» în timp.
- În condiții de încărcare relativ constantă, temperatura crește inițial și apoi se stabilizează într-un anumit interval.
Apoi se iau în considerare politicile descrise mai sus și spațiul liber de pe fiecare tier. Pentru ilustrare, voi aduce o imagine din documentație. Aici, blocurile cu temperatură mare, medie și mică sunt evidențiate cu culorile roșu, galben și albastru, respectiv.

Dar să ne întoarcem la sarcini. Așadar, putem începe analiza a ceea ce se face pentru a rezolva sarcinile FAST VP.
A. Distribuția datelor pe diferite tipuri de discuri, niveluri
Aceasta este, de fapt, sarcina principală a FAST VP. Celelalte, într-un anumit sens, derivă din aceasta. În funcție de politica aleasă, datele vor fi distribuite pe diferite niveluri de stocare. În primul rând, se ia în considerare politica de plasare, apoi temperatura blocurilor și dimensiunea/viteza grupurilor RAID.
Pentru politicile Highest/Lowest Available Tier, totul este suficient de simplu. În cazul celorlalte două, lucrurile stau astfel. Pe diferite niveluri, datele sunt distribuite având în vedere dimensiunea și performanța grupurilor RAID: astfel încât raportul dintre «temperatura» totală a blocurilor și «performanța maximă» teoretică a fiecărui grup RAID să fie aproximativ același. Astfel, sarcina este distribuită mai mult sau mai puțin uniform. Datele mai cerute sunt mutate pe suporturi rapide, iar cele utilizate rar – pe suporturi mai lente. În ideal, distribuția ar trebui să arate aproximativ astfel:

B. Distribuția datelor între discuri de același tip
Rețineți, la început am spus că suporturile de informație din una sau mai multe Câte niveluri se combină într-un singur pool? În cazul unui singur nivel pentru FAST VP, există și muncă. Pentru a maximiza performanța oricărui nivel, este de preferat să se distribueze datele uniform între cele trei unități. Aceasta va permite (în teorie) obținerea celui mai mare număr de IOPS. Datele din interiorul grupului RAID pot fi considerate distribuite uniform pe discuri, dar între grupurile RAID acest lucru nu este întotdeauna așa. În cazul unui dezechilibru, FAST VP va muta datele între grupurile RAID proporțional cu volumul și „performanța condiționată” (în termeni numerici). Pentru a ilustra, voi prezenta un grafic de reechilibrare între trei grupuri RAID:

B. Distribuția datelor la extinderea pool-ului
Această sarcină este un caz particular al celei anterioare și se efectuează atunci când se adaugă un grup RAID în pool. Pentru ca grupul RAID proaspăt adăugat să nu rămână neutilizat, o parte din date va fi mutată pe acesta, ceea ce va redistribui și carga între toate grupurile RAID.
Uniformizarea uzurii SSD
Prin intermediul uniformizării uzurii, FAST VP poate prelungi durata de viață a SSD-urilor, deși această funcție nu se leagă direct de Storage Tiering. Deoarece deja există date despre temperatură, numărul de operațiuni de scriere este de asemenea luat în considerare, iar noi știm să mutăm blocurile de date, ar fi logic ca FAST VP să rezolve și această sarcină.
În cazul în care numărul de scrieri pe un grup RAID depășește semnificativ numărul de scrieri pe altul, FAST VP va redistribui datele în conformitate cu numărul de operațiuni de scriere. Pe de o parte, aceasta reduce sarcina și conservează resursele anumitor discuri, pe de altă parte, adaugă „muncă” pentru cele mai puțin încărcate, crescând performanța generală.
Astfel, FAST VP își asumă sarcinile tradiționale ale Storage Tiering și face și puțin mai mult decât atât. Toate acestea permit stocarea eficientă a datelor în familia de produse Unity.
Câteva sfaturi
- Nu neglijați citirea documentației. Există cele mai bune practici și acestea funcționează destul de bine. Dacă sunt respectate, în general, nu apar probleme serioase. Celelalte sfaturi repetă sau completează în mare parte aceste practici.
- Dacă ați configurat și activat FAST VP, este mai bine să-l lăsați activat. Să permită distribuirea datelor în intervalul de timp alocat, pas cu pas, decât odată pe an, influențând grav performanța altor sarcini. În astfel de cazuri, redistribuirea datelor poate dura mult timp.
- Acordați o atenție deosebită alegerii feronierului de relocare. Deși pare evident, încercați să alegeți un moment cu cea mai mică încărcare pe Unity și să alocați un interval de timp suficient.
- Planificați extinderea SYST, faceți acest lucru la timp. Este o recomandare generală, care este importantă și pentru FAST VP. Dacă volumul de spațiu liber este foarte mic, atunci și mutarea datelor va fi încetinită sau va deveni imposibilă. Mai ales dacă ați neglijat punctul 2.
- Când extindeți pool-ul cu FAST VP activat, nu trebuie să începeți cu cele mai lente discuri. Adică fie adăugați toate grupurile RAID planificate deodată, fie adăugați mai întâi cele mai rapide discuri. În acest caz, redistribuirea datelor pe noile discuri "rapide" va crește viteza generală a pool-ului. În caz contrar, începând cu discurile "lente", s-ar putea să aveți o situație foarte neplăcută. Mai întâi, se va realiza transferul datelor pe noile discuri, relativ lente, iar apoi, în momentul adăugării discurilor mai rapide, în direcția inversă. Aici sunt nuanțe legate de diferitele politici FAST VP, dar în general, o astfel de situație este posibilă.
Dacă sunteți interesat de acest produs, puteți încerca gratuit Unity în acțiune, descărcând Unity VSA virtual appliance.

În încheierea materialului, împărtășesc câteva link-uri utile:
- Pagina
- – descriere scurtă a funcției
- , format pdf
Concluzie
Aș dori să scriu multe, dar înțeleg că nu toate detaliile vor fi interesante pentru cititor. De exemplu, aș putea discuta mai pe larg despre criteriile pe baza cărora FAST VP ia decizii cu privire la transferul de date, despre procesele de analiză a statisticilor de input-output. De asemenea, nu am abordat deloc tema interacțiunii cu , iar acest lucru ar necesita un articol separat. Putem chiar să ne imaginăm despre dezvoltarea acestei tehnologii. Sper că nu a fost plictisitor și că nu v-am obosit. Până data viitoare!
Sursa: habr.com
