I/O-apparaten, schijven en RAID

Leer hoe een besturingssysteem samenwerkt met de hardware die gegevens opslaat en verplaatst. Volg een verzoek vanaf een systeemaanroep via het stuurprogramma naar het apparaat en ontdek hoe polling, interrupts en directe geheugentoegang (DMA) het werk verdelen tussen CPU en apparaat. Bereken toegangstijden van harde schijven en vergelijk beleid voor schijfplanning. Bekijk daarna hoe SSD's met flashgeheugen wisblokken en slijtage verbergen achter een vertaallaag. Bereken de capaciteit, snelheid en fouttolerantie van RAID-niveaus en gebruik controlesommen om ongemerkte gegevensbeschadiging op te sporen en te herstellen.

GemiddeldLes 7 van 9 in Cursus Besturingssystemen: processen, geheugen, threads en bestandssystemen

Wat je leert

  1. Beschrijf wat een apparaat aan het besturingssysteem laat zien en hoe de kernel polling, interrupts, directe geheugentoegang (DMA) en apparaatstuurprogramma's gebruikt om gegevens tussen geheugen en apparaten te verplaatsen.
    • Beschrijf de apparaatinterface en het basisprotocol voor I/O
      Plaats apparaten op de bussen van de computer, benoem de registers die een apparaat beschikbaar stelt en volg het eenvoudige protocol waarmee het besturingssysteem een apparaat een opdracht geeft.
    • Kies tussen polling en interrupts
      Leg uit hoe interrupts de CPU nuttig werk laten doen terwijl een apparaat bezig is, wanneer polling de betere keuze is en hoe hybride polling en interruptbundeling de overhead verminderen.
    • Verplaats gegevens met directe geheugentoegang (DMA)
      Leg uit waarom het kopiëren van gegevens met de CPU bij grote overdrachten tijd verspilt en hoe een DMA-eenheid gegevens tussen geheugen en een apparaat verplaatst terwijl de CPU ander werk doet.
    • Leg apparaatstuurprogramma's en de lagen van het opslagsysteem uit
      Laat zien hoe stuurprogramma's apparaatdetails achter algemene interfaces verbergen, volg een leesverzoek van een systeemaanroep naar het apparaat en terug, en vergelijk hoe SATA en NVMe verzoeken in wachtrijen plaatsen.
  2. Beschrijf hoe een harde schijf gegevens opslaat en bereikt, bereken de tijd en gegevenssnelheid van een I/O-bewerking en vergelijk het planningsbeleid dat zoek- en rotatietijd vermindert.
    • Beschrijf hoe een harde schijf is opgebouwd en wordt geadresseerd
      Breng de sectoradresinterface van de schijf in verband met de schijfplaten, sporen, koppen en cache en leg uit wat de schijf wel en niet garandeert.
    • Bereken de tijd en gegevenssnelheid van een I/O-bewerking op een schijf
      Verdeel een I/O-bewerking in zoeken, rotatie en overdracht, bereken elk deel uit de specificaties van een schijf en leg uit waarom willekeurige en sequentiële werklasten zo verschillend presteren.
    • Vergelijk beleid voor schijfplanning
      Orden wachtende schijfverzoeken met FCFS, SSTF, SCAN, C-SCAN, LOOK en SPTF, bereken de kopbeweging bij elk beleid en leg uit waar de planning in een modern systeem plaatsvindt.
  3. Beschrijf flashcellen, flashpagina's en wisblokken, leg uit hoe de flashvertaallaag hun beperkingen verbergt en vergelijk SSD's met harde schijven op prestaties, levensduur en kosten.
    • Beschrijf flashgeheugen: cellen, pagina's, blokken en slijtage
      Leg uit hoe NAND-flashgeheugen bits opslaat, hoe het is ingedeeld in pagina's en wisblokken, welke bewerkingen het ondersteunt en waarom het slijt.
    • Leg de flashvertaallaag uit
      Beschrijf hoe de firmware van een SSD logische blokken aan flashpagina's koppelt, schrijft zoals in een logboek, ongeldige gegevens opruimt en slijtage verdeelt. Bereken ook de schrijfversterking en de grootte van de vertaaltabel.
    • Vergelijk SSD's met harde schijven
      Vergelijk de latentie, doorvoer, levensduur, het uitvalgedrag en de kosten van SSD's en harde schijven en leg uit wat er verandert voor het besturingssysteem.
  4. Leg uit hoe een redundante schijfarray blokken plaatst met gegevensverdeling in stroken, spiegeling en pariteit, bereken de capaciteit en doorvoer voor elk RAID-niveau en kies een niveau dat past bij een werklast en de bijbehorende uitvalrisico's.
    • Leg uit wat een RAID-array biedt en hoe je die beoordeelt
      Beschrijf een RAID-array als één logische schijf die uit meerdere schijven is opgebouwd, het foutmodel en de maten waarmee RAID-niveaus worden vergeleken, en de problemen die elk ontwerp met meerdere schijven moet oplossen.
    • Plaats blokken met gegevensverdeling in stroken en spiegeling
      Bereken waar een logisch blok zich bevindt in RAID-0 en RAID-10, leg het effect van de strookdeelgrootte uit en bereken de capaciteit, betrouwbaarheid en prestaties van gegevensverdeling in stroken en spiegeling.
    • Bescherm gegevens met pariteit in RAID-4, RAID-5 en RAID-6
      Bereken XOR-pariteit, reconstrueer daarmee een verloren blok, werk pariteit bij bij een kleine schrijfbewerking en leg het probleem van kleine schrijfbewerkingen uit en hoe RAID-5 en RAID-6 ermee omgaan.
    • Kies een RAID-niveau en houd rekening met uitval en wederopbouw
      Stem RAID-niveaus af op werklasten, schat de wederopbouwtijd en het risico op onleesbare sectoren tijdens de wederopbouw en onderbouw een keuze tussen spiegeling en pariteit.
  5. Herken hoe opslagapparaten gedeeltelijk en ongemerkt falen, bereken en vergelijk controlesommen en ontwerp een opslagsysteem dat gegevensbeschadiging, schrijfbewerkingen naar een verkeerde locatie en verloren schrijfbewerkingen detecteert en herstelt met redundante kopieën.
    • Herken opslagfouten die ook zonder volledige schijfuitval optreden
      Beschrijf latente sectorfouten, ongemerkte gegevensbeschadiging, schrijfbewerkingen naar een verkeerde locatie en verloren schrijfbewerkingen, hoe vaak ze voorkomen en waarom redundantie alleen ze niet opmerkt.
    • Bereken en vergelijk controlesommen
      Bereken XOR-, optellings- en Fletcher-controlesommen, beschrijf de CRC en vergelijk controlesomfuncties op basis van de fouten die ze opsporen en hun kosten.
    • Bouw integriteitscontroles in een opslagsysteem in
      Bepaal waar controlesommen worden opgeslagen, volg het leespad dat gegevensbeschadiging detecteert en herstelt, spoor schrijfbewerkingen naar een verkeerde locatie en verloren schrijfbewerkingen op en plan periodieke gegevenscontrole en de kosten ervan.

I/O-apparaten, schijven en RAID: uitleg

5 hoofdstukken

1

Volg een I/O-verzoek van software naar hardware

Een programma kan om een gegevensblok vragen zonder te weten welke controller het ophaalt. De kernel zet dat verzoek om in registertoegangen, gegevensoverdrachten en afhandeling van de voltooiing. Volg die taken afzonderlijk: hoe een commando het apparaat bereikt, hoe de CPU erop wacht en wie de bytes verplaatst. Breng de taken daarna samen in een opslagstack waarmee veel programma's en CPU-kernen apparaten kunnen delen.

1.1 Geef een apparaat een commando

Een I/O-apparaat verplaatst gegevens naar of uit een computer of bewaart ze persistent. Een toetsenbord levert invoer; een netwerkkaart verzendt en ontvangt pakketten; een schijf bewaart gegevens nadat de stroom is uitgeschakeld. Apparaten zijn verbonden via bussen, oftewel verbindingen. PCI Express (PCIe) verbindt apparaten met hoge prestaties, zoals NVMe-SSD's. SATA en USB bedienen andere opslag- en randapparaten verderop in de hiërarchie. Snelle verbindingen zijn duurder om te bouwen en hebben strengere fysieke beperkingen, dus een computer combineert verschillende soorten.

De interface is wat de software ziet

Een controller kan processoren, geheugen en firmware bevatten, de software die binnen het apparaat draait. Het besturingssysteem bestuurt de controller via een beschikbaar gestelde hardware-interface. Twee controllers kunnen intern sterk verschillen en toch dezelfde commando's ondersteunen.

Een eenvoudig apparaat heeft drie registers:

RegisterWat de kernel te weten komt of aanlevert
StatusOf het apparaat gereed of bezig is, klaar is of een fout meldt
CommandoWelke bewerking moet starten
GegevensDe bytes die worden verzonden of ontvangen

Voor een eenvoudige uitvoerbewerking controleert de kernel eerst de status totdat het apparaat gereed is. Daarna schrijft de kernel de gegevens, schrijft het commando en controleert de status totdat de bewerking voltooid is. Tot slot controleert de kernel op een fout. Als het commando wordt geschreven voordat de gegevens zijn aangeleverd, kan een bewerking met de verkeerde inhoud starten. Het herhaaldelijk controleren van de status is polling; de CPU de bruikbare gegevens laten verplaatsen is geprogrammeerde I/O (PIO).

Benader registers veilig

Poortgeadresseerde I/O geeft registers een aparte adresruimte. Op x86 benaderen instructies zoals in en out die poorten. De kernel bepaalt welke code ze mag uitvoeren. Geheugengeadresseerde I/O (MMIO) plaatst registers in de fysieke adresruimte, zodat laad- en opslaginstructies ze kunnen bereiken via koppelingen die door de paginatabellen van de kernel worden beheerd. PCIe-apparaten gebruiken normaal gesproken MMIO.

Een MMIO-adres duidt een apparaatbewerking aan, ook al lijkt de toegang op een geheugentoegang. Een leesbewerking kan een vlag wissen. Een schrijfbewerking kan een overdracht starten. De status kan veranderen doordat het apparaat zijn werk voltooit, zonder dat de CPU naar dat adres schrijft. Gewoon cachegedrag zou die veranderingen kunnen verbergen of toegangen kunnen samenvoegen die het apparaat afzonderlijk nodig heeft.

Linux-stuurprogramma's gebruiken daarom toegangsfuncties zoals readl() en writel(), geschikte koppelingsattributen en vereiste geheugenbarrières. Een volatile pointer kan voorkomen dat de compiler toegangen verwijdert of samenvoegt, maar biedt niet alle vereiste ordening ten opzichte van gewoon geheugen of herordening door de CPU. Een commandodescriptor in RAM moet bijvoorbeeld zichtbaar zijn voor het apparaat voordat een meldingsregister het apparaat vertelt die descriptor op te halen.

Houd de besturing van apparaten in de kernel

Een toepassing roept normaal gesproken read() of write() aan. De kernel controleert de rechten en voert namens de toepassing het apparaatprotocol uit. Dit voorkomt dat één programma commando's geeft die het verzoek van een ander programma verstoren. Een gebruikersbuffer is het gegevensgebied van de toepassing; een commandoregister is het besturingspunt van de controller. Ze vervullen verschillende rollen, ook al hebben beide een adres.

Belangrijkste punten

  • De apparaatinterface verbergt de interne structuur en firmware van de controller.
  • Lever gegevens aan voordat je het eenvoudige commandoprotocol start; controleer daarna de voltooiing en eventuele fouten.
  • Polling controleert of het apparaat gereed is; PIO verplaatst gegevens met de CPU.
  • Toegang tot MMIO-registers kan neveneffecten hebben en vereist platformfuncties en ordening.
  • Via systeemaanroepen kan de kernel de gedeelde toegang tot apparaten regelen.

1.2 Bepaal hoe de CPU wacht

Een apparaat kan veel langer nodig hebben om een verzoek af te ronden dan de CPU nodig heeft om het in te dienen. De wachtstrategie bepaalt of de CPU die tijd besteedt aan het controleren van het apparaat of aan ander werk. Ze verandert niet hoe snel het apparaat zelf het verzoek voltooit.

Pollen of slapen

Bij polling leest de CPU herhaaldelijk de status. Een voltooiing kan snel worden opgemerkt, maar controles terwijl het apparaat nog bezig is, verbruiken CPU-tijd. Bij interrupts wordt een proces dat op een leesbewerking wacht geblokkeerd en kan een ander gereed proces draaien. Als het apparaat klaar is, geeft het de CPU een signaal. De interruptafhandelaar van de kernel, ook wel interruptserviceroutine genoemd, controleert de voltooiing, handelt het resultaat af en maakt het wachtende proces gereed. De scheduler bepaalt wanneer dat proces weer draait.

Stel dat proces A een schijfleesbewerking start die 10 ms duurt. Polling houdt de CPU tijdens dat wachten bezig. Bij interruptgestuurde I/O kan proces B gedurende dezelfde 10 ms berekeningen uitvoeren. De apparaatbewerking van A duurt nog steeds 10 ms; nuttige berekeningen overlappen het wachten.

Interrupts kosten ook werk: de CPU slaat de toestand op, voert de afhandelaar uit, herstelt de toestand en wisselt mogelijk van proces en vult caches opnieuw. De kosten bedragen doorgaans enkele microseconden. Als een apparaat binnen 2 µs reageert, kan een korte pollinglus goedkoper zijn dan het blokkeren en wekken van het proces. Interrupts zijn geschikt voor langzame bewerkingen; kort pollen is geschikt voor zeer snelle bewerkingen.

Pas je aan de voltooiingssnelheid en belasting aan

Een hybride strategie, in twee fasen, gebruikt eerst kort polling en slaapt daarna tot een interrupt als het verzoek nog niet voltooid is. Snelle voltooiingen vermijden de kosten van het wekken, terwijl langzame voltooiingen de CPU niet de hele tijd bezighouden. Linux ondersteunt voltooiing via polling voor geschikte snelle opslagverzoeken.

Zwaar interruptverkeer veroorzaakt een ander probleem. Als bijna elke CPU-cyclus wordt besteed aan het afhandelen van nieuw binnenkomende gebeurtenissen, krijgt de code die hun gegevens verwerkt weinig tijd om te draaien. Dit is livelock: de machine is bezig, maar de nuttige voortgang stort in. Het NAPI-netwerkmechanisme van Linux beperkt het werk aan interrupts en schakelt bij belasting over op polling van reeksen pakketten.

Interruptbundeling groepeert meerdere voltooiingen in één melding. Bij 100.000 voltooiingen per seconde en 5 µs CPU-werk per interrupt kosten afzonderlijke meldingen:

100.000×5 μs=0,5 s

Dat is elke seconde de helft van de tijd van één CPU-kern. Acht voltooiingen per interrupt combineren levert 12.500 interrupts en 62,5 ms CPU-werk per seconde op, oftewel 6,25% van een processorkern. Een verzoek kan kort op de rest van de reeks wachten, dus lagere overhead gaat samen met extra meldingslatentie.

Stuur meldingen naar de juiste kern

PCIe-apparaten gebruiken vaak MSI of MSI-X: interrupts die als berichten op een speciaal adres worden afgeleverd. Met meerdere interruptvectoren kan een apparaat voltooiingen van verschillende wachtrijen naar verschillende kernen sturen. Een NVMe-controller kan wachtrijen per kern koppelen aan geschikte interruptvectoren, zodat het indienen en afhandelen van voltooiingen dicht bij elkaar blijven. Meer vectoren ordenen het CPU-werk; ze verkorten een leesbewerking op flashgeheugen of een schijfrotatie niet.

Belangrijkste punten

  • Interrupts laten berekeningen overlappen met de tijd die het apparaat nodig heeft; een proces waarvan de bewerking is voltooid, wordt gereed voordat het draait.
  • Vergelijk bij snelle apparaten de pollingtijd met de overhead van interrupts en wekken.
  • Hybride wachten gebruikt kort polling en blokkeert daarna zo nodig.
  • Livelock verbruikt CPU-tijd zonder nuttige voortgang.
  • Interruptbundeling vermindert meldingsoverhead door enige extra latentie te accepteren.
  • MSI-X ondersteunt afzonderlijke interruptvectoren voor apparaatwachtrijen.

1.3 Draag de gegevensoverdracht over aan DMA

Wachten en kopiëren zijn afzonderlijke taken. Interrupts kunnen voorkomen dat de CPU actief wacht terwijl een apparaat werkt, maar de CPU zou nog steeds bezig zijn als die elk woord via een gegevensregister moest verplaatsen. Directe geheugentoegang (DMA) draagt die overdracht op aan een hardware-eenheid, meestal binnen de apparaatcontroller.

Meet het werk dat PIO aan de CPU overlaat

Stel je een gegevensregister van 4 bytes voor waarbij elke toegang 100 ns duurt. Een blok van 4 KiB verplaatsen vereist:

4096/4=1024 toegangen 1024×100 ns=102,4 μs

Die registerbewerkingen houden de CPU bezig. Grotere buffers vereisen evenredig meer toegangen. DMA neemt dat kopiëren per woord via het register weg; de CPU bereidt het verzoek nog steeds voor en handelt de voltooiing af.

Volg een leesbewerking met DMA
  1. Het stuurprogramma bereidt een doelbuffer voor en maakt die beschikbaar voor toegang door het apparaat.
  2. Het geeft het DMA-adres of de DMA-adressen, het aantal bytes, de richting en het leescommando door.
  3. Het apparaat leest de gevraagde opslagblokken en schrijft de bytes naar het geheugen.
  4. De CPU voert ander werk uit terwijl het apparaat gegevens overdraagt.
  5. De voltooiing wordt gemeld, meestal door een interrupt. De afhandelaar controleert de status en wekt het wachtende proces.

De DMA-eenheid treedt op als busmaster en start geheugenoverdrachten. De kosten van het instellen hangen af van de geheugenkoppeling, het platform en het aantal geheugengebieden. DMA verbruikt ook geheugenbandbreedte die met de CPU wordt gedeeld. DMA maakt CPU-instructies vrij, niet alle bronnen.

Beschrijf verspreid geheugen

Een buffer kan aaneengesloten zijn in de virtuele adresruimte van een proces en tegelijk afzonderlijke fysieke pagina's bezetten. Een scatter-gatherlijst beschrijft die gebieden als paren van adres en lengte. Een apparaat kan één verzoek over meerdere gebieden overdragen zonder dat de CPU ze eerst naar één fysiek aaneengesloten buffer kopieert.

Een buffer van drie pagina's kan bijvoorbeeld worden ondersteund door drie niet-aangrenzende pagina's. Het stuurprogramma maakt descriptoren voor de gebieden die het apparaat kan zien en houdt de onderliggende pagina's stabiel totdat de overdracht is voltooid. Vastzetten voorkomt dat die pagina's worden verwijderd of hergebruikt terwijl hardware er nog toegang toe kan hebben. Als ze te vroeg worden losgemaakt, kan een latere DMA-schrijfbewerking gegevens van een ander overschrijven.

Gebruik de adresruimte van het apparaat

Een apparaat gebruikt normaal gesproken niet de virtuele pointer van een toepassing. De DMA-API van de kernel levert busadressen, die kunnen verschillen van de fysieke adressen van de CPU. Een IOMMU vertaalt apparaatadressen naar fysiek geheugen en beperkt tot welk geheugen een apparaat toegang heeft. Deze isolatie helpt een hypervisor ook om een apparaat aan een virtuele machine toe te wijzen.

CPU-caches voegen nog een coördinatiestap toe. Vóór een uitgaande DMA-overdracht moet het apparaat de meest recente bytes van de CPU zien; na een inkomende overdracht moet de CPU de wijzigingen van het apparaat zien. Sommige hardware zorgt automatisch voor coherentie. Andere platforms vereisen cachesynchronisatie via de DMA-API. Adreskoppeling, de levensduur van pagina's en zichtbaarheid via de cache lossen elk een ander deel van de veilige overdracht op.

Belangrijkste punten

  • DMA neemt het kopiëren van gegevens over; interrupts nemen het wachten over.
  • De CPU stelt DMA nog steeds in en handelt de voltooiing af.
  • Scatter-gatherlijsten beschrijven overdrachten over afzonderlijke geheugengebieden.
  • Vastgezette pagina's moeten stabiel blijven totdat DMA is voltooid.
  • De DMA-API levert adressen die het apparaat kan zien; een IOMMU vertaalt en beperkt die.
  • Cachecoherentie of expliciete synchronisatie maakt wijzigingen van de CPU en het apparaat zichtbaar.

1.4 Volg een leesbewerking door de opslagstack

Een apparaatstuurprogramma vertaalt een algemeen verzoek naar de commando's en registertoegangen van een controller en handelt de voltooiing af. Zo kan een bestandssysteem om een blok vragen zonder te weten of de hardware SATA, NVMe of USB gebruikt. Het stuurprogramma kent het specifieke protocol en de eigenaardigheden van de controller.

Geef elke laag een taak

Een opslagleesbewerking in Linux doorloopt meestal deze keten:

Toepassing → systeemaanroep → bestandssysteem → algemene bloklaag → stuurprogramma → controller → opslagapparaat.

Het bestandssysteem koppelt een bestandspositie aan opslagblokken. De bloklaag plaatst verzoeken in wachtrijen, voegt aangrenzende verzoeken samen en kan de volgorde ervan plannen. Het stuurprogramma dient de resulterende bewerkingen in. Rechtstreekse toegang tot een ruw blokapparaat kan het bestandssysteem overslaan en toch de lagere lagen gebruiken.

Dankzij de standaardinterface is nieuwe hardware bruikbaar zonder elke toepassing te herschrijven. Die verbergt ook sommige speciale functies. Via interfaces zoals ioctl() of het rechtstreeks doorgeven van commando's kan software om besturingsfuncties vragen die niet passen bij een gewone lees- of schrijfbewerking van een blok.

Onderscheid apparaatklassen
KlasseTypische interface en voorbeelden
BlokapparaatGeadresseerde blokken; harde schijven en SSD's
TekenapparaatEen stroom bytes; terminals en seriële poorten
NetwerkinterfacePakketcommunicatie via sockets

Linux stelt blok- en tekenapparaten beschikbaar als speciale bestanden, zoals /dev/sda en /dev/nvme0n1. Stuurprogramma's draaien meestal in kernelmodus, dus een fout in een stuurprogramma kan de kernel laten crashen of het geheugen beschadigen. Isolatie van stuurprogramma's beperkt de gevolgen in systemen die dat ondersteunen. De verzameling stuurprogramma's van Linux vormt een groot deel van de broncode; onderzoek heeft ook uitgewezen dat code van stuurprogramma's bijzonder foutgevoelig is.

Plaats werk in wachtrijen voor meerdere kernen

De blk-mq-bloklaag van Linux gebruikt softwarewachtrijen per CPU en hardwareverzendwachtrijen. Een I/O-scheduler zoals mq-deadline, bfq of kyber kan werk herordenen of eerlijk verdelen; none vermijdt extra planningsbeleid. Harde schijven hebben baat bij minder zoekbewegingen. Snelle NVMe-apparaten gebruiken vaak none, omdat ze geen kop hebben die opnieuw moet worden gepositioneerd. De geselecteerde scheduler staat tussen vierkante haken in /sys/block/<device>/queue/scheduler.

SATA met AHCI/NCQ ondersteunt per apparaat een commandowachtrij met maximaal 32 uitstaande commando's. NVMe ondersteunt veel indienings- en voltooiingswachtrijen in het geheugen: maximaal 65.535 I/O-wachtrijen, met maximaal ongeveer 64.000 commando's per wachtrij. Werkelijke controllers hebben lagere limieten. Wachtrijparen per kern verminderen de concurrentie om gedeelde indieningsroutes.

Volg één NVMe-leesbewerking

Een proces roept read(fd, buf, 4096) aan. Bij een cachemisser zoekt het bestandssysteem het schijfblok en bouwt de bloklaag een verzoek op. Het NVMe-stuurprogramma schrijft een descriptor in een indieningswachtrij en schrijft daarna naar het MMIO-meldingsregister ervan. De controller haalt het commando op, draagt de gegevens via DMA over naar het geheugen en plaatst een voltooiingsvermelding. Een MSI-X-interrupt leidt ertoe dat de kernel het verzoek afhandelt. Bij een gebufferde leesbewerking bereiken de gegevens via de paginacache de buffer van de toepassing en retourneert read() 4096. Een cachetreffer kan de leesbewerking afhandelen voordat I/O met het apparaat nodig is.

Belangrijkste punten

  • Stuurprogramma's passen een standaardinterface van de kernel aan apparaatspecifieke protocollen aan.
  • De bloklaag plaatst verzoeken om geadresseerde blokken in wachtrijen, voegt ze samen en plant ze.
  • AHCI/NCQ heeft per apparaat een ondiepe wachtrij; NVMe ondersteunt veel wachtrijen in het geheugen.
  • Een meldingsregister kondigt werk in de wachtrij aan; DMA draagt de gegevens over; de afhandeling van de voltooiing rondt het verzoek af.
2

Bereken schijfkosten en kies een verzoekvolgorde

Een harde schijf biedt genummerde sectoren aan, maar om één verzoek af te handelen kunnen een armbeweging en wachten op rotatie nodig zijn voordat er bytes worden overgedragen. Koppel die fysieke stappen aan latentie, IOPS en gegevenssnelheid. Vergelijk daarna verzoekvolgordes op zowel beweging als wachttijd: een korte route kan de doorvoer verbeteren terwijl een verafgelegen verzoek blijft wachten. Ook apparaatcaches en firmware bepalen wat het besturingssysteem waarneemt.

2.1 Koppel sectoradressen aan schijfhardware

Een harde schijf biedt een reeks sectoren aan die vanaf nul zijn genummerd. Deze nummers zijn logische blokadressen (LBA's). Traditioneel was een sector 512 bytes groot; veel schijven gebruiken nu fysieke sectoren van 4.096 bytes. Een 512e-schijf accepteert logische sectoren van 512 bytes boven op dat grotere fysieke formaat. Een blok van 4 KiB van een bestandssysteem kan daardoor meerdere logische sectoren beslaan.

Stel je de bewegende onderdelen voor

Magnetische schijfplaten draaien op een spil. Elk oppervlak heeft concentrische sporen die in sectoren zijn verdeeld en een lees-/schrijfkop op een bewegende arm. De koppen bewegen samen. Sporen op dezelfde armpositie op verschillende oppervlakken vormen een cilinder. Veelvoorkomende spilsnelheden zijn 5.400 en 7.200 RPM, met 10.000 en 15.000 RPM bij snellere schijffamilies.

Nabijgelegen LBA's worden meestal dicht bij elkaar geplaatst, zodat sequentiële leesbewerkingen herhaalde zoekbewegingen vermijden. Een sector die aan een reservesector is gekoppeld, kan die samenhang doorbreken. Software ziet zo een bruikbare lineaire adresruimte zonder de exacte fysieke plaatsing te kennen.

Buitenste sporen hebben meer ruimte voor sectoren. Opslag in zones plaatst meer sectoren op die sporen, zodat per omwenteling meer bytes onder de kop passeren. De sequentiële doorvoer kan dalen wanneer een leesbewerking naar het midden beweegt. Sectorverschuiving tussen sporen verschuift sectorposities tussen aangrenzende sporen: nadat de kop van spoor is veranderd, komt de volgende sequentiële sector op het juiste moment aan in plaats van net te zijn gepasseerd.

Onderscheid voltooiing van duurzaamheid

Een schijfcache kan recent gelezen gegevens bewaren en schrijfbewerkingen aannemen. Deze buffers variëren van enkele megabytes tot honderden megabytes; een leescache kan de rest bewaren van een spoor dat al onder de kop passeert. Bij terugschrijven kan een schrijfbewerking worden voltooid terwijl de gegevens nog in een vluchtige cache staan. Bij doorschrijven wordt op het medium gewacht. Een commando om de cache weg te schrijven vraagt om gebufferde schrijfbewerkingen op duurzame opslag vast te leggen; verplichte opslag op het persistente medium (FUA) vraagt om duurzame voltooiing van de betreffende schrijfbewerking.

Atomiciteit bij stroomuitval is een andere eigenschap. Een atomaire schrijfeenheid verandert volledig of blijft ongewijzigd als de stroom uitvalt. De sectorgrootte alleen biedt die garantie niet: het apparaat moet de garantie documenteren. Een schrijfbewerking over meerdere atomaire eenheden kan een gedeeltelijk uitgevoerde schrijfbewerking achterlaten, met enkele nieuwe en enkele oude eenheden. Het wegschrijven van de cache zorgt voor duurzaamheid; atomaire eenheden gaan over gedeeltelijke wijzigingen.

Lees capaciteitsaanduidingen correct

Schijfcapaciteiten gebruiken decimale SI-voorvoegsels. Binaire eenheden gebruiken machten van twee:

1 TB=1012 bytes,1 TiB=240 bytes

Een schijf van 4 TB bevat daarom:

4×1012/240≈3,64 TiB

Beide aanduidingen beschrijven hetzelfde aantal bytes. Een hulpprogramma dat ongeveer 3,64 toont met het label “TB”, heeft binair gerekend met een decimaal ogend label; door de omzetting is geen ruimte verdwenen.

Herken een extra beperking bij schrijven

Dakpansgewijze magnetische opslag (SMR) laat aangrenzende sporen overlappen om meer gegevens op te slaan. Het herschrijven van één spoor kan het buurspoor verstoren, waardoor kleine willekeurige wijzigingen duur zijn. Grote sequentiële schrijfbewerkingen in geschikte zones werken beter. Dit is een magnetische schijf met een beperking in het schrijfbeheer, hoewel gewone leesbewerkingen nog steeds dezelfde koppen en draaiende schijfplaten gebruiken.

Belangrijkste punten

  • LBA's identificeren logische sectoren; logische en fysieke sectorgroottes kunnen verschillen.
  • Koppen zoeken over sporen terwijl de schijfplaten eronder draaien.
  • Opslag in zones en sectorverschuiving tussen sporen ondersteunen efficiënte sequentiële toegang.
  • Voltooiing bij terugschrijven kan voorafgaan aan duurzaamheid; het wegschrijven van de cache en FUA vragen om persistente opslag.
  • Atomiciteit bij stroomuitval volgt uit de gedocumenteerde garantie van het apparaat.
  • Decimale TB en binaire TiB drukken dezelfde bytes in verschillende eenheden uit.
  • SMR verhoogt de opslagdichtheid, maar maakt kleine willekeurige overschrijvingen duurder.

2.2 Bereken latentie, IOPS en gegevenssnelheid

Een schijfverzoek kost tijd om de gegevens te bereiken voordat de overdracht begint. Verdeel voor een eenvoudig verzoek zonder wachtrijtijd of cachetreffer de afhandelingstijd in drie delen:

TI/O=Tseek+Trotation+Ttransfer

Bij het zoeken beweegt de arm naar het spoor en komt daar tot rust. Tijdens de rotatievertraging wordt gewacht tot de sector de kop bereikt. De overdrachtstijd omvat de bytes die eronder passeren. Een eventuele wachtrij voegt wachttijd toe voordat de afhandeling begint.

Reken RPM om naar wachttijd

Eén omwenteling duurt 60.000 ms gedeeld door het toerental in RPM. Bij 7.200 RPM:

Trev=60.000/7200≈8,33 ms

Bij een willekeurige sectorpositie is de gemiddelde wachttijd een halve omwenteling, ongeveer 4,17 ms. Bij 15.000 RPM duurt een omwenteling 4 ms en is de gemiddelde wachttijd 2 ms. Een hoger toerental vermindert de rotatievertraging; het vermindert de zoektijd van de arm niet rechtstreeks.

Specificatiebladen geven een gemiddelde zoektijd. Bij gelijkmatig verdeelde verzoeken is de gemiddelde zoekafstand ongeveer een derde van de volledige bewegingsafstand, maar zoektijd is niet evenredig met afstand. Versnellen en tot rust komen overheersen bij korte zoekbewegingen; lange zoekbewegingen omvatten meer afstand op volle snelheid.

Bereken een kleine willekeurige leesbewerking

Gebruik een schijf van 7.200 RPM met een gemiddelde zoektijd van 8 ms en een overdrachtssnelheid van 200 MB/s. Een verzoek van 4 KiB bevat 4.096 bytes. Bereken eerst de overdracht in seconden:

Ttransfer=4096/(200×106) s≈0,0205 ms

Tel daarna positionering en overdracht bij elkaar op:

TI/O≈8+4,17+0,0205=12,19 ms

Steeds één uitstaand verzoek geeft ongeveer:

IOPS=1/0,01219≈82

De effectieve snelheid is ongeveer 4.096 bytes vermenigvuldigd met 82 per seconde, oftewel 0,34 MB/s. Een opgegeven overdrachtssnelheid van 200 MB/s beschrijft het verplaatsen van gegevens nadat de schijf is gepositioneerd; die snelheid neemt de ongeveer 12 ms positionering per klein willekeurig verzoek niet weg.

Bereken een lange sequentiële leesbewerking

Lees nu 100 MB met één zoekbeweging en rotatiewachttijd aan het begin. De overdrachtstijd is 100/200 s, oftewel 500 ms. De totale tijd is ongeveer 512,17 ms, wat geeft:

RI/O=100 MB/0,51217 s≈195 MB/s

De effectieve snelheid is ongeveer 580 keer de snelheid bij kleine willekeurige leesbewerkingen. Eén positionering wordt over veel meer bytes verdeeld. Bij grote sequentiële overdrachten overheerst de overdrachtstijd; bij kleine willekeurige verzoeken overheerst de positionering.

Gebruik bytes consequent wanneer je KiB met MB/s combineert en reken milliseconden om naar seconden voordat je bytes door tijd deelt. IOPS past bij kleine willekeurige bewerkingen; MB/s past bij sequentiële stromen. Vooruit lezen, nabije plaatsing en kleine schrijfbewerkingen samenvoegen tot sequentiële reeksen verbeteren de prestaties doordat minder vaak positionering nodig is.

Belangrijkste punten

  • Tel zoektijd, rotatievertraging en overdrachtstijd op om de afhandelingstijd van een schijf te modelleren.
  • De gemiddelde willekeurige rotatievertraging is de helft van 60.000/RPM milliseconden.
  • Gebruik bytes en consistente tijdeenheden bij het berekenen van een effectieve gegevenssnelheid.
  • Kleine willekeurige verzoeken betalen herhaaldelijk de kosten van positionering; grote sequentiële verzoeken spreiden die kosten.
  • IOPS telt bewerkingen per seconde; doorvoer telt bytes per seconde.

2.3 Vergelijk planningsroutes en wachttijden

Een schijfscheduler kiest welk wachtend verzoek als volgende wordt afgehandeld. De positie geeft nuttige informatie over de afhandelingskosten. Minder armbeweging helpt, maar beleid moet ook rekening houden met hoe lang afzonderlijke verzoeken wachten.

Vergelijk het beleid
BeleidVolgend verzoek of routeBelangrijkste afweging
FCFSVolgorde van binnenkomstEerlijke volgorde, mogelijk veel beweging
SSTFDichtstbijzijnde spoorLage zoekkosten, mogelijke uithongering
SCANHandel verzoeken af in één richting tot de rand, keer dan omBegrensd wachten op basis van bewegingen over de schijf
C-SCANHandel verzoeken af in één richting, keer zonder afhandeling terugGelijkmatigere wachttijden voor verschillende posities
LOOKKeer om bij het laatste wachtende verzoekVermijdt onnodige beweging naar de rand
C-LOOKHandel in één richting af, keer terug tussen de uiterste wachtende verzoekenCirculaire afhandeling zonder onnodige beweging naar de rand

SSTF kan steeds nieuwe verzoeken in de buurt kiezen terwijl een verafgelegen verzoek wacht. Een besturingssysteem dat de exacte geometrie niet kent, benadert dit vaak met de LBA-afstand; dit heet dichtstbijzijnde blok eerst. Eerlijkheid bij SCAN-achtig beleid veronderstelt dat het systeem tijdens de beweging verzoeken kan blijven afhandelen; een overbelast apparaat kan nog steeds niet voor elk binnenkomend verzoek een vaste responstijd bieden.

Tel de beweging per traject op

Neem sporen 0–199, een kop op 50 die naar hogere spoornummers beweegt en binnenkomende verzoeken 82, 170, 43, 140, 24, 16, 190. Stop met tellen zodra alle verzoeken zijn afgehandeld.

FCFS volgt de lijst. De beweging is 32 + 88 + 127 + 97 + 116 + 8 + 174 = 642 sporen. SSTF bezoekt 43, 24, 16, 82, 140, 170, 190, in totaal 208 sporen.

SCAN bezoekt de hogere verzoeken, gaat door naar 199 en keert dan om naar 16. De afstand is 149 + 183 = 332. LOOK keert om bij 190, wat 140 + 174 = 314 geeft. C-LOOK gaat van 50 naar 190, keert terug naar 16 en eindigt bij 43: 140 + 174 + 27 = 341 sporen. De terugkeer is een echte beweging, ook al wordt onderweg geen verzoek afgehandeld. C-SCAN zou naar 199 gaan, zonder afhandeling terugkeren naar 0 en daarna in oplopende richting verzoeken afhandelen tot en met 43.

Het beste totaal in deze eindige wachtrij bepaalt niet welk beleid het beste is voor een stroom toekomstige verzoeken. De geringe beweging van SSTF gaat hier bij aanhoudende belasting samen met een risico op uithongering.

Neem rotatie en firmware mee

Kortste positioneringstijd eerst (SPTF) minimaliseert de som van zoek- en rotatievertraging. Een verder gelegen spoor kan winnen als de sector ervan eerder aankomt. Nauwkeurige keuzes vereisen kennis van de geometrie en rotatiepositie, dus de firmware van de schijf kan die beter maken dan het besturingssysteem.

Het besturingssysteem kan verzoeken om aangrenzende blokken samenvoegen en daarna meerdere commando's via NCQ indienen. Firmware herordent die reeks met interne informatie. Anticiperende planning kan de schijf kort ongebruikt laten om te wachten op een waarschijnlijk vervolgverzoek in de buurt. Deadlineplanning beperkt uitstel; mq-deadline van Linux houdt bij wanneer verzoeken verlopen en geeft voorrang aan leesbewerkingen. SSD-planning richt zich op eerlijkheid en latentie, omdat er geen zoekbeweging of rotatie te besparen valt.

Belangrijkste punten

  • FCFS bewaart de volgorde van binnenkomst; SSTF ruilt minder beweging af tegen het risico op uithongering.
  • SCAN en LOOK bewegen in beide richtingen; circulaire varianten handelen in één richting af.
  • Tel elke beweging mee, ook een circulaire terugkeer zonder afhandeling.
  • SPTF houdt rekening met zowel rotatiepositie als zoekbeweging.
  • Het besturingssysteem voegt verzoeken samen en plaatst ze in wachtrijen; schijffirmware kan ze herordenen met kennis van verborgen geometrie.
  • Deadlines en anticipatie streven meer doelen na dan minimale beweging.
3

Leg wijzigingen in flashgeheugen en SSD-prestaties uit

Flashgeheugen kan een kleine pagina snel lezen, maar voor hergebruik moet een veel groter blok worden gewist. Een SSD-controller verbergt dat verschil achter logische adressen. Volg hoe de controller nieuwe versies plaatst, oude ruimte vrijmaakt en slijtage verdeelt, en gebruik die mechanismen om schrijfversterking, wachtrijdiepte en opgegeven levensduur te interpreteren. Het ontbreken van bewegende onderdelen verandert de opslagkosten zonder elke toegang even goedkoop te maken.

3.1 Begrijp pagina's, wisblokken en slijtage

NAND-flashgeheugen slaat informatie op als elektrische lading in cellen. De controller onderscheidt ladingsniveaus om de bits te lezen. Een cel die meer bits bevat, heeft meer onderscheidbare niveaus nodig. Dat levert meer capaciteit op, maar maakt programmeren en foutcontrole moeilijker.

Tel de ladingsniveaus
CeltypeBits per celLadingsniveaus
SLC12
MLC24
TLC38
QLC416

Voor een cel met b bits is het aantal niveaus 2b. Meer bits per cel verlagen doorgaans de kosten per gigabyte, terwijl programmeren langzamer wordt en het aantal verdraagbare wiscycli afneemt. Dit zijn eigenschappen van de celindeling; ook de controller en het parallellisme van de hele SSD beïnvloeden de prestaties.

Koppel elke bewerking aan de juiste eenheid

Flashchips bevatten wisblokken, die elk veel pagina's bevatten. Een pagina is meestal 4–16 KiB groot, terwijl een wisblok honderden pagina's kan bevatten en honderden KiB tot meerdere MiB kan beslaan. Een flashpagina, een virtuele geheugenpagina en een bestandssysteemblok zijn verschillende eenheden, ook als sommige groottes toevallig overeenkomen.

Een leesbewerking levert een pagina op, meestal in tientallen microseconden. Een programmeerbewerking schrijft een gewiste pagina en duurt honderden microseconden. Een wisbewerking zet een heel blok terug naar enen en duurt milliseconden. Pagina's worden geprogrammeerd in de volgorde die de chip vereist, meestal van lagere naar hogere pagina's. De controller moet bij het plaatsen van gegevens die volgorderegels volgen.

Een gebruikte pagina kan niet zomaar een vervangende versie ontvangen. Het wisblok moet eerst worden gewist, waardoor de inhoud van elke pagina in dat blok verloren gaat. Dit is het centrale verschil: schrijfbewerkingen hebben de grootte van een pagina, wisbewerkingen die van een blok.

Bekijk de kosten van een wijziging op dezelfde plaats

Stel je één blok voor met de pagina's A, B, C en D. Om A door A′ te vervangen en dezelfde fysieke plaatsing te behouden:

  1. Lees B, C en D naar tijdelijke opslag.
  2. Wis het hele blok, inclusief de oude A.
  3. Programmeer A′, B, C en D in de gewiste pagina's.

Eén pagina met nieuwe informatie heeft drie leesbewerkingen, vier programmeerbewerkingen en een wisbewerking veroorzaakt. Alleen A wissen is niet mogelijk. Een SSD vermijdt deze kosten bij elke overschrijving door het hostsysteem door de vervanging elders te schrijven en de koppeling te veranderen.

Beheer schade en het vasthouden van lading

Elke programmeer-wiscyclus (P/E-cyclus) beschadigt de cellen een beetje. Representatieve bereiken voor de levensduur zijn ongeveer 50.000–100.000 cycli voor SLC, 1.000–3.000 voor TLC en ongeveer 1.000 of minder voor QLC; werkelijke opgaven verschillen sterk per chipgeneratie en fabrikant. Controllers nemen blokken die onbetrouwbaar worden buiten gebruik.

Lading lekt ook na verloop van tijd weg, vooral in versleten cellen. Lezen of programmeren kan nabijgelegen cellen verstoren. Sterke foutcorrigerende codes (ECC) herstellen veel van de resulterende bitfouten en de controller kan gegevens waarvan het aantal fouten stijgt verversen. Flashgeheugen is persistente opslag met asymmetrische bewerkingen en een beperkte levensduur, dus een snelle leesbewerking van een pagina zegt op zichzelf weinig over de kosten van aanhoudend overschrijven.

Belangrijkste punten

  • Een cel die b bits opslaat, moet 2ᵇ ladingsniveaus onderscheiden.
  • Flashgeheugen leest en programmeert pagina's, maar wist hele blokken.
  • Programmeren vereist gewiste ruimte; het behouden van aangrenzende geldige pagina's maakt wijzigingen op dezelfde plaats duur.
  • P/E-cycli slijten cellen, terwijl verstoring en ladingsverlies fouten veroorzaken.
  • ECC, verversing en het buiten gebruik stellen van blokken helpen de controller deze fouten te beheersen.

3.2 Volg logische pagina's door de FTL

Het hostsysteem leest en overschrijft logische blokken. De flashvertaallaag (FTL) van de SSD koppelt die adressen aan fysieke flashpagina's en beheert de onderliggende wisbewerkingen die voor het hostsysteem verborgen blijven. Logische pagina N permanent op fysieke pagina N houden, zou ertoe leiden dat bij veelvuldig overschrijven steeds dezelfde blokken worden gewist.

Schrijf een nieuwe versie elders

Een loggestructureerde FTL programmeert nieuwe gegevens in een vrije pagina en verandert de koppeling. Stel dat LBA 100 naar fysieke pagina 0 verwijst en LBA 101 naar pagina 1. Een overschrijving van LBA 100 wordt op pagina 2 geprogrammeerd. De koppeling wordt 100 → 2; pagina 0 wordt ongeldig. Het hostsysteem vraagt nog steeds om LBA 100 en krijgt de nieuwe versie.

Ongeldig is een toestand van de koppeling, geen onmiddellijke fysieke wisbewerking. De oude bits blijven staan totdat hun wisblok wordt vrijgemaakt. Een bestand verwijderen of overschrijven biedt daarom geen betrouwbare garantie over wanneer elke oude fysieke kopie verdwijnt. Betrouwbaar wissen gebruikt een geschikte sanitiseerbewerking van de schijf of een correct beheerd versleutelingsschema voor de hele schijf met vernietiging van de sleutel.

Maak ruimte vrij en tel extra schrijfbewerkingen

Bij het opruimen van ongeldige flashgegevens (GC) kiest de FTL een blok, kopieert de geldige pagina's elders naartoe, werkt de vertaaltabel bij en wist het oude blok. Ongeldige pagina's hoeven niet te worden gekopieerd. Een blok met veel ongeldige pagina's levert meer vrije ruimte op per gekopieerde geldige pagina.

Schrijfversterking (WA) meet dat extra programmeren:

WA=naar flashgeheugen geprogrammeerde bytesdoor het hostsysteem geschreven bytes

In een blok van 64 pagina's met 48 geldige en 16 ongeldige pagina's kopieert GC 48 pagina's. Het wissen van het blok creëert 64 vrije pagina's, maar de kopieën hebben elders 48 pagina's verbruikt: de nettowinst is 16. Als die winst wordt gevuld met 16 pagina's van het hostsysteem, levert dat 64 programmeerbewerkingen van flashpagina's op voor 16 schrijfbewerkingen van hostpagina's, dus WA = 4. Hogere versterking verbruikt bandbreedte en de beschikbare wiscycli sneller.

Reservecapaciteit reserveert flashruimte die het hostsysteem niet kan vullen. Meer vrije ruimte geeft GC de mogelijkheid om goedkopere blokken te kiezen. TRIM, Deallocate genoemd in NVMe en UNMAP in SCSI, vertelt het apparaat welke logische bereiken geen benodigde gegevens meer bevatten. De pagina's van een verwijderd bestand kunnen dan als ongeldig worden behandeld in plaats van tijdens GC te worden gekopieerd.

Houd rekening met geheugen voor de vertaaltabel en met slijtage

Een vertaaltabel op paginaniveau heeft één vermelding per logische pagina nodig. Een apparaat van 1 TiB met pagina's van 4 KiB heeft:

240/212=228 vermeldingen

Bij 4 bytes per vermelding neemt de tabel 1 GiB in. Koppeling op blokniveau verkleint de tabel maar maakt kleine wijzigingen duur. Hybride koppeling combineert bloktabellen met loggebieden die op paginaniveau worden gekoppeld; een andere aanpak cachet alleen actieve vermeldingen uit de paginatabel voor de vertaling.

Slijtageverdeling spreidt wisbewerkingen over blokken. Nieuwe schrijfbewerkingen worden al verspreid, maar blokken met koude, ongewijzigde gegevens kunnen anders voorgoed slijtage vermijden terwijl hete gebieden verslijten. Door sommige koude gegevens te verplaatsen, komen weinig gebruikte blokken vrij om mee te doen aan schrijfbewerkingen. Die migratie kan extra schrijfbewerkingen opleveren, dus de controller weegt gelijkmatige slijtage af tegen kopieerkosten.

Belangrijkste punten

  • Een FTL koppelt logische adressen van het hostsysteem aan fysieke flashpagina's.
  • Wijzigingen op een andere plaats maken oude pagina's ongeldig zonder hun bits onmiddellijk te wissen.
  • GC kopieert geldige pagina's voordat een blok wordt gewist.
  • Schrijfversterking deelt alle programmeerbewerkingen van flashgeheugen door de schrijfbewerkingen van het hostsysteem.
  • Reservecapaciteit en TRIM verminderen onnodig kopiëren.
  • Vertaal tabellen op paginaniveau af tegen het benodigde geheugen en de flexibiliteit bij wijzigingen.
  • Slijtageverdeling betrekt weinig gebruikte blokken bij de wisbewerkingen.

3.3 Interpreteer SSD-snelheid en levensduur

Een SSD heeft geen schijfarm of draaiende schijfplaat. Die vermijdt positioneringsvertragingen van milliseconden, maar de snelheid hangt nog steeds af van de verzoekgrootte, het parallellisme, de schrijfgeschiedenis en het werk dat de controller op de achtergrond uitvoert.

Vergelijk latentie en doorvoer
Werklast of eigenschapHarde schijfSSD met flashgeheugen
Latentie van kleine willekeurige leesbewerkingenMillisecondenTientallen tot ongeveer honderd microseconden
Snelheid van kleine willekeurige leesbewerkingenOngeveer 75–200 IOPSNVMe kan honderdduizenden halen met voldoende werk in de wachtrij
Sequentiële overdrachtTot enkele honderden MB/sOngeveer 550 MB/s voor SATA; meerdere GB/s voor NVMe
Belangrijkste interne kostenZoeken, rotatie, overdrachtPaginatoegang, controllerwerk, GC, parallellisme

Dit zijn representatieve apparaatklassen, geen garanties voor elke schijf. De doorvoer van SATA-SSD's wordt beperkt door de verbinding van 6 Gb/s. NVMe gebruikt PCIe en kan veel flashkanalen tegelijk bezighouden.

Een programma dat één kleine leesbewerking aanvraagt en wacht tot die klaar is voordat het de volgende aanvraagt, merkt de latentie van elk verzoek. Bij een latentie van 80 µs staat dat seriële patroon ongeveer 12.500 bewerkingen per seconde toe. Een apparaat waarvoor een veel hoger aantal IOPS wordt opgegeven, heeft veel uitstaande verzoeken nodig, aangeleverd door threads of asynchrone I/O. Wachtrijdiepte biedt kansen voor parallel werk; die kan ook wachttijd toevoegen wanneer het apparaat verzadigd is.

Houd rekening met de schrijfgeschiedenis

Willekeurige en sequentiële schrijfbewerkingen blijven verschillen. Willekeurige wijzigingen kunnen ongeldige pagina's verspreid tussen geldige pagina's achterlaten, waardoor GC meer moet kopiëren. Sequentiële werklasten kunnen hele gebieden tegelijk ongeldig maken, waardoor vrijmaken goedkoper wordt en WA dichter bij één blijft. Een lege SSD kan rechtstreeks in vrije ruimte programmeren; een gevulde SSD moet ruimte vrijmaken. Prestaties in de stationaire toestand omvatten die voortdurende GC-kosten, terwijl tests direct uit de doos dat mogelijk niet doen.

Lees levensduuropgaven als een schrijfbudget

TBW is het opgegeven totale aantal terabytes dat door het hostsysteem wordt geschreven. DWPD drukt het aantal volledige schijfbeschrijvingen door het hostsysteem per dag uit gedurende de garantieperiode. Voor een apparaat van 1 TB met een opgave van 600 TBW over vijf jaar:

DWPD=600/(1×5×365)≈0,33

Bij 50 GB per dag loopt het aantal schrijfbewerkingen van het hostsysteem na 12.000 dagen, ongeveer 33 jaar, op tot 600 TB. Die berekening vergelijkt werklasten en is geen voorspelling van de levensduur: uitval van de controller, veroudering en garantiegrenzen blijven van belang. Hoge interne versterking laat cellen sneller slijten, ook al telt de levensduuropgave de schrijfbewerkingen van het hostsysteem.

Stem het apparaat af op het werk

Harde schijven bieden lage kosten per terabyte voor grote, weinig geraadpleegde gegevensverzamelingen. SSD's zijn geschikt voor werk waarbij latentie belangrijk is. Gelaagde opslag bewaart hete gegevens op SSD's en koudere gegevens op schijven. Beide kunnen uitvallen: schijven hebben mechanische defecten en slechte sectoren; SSD's hebben slijtage, controllerdefecten en firmwarefouten. Redundantie en afzonderlijke back-ups blijven voor beide nuttig.

Bij SSD's voegt defragmentatie schrijfbewerkingen toe met weinig voordeel voor zoekbewegingen. TRIM helpt de controller ongebruikte gegevens te herkennen. Huidige partitioneringsprogramma's lijnen het begin vaak uit op grenzen van 1 MiB, zodat slecht uitgelijnde blokverzoeken worden vermeden.

Belangrijkste punten

  • Een SSD neemt mechanische positionering weg, maar heeft nog steeds kosten voor controller en flashgeheugen.
  • Een hoog opgegeven aantal IOPS vereist voldoende onafhankelijke uitstaande verzoeken.
  • Willekeurige schrijfbewerkingen en GC kunnen de schrijfprestaties in de stationaire toestand verlagen.
  • TBW telt schrijfbewerkingen van het hostsysteem; DWPD verdeelt dat budget over capaciteit en garantiedagen.
  • Kies SSD's voor snelle toegang en harde schijven voor voordelige opslagcapaciteit op grote schaal.
  • TRIM en geschikte uitlijning helpen SSD's onnodig werk te vermijden.
4

Plaats gegevens en beoordeel RAID-keuzes

Een array combineert schijven achter één blokapparaatinterface. De indeling bepaalt welke schijven elk blok bevatten, hoeveel capaciteit overblijft voor gegevens en wat een storing overleeft. Werk van gegevensverdeling in stroken en gespiegelde paren naar XOR-pariteit en tel daarna fysieke I/O-bewerkingen om de prestaties te verklaren. Neem tot slot gedegradeerde werking en wederopbouwtijd mee bij de keuze van een niveau: een gezonde array is slechts één fase van de gebruiksduur.

4.1 Beoordeel wat een array biedt

RAID, een redundante array van goedkope of onafhankelijke schijven, presenteert meerdere fysieke schijven als één logisch blokapparaat. Intern stuurt een koppeling elk logisch blok naar gegevenskopieën of naar een strook met redundantie. Toepassingen en bestandssystemen kunnen de blokinterface blijven gebruiken zonder die indeling te begrijpen.

Vergelijk drie afzonderlijke maten

Capaciteit is de bruikbare ruimte voor gebruikersgegevens. Betrouwbaarheid beschrijft de uitval die een indeling kan verdragen. Prestaties omvatten zowel doorvoer over veel bewerkingen als latentie voor één bewerking. Een niveau kan de ene maat verbeteren terwijl een andere afneemt. Meer totale doorvoer hoeft ook de latentie van één blokverzoek niet te verlagen.

Gebruik dit eenvoudige model voor schijven van gelijke grootte:

SymboolBetekenis
NAantal schijven
BBlokken per schijf
SSequentiële doorvoer van één schijf
RWillekeurige doorvoer van één schijf voor de verzoekgrootte
TLatentie van één schijfverzoek

S en R gebruiken dezelfde snelheidseenheden, zoals MB/s. Bij een harde schijf verschillen ze sterk: het eerdere tijdvoorbeeld gaf ongeveer 195 MB/s sequentieel en 0,34 MB/s voor kleine willekeurige leesbewerkingen. De modelformules gaan uit van voldoende gelijktijdig werk en geen knelpunt bij de controller; hun doel is de kosten van de indeling zichtbaar te maken.

Benoem het foutmodel

Een schijf volgens het model van volledige, detecteerbare uitval werkt correct totdat die volledig en zichtbaar uitvalt. Dit maakt de basisredenering over RAID overzichtelijk: de array weet welke schijf ontbreekt. Echte schijven kunnen ook onleesbare sectoren hebben of onjuiste bytes teruggeven. Die gedeeltelijke en ongemerkte fouten vereisen integriteitscontroles naast een indeling die het verlies van een hele schijf overleeft.

Een redundante array werkt in gedegradeerde modus zolang de uitgevallen schijven binnen de fouttolerantie blijven. De array levert nog steeds gegevens, maar overgebleven schijven verrichten extra werk of hebben minder resterende leescapaciteit. Bij een wederopbouw wordt een vervangende schijf gevuld met de overgebleven informatie. Een direct inzetbare reserveschijf is een ongebruikte geïnstalleerde schijf waarmee de wederopbouw snel kan beginnen. RAID-0 heeft geen redundantie en na verlies van een schijf ook geen dergelijke gedegradeerde werking.

Houd wijzigingen op meerdere schijven consistent

RAID kan draaien in een hardwarecontroller met een eigen processor en beschermde cache, in software van het besturingssysteem zoals Linux md, of binnen een bestandssysteem zoals ZFS. Elk moet omgaan met een schrijfbewerking die tussen wijzigingen op verschillende schijven wordt onderbroken. Spiegelkopieën kunnen verschillen; gegevens en pariteit kunnen verschillende versies beschrijven. Het geval met pariteit is de pariteitsinconsistentie door een onderbroken schrijfbewerking.

Een beschermde niet-vluchtige cache of een geschikt journaal kan wachtende wijzigingen bewaren voor herstel. Een bitmap voor voorgenomen schrijfbewerkingen legt vast welke gebieden na een onderbreking opnieuw moeten worden gesynchroniseerd. Die bewaart de nieuwe gegevens niet en is op zichzelf geen volledige oplossing voor de pariteitsinconsistentie als ook een schijf ontbreekt.

RAID houdt gegevens beschikbaar bij de opgegeven schijfuitval. Een verwijdering of schrijfbewerking door ransomware bereikt de kopieën van de array via de normale interface. Brand of diefstal kan de hele array wegnemen. Afzonderlijke back-ups bieden herstelbare versies of kopieën die zulke gezamenlijke gebeurtenissen overleven.

Belangrijkste punten

  • Vergelijk bruikbare capaciteit, fouttolerantie, doorvoer en verzoeklatentie afzonderlijk.
  • Het basismodel van volledige, detecteerbare uitval gaat ervan uit dat een uitgevallen schijf wordt geïdentificeerd.
  • Redundante arrays kunnen in gedegradeerde toestand gegevens leveren en een vervangende schijf wederopbouwen.
  • Onderbroken wijzigingen op meerdere schijven vereisen een consistentiemechanisme.
  • Een bitmap wijst gebieden voor hersynchronisatie aan; beschermde logboeken kunnen informatie over wijzigingen bewaren.
  • RAID en afzonderlijke back-ups beschermen tegen verschillende soorten verlies.

4.2 Vind blokken in stroken en gespiegelde paren

RAID-0 verdeelt gegevens in stroken over schijven zonder redundante informatie te bewaren. Bij een strookdeel van één blok en nummering vanaf nul gaat logisch blok A naar:

schijf=A mod N,offset=⌊A/N⌋

Bij vier schijven hoort blok 14 op schijf 2 op offset 3. Modulo kiest de schijf; geheeldelige deling telt de volledige strookrijen vóór dat blok.

Neem de strookdeelgrootte mee in de koppeling

Een strookdeel is een reeks opeenvolgende blokken die op één schijf wordt geplaatst voordat de volgende aan de beurt is. Noem de grootte c blokken. Bepaal eerst het strookdeel, daarna de schijf en de lokale offset:

q=⌊A/c⌋,schijf=q mod N offset=⌊q/N⌋c+(A mod c)

Voor blok 14, c = 2 en N = 4 is het strookdeel 7, de schijf 3 en de offset 2. Rechtstreeks A modulo N gebruiken zou de strookdelen van twee blokken negeren. Kleine strookdelen kunnen een groot verzoek over meer schijven verspreiden; grotere strookdelen houden meer werk in de buurt op één schijf. Gebruikelijke strookdelen in arrays variëren van 64 tot 512 KiB; Linux md gebruikt doorgaans standaard 512 KiB.

RAID-0 heeft capaciteit NB en ideale totale sequentiële en willekeurige snelheden NS en NR. Een klein verzoek aan één schijf duurt nog steeds ongeveer T. Uitval van een willekeurige schijf veroorzaakt verlies van een deel van de arraygegevens. Daarom is deze indeling geschikt voor reproduceerbare tijdelijke gegevens wanneer beschikbaarheid onbelangrijk is.

Voeg spiegelkopieën toe

Een RAID-1-spiegel met twee schijven schrijft elk blok naar beide schijven. RAID-10 verdeelt gegevens in stroken over gespiegelde paren. Bij vier schijven en strookdelen van één blok over paren gaat blok A naar paar A modulo 2 op offset ⌊A/2⌋, en beide schijven van het paar slaan het op.

RAID-10 gebruikt de helft van de ruwe capaciteit. Het overleeft elke afzonderlijke uitval en kan N/2 uitgevallen schijven overleven als elk een ander paar treft. Als beide schijven van één paar uitvallen, gaan de gegevens van dat paar verloren, zelfs als alle andere paren gezond blijven.

Tel het nuttige werk per schijf

Elke gespiegelde schrijfbewerking werkt twee schijven parallel bij. De latentie is ongeveer T, bepaald door de langzaamste schijf, terwijl de totale willekeurige schrijfdoorvoer NR/2 is. Leesbewerkingen kunnen over alle kopieën worden verdeeld, wat NR oplevert bij voldoende onafhankelijke willekeurige leesbewerkingen.

Vier schijven, elk 4 TB; S = 200 MB/s, R = 1 MB/sRAID-0RAID-10
Bruikbare capaciteit16 TB8 TB
Sequentiële lees-/schrijfsnelheid in het eenvoudige model800 MB/s400 MB/s
Willekeurige leessnelheid4 MB/s4 MB/s
Willekeurige schrijfsnelheid4 MB/s2 MB/s

Het eenvoudige model voor gespiegelde sequentiële leesbewerkingen geeft NS/2 omdat partners elkaars blokken overslaan. Implementaties die hele leesbereiken aan elke kopie toewijzen, kunnen beter presteren. Spiegeling biedt meer capaciteit om leesverzoeken af te handelen; ze zorgt er niet voor dat één schijf een afzonderlijke leesbewerking in de helft van de tijd voltooit.

Belangrijkste punten

  • Gebruik modulo voor de schijf van een strookdeel van één blok en geheeldelige deling voor de lokale offset.
  • Bepaal bij grotere strookdelen eerst het strookdeel voordat je de schijf kiest.
  • RAID-0 heeft volledige bruikbare capaciteit en geen tolerantie voor schijfuitval.
  • RAID-10 verdeelt gegevens in stroken over gespiegelde paren en gebruikt de helft van de ruwe capaciteit.
  • Twee uitgevallen schijven zijn alleen te overleven als geen gespiegeld paar beide schijven verliest.
  • Gespiegelde schrijfbewerkingen vergen werk van twee schijven; onafhankelijke leesbewerkingen kunnen beide kopieën gebruiken.
  • De uitkomst NS/2 voor gespiegelde sequentiële leesbewerkingen in het eenvoudige model hangt af van de verdeling van leesbewerkingen.

4.3 Reconstrueer en werk pariteit bij

Een pariteitsstrook slaat gegevensblokken op en een redundant blok dat gelijk is aan hun bitsgewijze XOR. Voor elke bitpositie is XOR één als een oneven aantal invoerwaarden één is. XOR op een waarde met zichzelf toepassen heft die op. Door die opheffing kan de array één ontbrekend blok berekenen.

Herstel een bekend ontbrekend blok

Voor de gegevens 0011, 0101 en 1001:

P=0011⊕0101⊕1001=1111

Als het tweede blok ontbreekt:

D2=0011⊕1001⊕1111=0101

De array moet weten welk blok moet worden gereconstrueerd. Een pariteitsverschil tussen ogenschijnlijk gezonde blokken toont inconsistentie, maar wijst de slechte schijf niet aan. Een controlesom kan helpen vaststellen welke gegevens geldig zijn.

Werk één blok bij zonder de hele strook te lezen

Pariteit uit de andere gegevens reconstrueren is additieve pariteit. Bij vijf gegevensschijven vereist het wijzigen van één blok dat de andere vier gegevensblokken worden gelezen en daarna met de nieuwe waarde worden gecombineerd. Subtractieve pariteit, oftewel lezen-wijzigen-schrijven, verwijdert de bijdrage van het oude blok en voegt die van het nieuwe toe:

Pnew=Pold⊕Dold⊕Dnew

Verander 0101 in 1100 in de strook hierboven:

1111⊕0101⊕1100=0110

Dit vereist twee leesbewerkingen, van oude gegevens en oude pariteit, gevolgd door twee schrijfbewerkingen, van nieuwe gegevens en nieuwe pariteit. De leesfase moet voltooid zijn vóór de schrijffase, wat ongeveer 2T latentie geeft. Bij het schrijven van een volledige strook zijn alle nieuwe gegevensblokken beschikbaar, zodat nieuwe pariteit direct wordt berekend en geen oude blokken hoeven te worden gelezen.

Verdeel het pariteitswerk
NiveauPlaatsing van redundantieBruikbare blokkenGetolereerde schijfuitvalIdeale snelheid van kleine willekeurige schrijfbewerkingen
RAID-4Eén aparte pariteitsschijf(N − 1)BEén willekeurigeR/2
RAID-5Eén pariteitsblok dat over de schijven rouleert(N − 1)BEén willekeurigeNR/4
RAID-6Twee onafhankelijke redundante blokken per strook(N − 2)BTwee willekeurigeNR/6

De pariteitsschijf van RAID-4 voert voor elke kleine wijziging een lees- en een schrijfbewerking uit, wat een vast knelpunt veroorzaakt. RAID-5 verspreidt pariteit over de schijven, zodat wijzigingen aan onafhankelijke stroken gelijktijdig kunnen plaatsvinden. Het kost nog steeds vier fysieke I/O-bewerkingen per logische kleine schrijfbewerking. Willekeurige leesbewerkingen kunnen alle schijven gebruiken met NR; grote sequentiële schrijfbewerkingen halen ongeveer (N − 1)S.

RAID-6 voegt onafhankelijke P- en Q-redundantie toe, meestal met een Reed–Solomon-code voor Q. Twee kopieën van dezelfde XOR zouden slechts één vergelijking opleveren. Eén gegevensblok bijwerken met lezen-wijzigen-schrijven leest oude gegevens, P en Q en schrijft daarna alle drie: zes I/O-bewerkingen.

Voor vier schijven van 4 TB met R = 1 MB/s bieden RAID-4 en RAID-5 12 TB en willekeurige schrijfsnelheden van 0,5 en 1 MB/s. RAID-6 biedt 8 TB en ongeveer 0,67 MB/s. In gedegradeerde RAID-5 zijn voor een ontbrekend gegevensblok N − 1 leesbewerkingen van overgebleven blokken nodig. Bij RAID-6 met één ontbrekend gegevensblok vereist reconstructie met P N − 2 leesbewerkingen en blijft Q buiten beschouwing; twee ontbrekende blokken vereisen beide onafhankelijke vergelijkingen.

Belangrijkste punten

  • XOR-pariteit reconstrueert één geïdentificeerd ontbrekend blok.
  • Een pariteitsverschil alleen kan ongemerkte gegevensbeschadiging niet lokaliseren.
  • Lezen-wijzigen-schrijven leest oude gegevens en pariteit en schrijft daarna beide nieuwe waarden.
  • Het schrijven van volledige stroken vermijdt het lezen van oude gegevens en oude pariteit.
  • RAID-4 centraliseert het pariteitsknelpunt; RAID-5 verdeelt het.
  • RAID-6 heeft twee onafhankelijke codes nodig en overleeft elke combinatie van twee uitgevallen schijven.
  • Tel vier I/O-bewerkingen voor een kleine schrijfbewerking bij RAID-5 en zes bij RAID-6.
  • Leesbewerkingen in gedegradeerde modus reconstrueren ontbrekende gegevens en kosten meer werk van overgebleven schijven.

4.4 Kies een niveau en houd rekening met wederopbouw

Begin bij de keuze van RAID met de werklast en de uitval die het systeem moet overleven. Capaciteit alleen houdt geen rekening met schrijfkosten, prestaties in gedegradeerde modus en de tijd die nodig is om redundantie te herstellen. Een grotere array heeft meer schijven die capaciteit bijdragen, maar ook meer schijven en sectoren die tijdens herstel aan risico's blootstaan.

Stem de indeling af op de werklast

RAID-0 is geschikt voor tijdelijke gegevens die opnieuw kunnen worden gemaakt en geen tolerantie voor schijfuitval nodig hebben. RAID-10 is geschikt voor veel kleine willekeurige lees- en schrijfbewerkingen wanneer het aanvaardbaar is de helft van de capaciteit op te geven. RAID met pariteit gebruikt ruimte efficiënt en werkt goed voor grote schrijfbewerkingen van volledige stroken. RAID-6 voegt bescherming toe tegen elke combinatie van twee uitgevallen schijven, wat nuttig is wanneer de wederopbouw van grote schijven lang duurt.

Met vier schijven bieden RAID-10 en RAID-6 elk de helft van de ruwe capaciteit. RAID-10 heeft twee fysieke schrijfbewerkingen per kleine logische schrijfbewerking nodig; lezen-wijzigen-schrijven bij RAID-6 vereist zes I/O-bewerkingen. RAID-6 overleeft elke combinatie van twee uitgevallen schijven, terwijl die bij RAID-10 verschillende paren moeten treffen. Geen van beide keuzes is op elke maat beter.

Bereken een ondergrens voor de wederopbouwtijd

Bij wederopbouw van een spiegel wordt de overgebleven partnerschijf gekopieerd. Een volledige wederopbouw van een array met pariteit leest overgebleven gegevens en reconstrueert ontbrekende blokken. De P-vergelijking van RAID-6 kan één ontbrekend gegevensblok zonder Q reconstrueren; welke gegevens bij herstel daadwerkelijk worden gelezen, hangt af van de indeling en implementatie. Bij wederopbouw van volledige apparaten kunnen de overgebleven schijven uitgebreid worden gelezen.

Een vervangende schijf van 20 TB beschrijven met 200 MB/s duurt minimaal:

T=20×1012200×106=100.000 s

Dat is ongeveer 27,8 uur zonder concurrerende belasting of extra knelpunten. Normale I/O, zoekbewegingen, controllerwerk en begrenzing van de herstelsnelheid kunnen het langer laten duren. Een direct inzetbare reserveschijf verkort de wachttijd voordat de wederopbouw begint; die neemt de kopieertijd niet weg.

Onderzoek de risico's tijdens herstel

Een gedegradeerde RAID-5-array heeft zijn enige tolerantie voor schijfuitval al gebruikt. Nog een uitgevallen schijf maakt herstel onmogelijk. Een onleesbare sector op een overgebleven schijf kan ook een strook achterlaten met twee onbekende blokken: het blok van de ontbrekende schijf en het onleesbare blok van de overgebleven schijf. Andere stroken kunnen mogelijk nog worden hersteld.

Als voorbeeldberekening: bij de wederopbouw van vier RAID-5-schijven van 4 TB worden drie volledige overgebleven schijven gelezen:

3×4×1012×8=9,6×1013 bits

Als fouten worden gemodelleerd met één per 10¹⁴ bits, is het verwachte aantal 0,96. Dit is een verwacht aantal onder dat foutmodel, geen kans op uitval van 96%. Een grens voor het foutpercentage op een specificatieblad is geen gemeten voorspelling voor een bepaalde wederopbouw. Specificaties voor zakelijk gebruik geven vaak een strengere grens, zoals één per 10¹⁵ bits.

RAID-5 uitbreiden van vier naar acht schijven verhoogt de bruikbare capaciteit van 75% naar 87,5% van de ruwe ruimte, terwijl tijdens herstel meer overgebleven gegevens worden gelezen. Gelijke leeftijd en slijtage maken ook de aanname van onafhankelijke uitval minder sterk. Een database met veel schrijfbewerkingen kan baat hebben bij RAID-10; een groot sequentieel archief bij RAID-6. Plan periodieke gegevenscontroles om slechte sectoren op te sporen zolang redundantie aanwezig is en bewaar afzonderlijke back-ups.

Belangrijkste punten

  • Kies op basis van werklast, capaciteit, uitvalpatronen en risico's tijdens herstel.
  • Capaciteit gedeeld door de wederopbouwsnelheid geeft een optimistische wederopbouwtijd.
  • Een gedegradeerde RAID-5-array verdraagt geen verdere uitval van een hele schijf.
  • Een onleesbare sector op een overgebleven schijf kan reconstructie van de betreffende strook onmogelijk maken.
  • Een verwacht aantal fouten is geen kans op uitval.
  • Meer schijven in RAID-5 verbeteren de ruimte-efficiëntie, maar vergroten de risico's tijdens herstel.
5

Controleer gegevens en herstel vastgestelde fouten

Een schijf kan online blijven terwijl die onleesbare of onjuiste blokken teruggeeft. Onderscheid die fouten van volledige schijfuitval en vergelijk vervolgens controlesommethoden en de fouten die ze kunnen missen. De plaatsing van controlesommen is even belangrijk als de berekening: correcte bytes op het verkeerde adres en een oude versie op het juiste adres vereisen verschillende controles. Combineer verificatie met redundantie en periodieke leesbewerkingen om fouten te vinden en te herstellen voordat herstelmogelijkheden verdwijnen.

5.1 Herken gedeeltelijke en ongemerkte fouten

Het model van volledige, detecteerbare uitval merkt een hele schijf als ontbrekend aan. Een apparaat volgens het model van gedeeltelijk falen werkt grotendeels, terwijl sommige blokken onleesbaar of onjuist zijn. Zulke fouten kunnen verborgen blijven in zelden geraadpleegde gegevens totdat die blokken door een andere uitval nodig zijn voor wederopbouw.

Onderscheid een gemelde leesfout van verkeerde bytes

Een latente sectorfout (LSE) betekent dat de schijf een sector niet kan lezen en een fout meldt. Fysieke schade of bitfouten die de interne ECC niet kan corrigeren, kunnen dit veroorzaken. Omdat de locatie bekend is, kan een redundant systeem een spiegelkopie lezen of dat blok uit pariteit reconstrueren. Door herstelde gegevens terug te schrijven kan de schijf de beschadigde locatie buiten gebruik stellen of opnieuw koppelen.

Ongemerkte gegevensbeschadiging betekent dat een leesbewerking onjuiste bytes teruggeeft zonder een fout te melden. Foutieve firmware, een defecte controller of bus, of een schrijfbewerking naar een verkeerde locatie kan dit veroorzaken. De successtatus van het commando zegt dat de overdracht is voltooid; het is geen controle van de inhoud over de volledige gegevensketen.

Onderscheid adres- en versiefouten
FoutWat is er misWaarom een lokale controlesom van de gegevens de fout kan missen
Schrijfbewerking naar een verkeerde locatieCorrecte nieuwe bytes komen op de verkeerde schijf of in het verkeerde blok terechtDe gegevens en hun bijpassende controlesom kunnen samen worden verplaatst
Verloren schrijfbewerkingEen als voltooid gemelde wijziging bereikt de opslag nooitOude bytes komen nog steeds overeen met hun oude controlesom

Een schrijfbewerking naar een verkeerde locatie kan een niet-gerelateerd blok overschrijven terwijl de bedoelde bestemming verouderd blijft. Een verloren schrijfbewerking laat de oude versie van het bedoelde blok staan. Een adresidentificatie helpt de eerste fout op te sporen; een onafhankelijk opgeslagen verwachting van de nieuwe versie helpt bij de tweede.

De interne ECC van de schijf corrigeert veel fouten in opgeslagen bits. Die kan niet alle fouten elders in het traject controleren, zoals een waarde die wordt beschadigd voordat de schijf de code berekent of nadat de schijf de waarde teruggeeft. Bescherming die beperkt blijft tot het medium laat andere onderdelen ongecontroleerd.

Begrijp waarom schaal ertoe doet

Een praktijkonderzoek volgde 1,53 miljoen operationele schijven gedurende 32 maanden. LSE's troffen ongeveer 8,5% van de nearline-schijven en 1,9% van de schijven voor zakelijk gebruik. Een afzonderlijk onderzoek naar gegevensbeschadiging in dezelfde populatie gedurende 41 maanden vond afwijkende controlesommen op respectievelijk ongeveer 0,86% en 0,065%. Dit zijn historische waarnemingen over verschillende onderzoeksperioden, geen jaarlijkse kansen of huidige garanties. Bij een grote verzameling schijven worden zelfs zeldzame fouten per schijf regelmatige gebeurtenissen tijdens het gebruik.

Gebruik redundantie met verificatie

Een gewone leesbewerking uit een spiegel met twee kopieën kan één kopie kiezen zonder die met de andere te vergelijken. Zonder controlesomcontrole kan die beschadigde bytes teruggeven. Als de kopieën worden vergeleken en verschillen, vertellen twee kopieën alleen niet welke juist is. Een geldige controlesom biedt een basis om een goede versie te kiezen.

Tijdens een RAID-5-wederopbouw kan een LSE op een overgebleven schijf de laatste informatie wegnemen die voor de betreffende strook nodig is. De array heeft al één ontbrekend blok en één XOR-vergelijking kan geen twee onbekenden herstellen. Latente fouten vinden en herstellen terwijl alle schijven nog beschikbaar zijn, behoudt mogelijkheden voor de volgende uitval.

Belangrijkste punten

  • Een LSE is een gemeld onvermogen om een sector te lezen; ongemerkte gegevensbeschadiging geeft verkeerde gegevens terug zonder foutmelding.
  • Schrijfbewerkingen naar een verkeerde locatie hebben de verkeerde bestemming; verloren schrijfbewerkingen laten een oude versie staan.
  • De ECC van de schijf beschermt het medium, maar laat andere delen van het gegevenstraject onbeschermd.
  • Twee verschillende spiegelkopieën vereisen verificatie om een goede kopie aan te wijzen.
  • Een latente fout kan onherstelbaar worden nadat de redundantie is opgebruikt.

5.2 Bereken controlesommen en vergelijk hun sterkte

Een controlesom vat een gegevensblok samen in een veel kleinere waarde. Bereken die bij het lezen opnieuw en vergelijk de uitkomst met de opgeslagen verwachte waarde. Een verschil toont inconsistentie. Verschillende invoerwaarden kunnen dezelfde waarde opleveren, een botsing. Overeenkomende controlesommen vormen dus een sterke aanwijzing waarvan de sterkte afhangt van de gekozen functie en het foutpatroon.

Probeer XOR en optelling

Voor de bytes 0x36, 0x5A, 0xC1 en 0x0F geeft bitsgewijze XOR 0xA2. Binair is de berekening:

00110110⊕01011010⊕11000001⊕00001111=10100010

Laat het laagste bit in beide eerste bytes omslaan, waardoor 0x37 en 0x5B ontstaan. De twee wijzigingen heffen elkaar bij XOR op, zodat 0xA2 overblijft. Een goedkope bewerking kan een voorspelbare blinde vlek hebben.

Een 8-bits-controlesom door optelling telt de bytewaarden op modulo 256:

(54+90+193+15) mod 256=96=0x60

De dubbele bitomslag hierboven verandert de som in 0x62, dus optelling detecteert die fout. Maar een andere volgorde van bytes laat zowel eenvoudige optelling als XOR ongewijzigd.

Maak de uitkomst gevoelig voor positie

Een Fletcher-controlesom houdt twee sommen bij die op nul beginnen. Werk voor elke byte d de eerste som bij en tel de nieuwe waarde daarvan vervolgens bij de tweede op:

s1=(s1+d) mod 255,s2=(s2+s1) mod 255
ByteNieuwe s₁Nieuwe s₂
545454
90144198
1938225
1597122

Het resultaat is (97, 122). Als je de eerste twee bytes verwisselt, krijg je (97, 158). De eerste som negeert de volgorde, maar de tweede weegt posities mee door de lopende optelling. Fletcher detecteert enkele bitfouten en veel foutreeksen tegen lage kosten, al blijven botsingen mogelijk.

Volg een korte CRC-deling

Een cyclische redundantiecontrole (CRC) behandelt bits als coëfficiënten van een polynoom en deelt met XOR. Met generator 1011, die x³ + x + 1 voorstelt, beschermt een rest van drie bits de gegevens. Voeg voor gegevens 1101 drie nullen toe:

  1. Begin met 1101000 en pas XOR toe met 1011000; 0110000 blijft over.
  2. Lijn de generator uit op de eerste één en pas XOR toe met 0101100; 0011100 blijft over.
  3. Pas XOR toe met 0010110; 0001010 blijft over.
  4. Pas XOR toe met 0001011; 0000001 blijft over.

De rest is 001, dus sla 1101001 op. Delen van dat codewoord geeft nul; wijziging in 1111001 geeft rest 110. Een n-bits-CRC detecteert elke foutreeks van maximaal n bits. CPU-ondersteuning maakt CRC praktisch voor opslag en netwerkverkeer, waaronder CRC32C in ext4-metadata en Btrfs.

Cryptografische hashes zoals SHA-256 zijn ook bestand tegen opzettelijke pogingen om botsingen te veroorzaken. Een hash tegen manipulatie heeft een vertrouwde verwachte waarde nodig; als zowel de gegevens als de niet-vertrouwde hash worden vervangen, werkt de vergelijking niet. OpenZFS gebruikt normaal gesproken Fletcher voor gewone gegevens en SHA-256 voor deduplicatie. Acht bytes aan controlesommen per blok van 4 KiB kosten ongeveer 0,2% ruimte. Detectie alleen levert geen vervangende bytes: herstel vereist redundantie of een foutcorrigerende code.

Belangrijkste punten

  • Een afwijkende controlesom toont inconsistentie; een botsing kan een fout verbergen.
  • XOR mist bitomslagen die elkaar opheffen; optelling mist delen die van volgorde zijn veranderd.
  • Fletcher werkt twee lopende sommen bij zodat byteposities het resultaat beïnvloeden.
  • CRC gebruikt polynoomdeling met XOR en detecteert foutreeksen tot een begrensde lengte.
  • Cryptografische hashes vergroten de weerstand tegen botsingen, maar vereisen een vertrouwde verwachte waarde tegen manipulatie.
  • Controlesommen detecteren fouten; herstel vereist aanvullende informatie.

5.3 Plaats controles waar ze de fout kunnen opsporen

Een controlesomfunctie bepaalt welke veranderingen detecteerbaar zijn. Het opslagontwerp bepaalt met welke waarde de controlesom wordt vergeleken, bij welk adres die hoort en of een goede vervanging bestaat. Een sterke controlesom die bij de verkeerde versie hoort, kan nog steeds verouderde gegevens accepteren.

Kies een plaats voor de verwachte waarde
PlaatsingHoe werkt hetBelangrijkste gevolg
Per sectorBijvoorbeeld 512 gegevensbytes plus 8 beschermingsbytes in een sector van 520 bytesBescherming reist mee met de sector
Gebundeld controlesomblokEen blok van 4 KiB bevat 512 controlesommen van acht bytesGegevens bijwerken kan ook vereisen dat een ander blok wordt bijgewerkt
Verwijzing vanuit het ouderblokEen ouderblok bewaart de controlesom van het kindblok waarnaar het verwijstDe verwachte inhoud wordt van buiten het kindblok gecontroleerd

ZFS gebruikt controlesommen in verwijzingen vanuit ouderblokken en maakt zo een verificatieboom tot aan de wortel. Beschermingsinformatie kan ook het verwachte adres bevatten. Het referentielabel van T10 gebruikt de laagste 32 bits van het logische blokadres naast een 16-bits-CRC van de gegevens en een toepassingslabel. Een adrescontrole kan correcte bytes afwijzen die van de verkeerde locatie zijn teruggegeven.

Onderscheid een verkeerde locatie van een verkeerde versie

Stel dat een leesbewerking van schijf 3, blok 1.207 een geldig paar van gegevens en controlesom teruggeeft met een label voor een ander adres. De controlesom alleen klopt, maar de adresidentificatie onthult de verkeerde locatie.

Een verloren schrijfbewerking is lastiger: de oude inhoud kan een geldige controlesom en het juiste adres hebben. Verificatie door teruglezen na schrijven vergelijkt een nieuwe leesbewerking met de verwachte nieuwe inhoud en voegt ongeveer één extra I/O-bewerking toe. Die moet het opgeslagen resultaat waarnemen, niet alleen dezelfde vluchtige cachekopie. Een afzonderlijk opgeslagen verwachte controlesom, bijvoorbeeld in een vastgelegde verwijzing vanuit het ouderblok, kan in plaats daarvan de verouderde versie van het kindblok afwijzen. De afzonderlijke verwachte waarde moet zelf de bedoelde wijziging beschrijven.

Controleer voordat je gegevens teruggeeft of herstelt

Haal bij een leesbewerking het blok en de verwachte controlesom op, bereken de controlesom opnieuw en vergelijk. Als de eerste kopie niet door de controle komt, lees je een andere kopie of reconstrueer je het blok uit redundante gegevens. Controleer dat resultaat voordat je het teruggeeft. Als het door de controle komt, geef je de goede gegevens terug en herschrijf je de beschadigde kopie. Dit is zelfherstel. Als geen geldige kopie kan worden gevonden, geef je een fout terug in plaats van ongecontroleerde bytes.

Een gespiegelde ZFS-pool leest bijvoorbeeld schijf A en detecteert een afwijkende controlesom. De kopie op schijf B komt wel door de controle. Het systeem geeft de gegevens van B terug, herstelt A en registreert de fout van A. Gewone spiegeling zonder controlesomverificatie had de slechte bytes van A ongemerkt kunnen teruggeven.

Zoek fouten voordat uitval herstel afdwingt

Periodieke gegevenscontrole leest en controleert opgeslagen gegevens regelmatig, inclusief blokken die toepassingen zelden gebruiken. Zolang redundantie beschikbaar is, kan het systeem fouten herstellen voordat een andere schijf uitvalt. In het historische LSE-onderzoek vond periodieke controle meer dan 60% van de fouten.

Verificatie kost CPU-tijd, controlesomruimte en soms extra I/O. Acht bytes per 4 KiB kosten ongeveer 0,2%; acht per 512 gegevensbytes kosten ongeveer 1,6%. Leesbewerkingen voor periodieke controle concurreren met verzoeken op de voorgrond, dus rustige perioden zijn nuttig. Het eind-tot-eindargument plaatst de laatste controle dicht bij het bestandssysteem of de toepassing en dekt zo meer van het traject dan ECC die alleen het schijfmedium beschermt.

Belangrijkste punten

  • De plaatsing van de controlesom bepaalt welke verwachte waarde tijdens het lezen beschikbaar is.
  • Adresinformatie detecteert gegevens op de verkeerde locatie; een afzonderlijke actuele verwachte waarde kan verouderde gegevens detecteren.
  • Controleer een herstelde kopie voordat je die teruggeeft of voor herstel gebruikt.
  • Periodieke gegevenscontrole controleert zelden gelezen gegevens zolang redundantie ze nog kan herstellen.
  • Eind-tot-eindcontroles dekken ook fouten buiten het schijfmedium.

I/O-apparaten, schijven en RAID: voorbeelden

5 Walkthroughs

1

Volg een verzoek zonder de CPU bezet te houden

16 stappen
Volg commando's, wachten, DMA en voltooiing via een wachtrij tijdens één opslagleesbewerking.
  1. 1
    IntroductieOnderscheid de taken in een I/O-verzoek

    Een opslagverzoek omvat meerdere taken: beschrijven wat er moet gebeuren, bytes verplaatsen en melden wanneer het klaar is. De CPU hoeft ze niet allemaal voortdurend uit te voeren: met DMA kan hardware de bytes verplaatsen en dankzij interrupts kan de CPU tijdens het wachten ander werk uitvoeren.

    Volg een verzoek vanaf de registerinterface via wachten en overdracht en stel daarna het volledige traject via een stuurprogramma en controller samen.

  2. 2
    UitlegBegin bij de apparaatinterface

    De controller verbergt de firmware en interne hardware achter registers. In een eenvoudig uitvoerprotocol controleert het stuurprogramma of de status gereed is, levert gegevens aan, schrijft het commando en controleert daarna de voltooiing en eventuele fouten.

    De volgorde is belangrijk: het schrijven van het commando kan de hardware onmiddellijk starten. Een toepassing bereikt deze gecontroleerde bewerking via een systeemaanroep.

  3. 3
    KernpuntEen registeradres kan werk starten

    Bij MMIO bereiken laad- en opslaginstructies apparaatregisters via gekoppelde adressen. Een register lezen kan een vlag wissen; een schrijfbewerking kan een commando starten. Gewone aannames over RAM zijn hier onveilig.

    Het stuurprogramma gebruikt toegangsfuncties van het platform en vereiste barrières. Een pointer als volatile declareren biedt niet alle vereiste ordening tussen een RAM-descriptor en de MMIO-melding die het apparaat die descriptor laat ophalen.

  4. 4
    UitdagingHerstel de commandovolgorde

    Een stuurprogramma ziet dat een uitvoerapparaat gereed is, schrijft het commando en vult daarna het gegevensregister. Welke volgorde moet het gebruiken en waarom?

    ---reveal---

    Lever de gegevens aan voordat je het commando geeft. Het commando start het apparaat, dat anders verouderde gegevens zou kunnen verwerken. Na het indienen controleert het stuurprogramma op voltooiing en eventuele gemelde fouten.

  5. 5
    VoorbeeldLaat een ander proces draaien

    Proces C start een leesbewerking die 7 ms duurt. Proces D heeft berekeningen klaarstaan. Bij polling controleert de CPU gedurende het hele wachten herhaaldelijk de status van de leesbewerking van C.

    Bij interruptgestuurd wachten blokkeert C en kan D draaien. Bij voltooiing controleert de afhandelaar het verzoek en maakt C gereed. De leesbewerking duurt nog steeds 7 ms; nuttige berekeningen hebben die tijd gevuld.

  6. 6
    UitlegVergelijk de meldingskosten

    Een zeer snelle voltooiing kan binnenkomen voordat blokkeren en wekken de moeite waard zouden zijn. Een korte pollingfase vermijdt die overhead; daarna slaapt een hybride strategie als het verzoek nog niet is voltooid.

    Bij zwaar verkeer deelt interruptbundeling één interrupt over meerdere voltooiingen. Dat vermindert CPU-werk, maar kan de vroegste voltooiing vertragen terwijl de reeks wordt gevormd.

  7. 7
    UitdagingKies een reeksgrootte op basis van de kosten

    Een apparaat levert elke seconde 60.000 voltooiingen. Eén interrupt afhandelen kost 6 µs CPU-tijd. Hoeveel CPU-tijd wordt elke seconde bespaard door drie voltooiingen per interrupt te bundelen?

    ---reveal---

    Afzonderlijke interrupts kosten 360 ms per seconde. Reeksen van drie voltooiingen vereisen 20.000 interrupts:

    20.000×6 μs=120 ms

    De besparing is 240 ms per seconde. De afhandelingstijd van het apparaat blijft gelijk, terwijl de melding vertraagd kan worden.

  8. 8
    VoorbeeldTel het kopieerwerk dat PIO vereist

    Stel dat 8 KiB aan bruikbare gegevens door een gegevensregister van 8 bytes gaat en elke toegang 80 ns kost. De CPU moet uitvoeren:

    8192/8=1024 toegangen 1024×80 ns=81,92 μs

    Die bewerkingen verplaatsen alleen de bruikbare gegevens. DMA draagt de overdracht over aan hardware; de CPU houdt het werk over van buffervoorbereiding, indiening en afhandeling van de voltooiing.

  9. 9
    UitlegHoud de bestemming stabiel

    Het stuurprogramma koppelt de buffer voor toegang door het apparaat en houdt de onderliggende pagina's vastgezet totdat de overdracht is voltooid. Een scatter-gatherlijst beschrijft afzonderlijke gebieden met een adres en lengte wanneer de fysieke pagina's niet naast elkaar liggen.

    Het apparaat ontvangt DMA-busadressen, geen gewone gebruikerspointer. Een IOMMU kan die adressen vertalen en de toegang van het apparaat beperken tot toegestaan geheugen.

  10. 10
    TipCoördineer de zichtbaarheid van geheugen

    Een geldig adres is slechts een deel van een correcte DMA-overdracht. Het apparaat moet de nieuwste uitgaande gegevens van de CPU zien en de CPU moet inkomende bytes zien die door het apparaat zijn geschreven.

    Op sommige platforms zorgt de hardware voor coherentie. Andere hebben expliciete cachesynchronisatie via de DMA-API nodig. Houd de buffer gekoppeld en stabiel totdat het apparaat die niet meer benadert.

  11. 11
    UitdagingOnderzoek het te vroeg vrijgeven van een buffer

    Een stuurprogramma start DMA naar twee vastgezette pagina's, geeft ze vóór voltooiing vrij en wijst ze toe aan een ander proces. Waarom kan een latere interrupt dit niet veilig maken?

    ---reveal---

    Het apparaat kan al naar de hergebruikte pagina's hebben geschreven voordat het de interrupt veroorzaakt. De pagina's moeten vastgezet blijven en mogen niet worden hergebruikt totdat DMA is voltooid. De voltooiing achteraf afhandelen kan de geheugenbeschadiging niet ongedaan maken.

  12. 12
    VerbandGeef het verzoek door de stack

    Bij een gebufferde leesbewerking met een cachemisser zoekt het bestandssysteem de gevraagde opslagblokken. De bloklaag plaatst de verzoeken in een wachtrij of voegt ze samen en het stuurprogramma dient hardwarecommando's in.

    Door deze taakverdeling kan het bestandssysteem dezelfde blokinterface voor verschillende apparaten gebruiken. Een speciale besturingsfunctie, zoals een apparaatspecifiek commando, kan een interface zoals ioctl() nodig hebben.

  13. 13
    UitlegDien werk in via een NVMe-wachtrij

    Het NVMe-stuurprogramma plaatst een commando in een indieningswachtrij in het geheugen en schrijft daarna naar het MMIO-meldingsregister. De controller haalt de vermelding op, draagt de bruikbare gegevens via DMA over en plaatst een voltooiingsvermelding. MSI-X kan de melding naar een geschikte kern sturen.

    Dankzij veel wachtrijparen kunnen CPU-kernen werk indienen met minder concurrentie om gedeelde bronnen dan bij één ondiepe apparaatwachtrij.

  14. 14
    UitdagingZoek een verzoek vóór indiening

    Twee leesverzoeken voor aangrenzende blokken wachten in de kernel. Waar kunnen ze worden samengevoegd en welke latere handeling vertelt een NVMe-controller dat die het ingediende werk moet ophalen?

    ---reveal---

    De algemene bloklaag kan de aangrenzende verzoeken samenvoegen voordat het stuurprogramma ze indient. Het NVMe-stuurprogramma vult daarna een indieningsvermelding en schrijft naar het meldingsregister. Samenvoegen gaat over het verzoek; het meldingsregister kondigt werk in de wachtrij aan.

  15. 15
    UitdagingVerklaar laag CPU-gebruik tijdens een grote leesbewerking

    Een grote leesbewerking met een cachemisser wordt voltooid terwijl een ander proces berekeningen uitvoert. De CPU stelt de overdracht in en handelt de voltooiing af, maar kopieert niet woord voor woord via apparaatregisters. Welke mechanismen verklaren deze waarneming?

    ---reveal---

    DMA verplaatst de bruikbare gegevens rechtstreeks naar het geheugen. Dankzij interruptgestuurd wachten kan het lezende proces blokkeren terwijl andere berekeningen worden uitgevoerd. Het stuurprogramma en de bloklaag organiseren de indiening en voltooiing; geen van beide mechanismen laat het eigen werk van het opslagapparaat verdwijnen.

  16. 16
    SamenvattingVolg de verantwoordelijkheid bij elke overgang

    Lees een verzoekverloop door te vragen wie het blokadres kent, wie het controllerprotocol kent, wie de bruikbare gegevens verplaatst en wie de voltooiing meldt.

    Houd wachten, kopiëren en plannen afzonderlijk bij het onderzoeken van CPU-kosten. Dezelfde leesbewerking kan een standaardblokinterface, een MMIO-melding, DMA en een interrupt combineren.

2

Zet schijfbeweging om in een prestatieschatting

13 stappen
Breng sectorgaranties, berekeningen van toegangstijd en verzoekplanning met elkaar in verband.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieBegin bij het werk achter een adres
  2. 2
    UitlegOnderscheid drie opslaggaranties
  3. 3
    UitdagingBeoordeel een melding van een gebufferde schrijfbewerking
  4. 4
    VoorbeeldReken spilsnelheid om naar gemiddelde wachttijd
  5. 5
    VoorbeeldTel de overdracht voor een kleine leesbewerking erbij op
  6. 6
    KernpuntSpreid positionering over meer gegevens
  7. 7
    UitdagingSchat een andere willekeurige werklast
  8. 8
    VoorbeeldTeken een LOOK-route
  9. 9
    VoorbeeldTel de circulaire terugkeer mee
  10. 10
    UitdagingPas beleid toe op nieuwe verzoeken
  11. 11
    VerbandKijk verder dan zoekafstand
  12. 12
    UitdagingKies wat je wilt verbeteren
  13. 13
    SamenvattingGebruik de juiste grootheid voor de beslissing
3

Volg een overschrijving op een SSD tot het vrijmaken van ruimte

14 stappen
Volg celbeperkingen, veranderende koppelingen, extra schrijfbewerkingen en prestaties zoals het hostsysteem die ziet.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieBekijk wat een overschrijving werkelijk doet
  2. 2
    UitlegKies de fysieke eenheid van de bewerking
  3. 3
    KernpuntVerbind dichtheid met de beperkingen van cellen
  4. 4
    UitdagingBehoud aangrenzende pagina's
  5. 5
    VoorbeeldLeid een logische overschrijving om
  6. 6
    UitlegKopieer alleen wat nog geldig is
  7. 7
    VoorbeeldBereken de verborgen programmeerkosten
  8. 8
    TipGeef het opruimproces betere informatie
  9. 9
    UitdagingMaak een blok met meer geldige pagina's vrij
  10. 10
    UitlegLever voldoende onafhankelijke verzoeken aan
  11. 11
    VoorbeeldReken een levensduuropgave om
  12. 12
    UitdagingVerklaar een vertraging in de stationaire toestand
  13. 13
    UitdagingGebruik informatie over verwijdering om intern werk te veranderen
  14. 14
    SamenvattingVerbind het fysieke beeld met dat van het hostsysteem
4

Bouw een RAID-keuze op vanuit fysiek werk

18 stappen
Breng stroken in kaart, herstel met pariteit en vergelijk prestaties in gezonde toestand met risico's tijdens wederopbouw.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieVergelijk een array op meerdere aspecten
  2. 2
    UitlegHoud de interface en de indeling afzonderlijk
  3. 3
    VerbandHoud rekening met de toestand na uitval
  4. 4
    UitdagingOnderscheid beschikbaarheid van herstel van een eerdere versie
  5. 5
    VoorbeeldPlaats een strook met strookdelen van één blok
  6. 6
    UitlegVoeg gespiegelde paren toe
  7. 7
    UitdagingVolg een groter strookdeel
  8. 8
    KernpuntOnderscheid één schrijfbewerking van veel schrijfbewerkingen
  9. 9
    VoorbeeldBereken de XOR-pariteit van een strook
  10. 10
    VoorbeeldHerstel de ontbrekende waarde
  11. 11
    VoorbeeldWerk pariteit bij met het gewijzigde blok
  12. 12
    UitlegVerplaats het knelpunt of voeg een vergelijking toe
  13. 13
    UitdagingKies de bruikbare pariteitswijziging
  14. 14
    VoorbeeldBereken de tijd voordat je een wederopbouw toezegt
  15. 15
    UitlegOnderzoek fouten tijdens die periode
  16. 16
    UitdagingKies tussen indelingen met gelijke capaciteit
  17. 17
    UitdagingCombineer werklast en wijzigingsfasen
  18. 18
    SamenvattingVolg de indeling tot in het herstel
5

Controleer een blok voordat je de bytes vertrouwt

15 stappen
Onderscheid foutsoorten, bereken controlesommen en volg gecontroleerd herstel.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieVraag wat een geslaagde leesbewerking vaststelt
  2. 2
    UitlegOnderscheid onleesbaar van ongemerkt onjuist
  3. 3
    VoorbeeldVolg de bestemming en de versie
  4. 4
    UitdagingOnderzoek een geslaagde leesbewerking met verouderde gegevens
  5. 5
    VoorbeeldBereken een controlesom door optelling
  6. 6
    KernpuntBekijk een botsing zonder willekeurig te raden
  7. 7
    VoorbeeldVerwerk positie in de som met Fletcher
  8. 8
    UitdagingKies de juiste controlesomberekening
  9. 9
    VerbandWeet wat sterkere controles toevoegen
  10. 10
    UitlegPlaats de verwachte waarde buiten de verdachte waarde
  11. 11
    VoorbeeldControleer de herstelbron
  12. 12
    TipZoek verborgen fouten zolang kopieën bestaan
  13. 13
    UitdagingKies een controle voor een verkeerd geplaatst blok
  14. 14
    UitdagingHerstel voordat de redundantie is opgebruikt
  15. 15
    SamenvattingVolg het bewijs voor een teruggegeven blok

I/O-apparaten, schijven en RAID: oefenvragen

50 Oefenvragen in 5 sets

Set 1: Wachtrijen, flashonderhoud en herstel10 Oefenvragen

Vraag 1 van 10

Welke CPU-taak neemt DMA vooral over tijdens een grote apparaatoverdracht?
  1. Het volgende gereedstaande proces kiezen.
  2. De bestandsrechten van de toepassing controleren.
  3. Elk gegevenswoord van of naar het apparaat kopiëren.
  4. Elke voltooiingsinterrupt van een verzoek afhandelen.
Toon antwoordVerberg antwoord
Antwoord: C
DMA-hardware draagt de gegevens over tussen geheugen en apparaat zonder dat de CPU elk woord kopieert. De CPU bereidt nog steeds buffers voor en handelt de voltooiing af. Interruptgestuurd wachten kan de CPU vrijmaken terwijl het apparaat werkt, maar is een ander mechanisme dan het verplaatsen van de bytes.

Vraag 2 van 10

Twee leesverzoeken voor aangrenzende blokken wachten op hetzelfde Linux-opslagapparaat. Welke laag kan ze combineren voordat het hardwarestuurprogramma het werk indient?
  1. De algemene bloklaag voor verzoeken.
  2. De interruptvectorentabel van het apparaat.
  3. De tabel voor sectorherkoppeling van de schijf.
  4. De virtuele-adresvertaler van de toepassing.
Toon antwoordVerberg antwoord
Antwoord: A
De algemene bloklaag kan aangrenzende verzoeken samenvoegen en het gecombineerde werk in een wachtrij plaatsen of plannen voordat het stuurprogramma het indient. Sectorherkoppeling is een interne schijffunctie die beschadigde locaties omleidt. Die combineert geen kernelverzoeken die boven het stuurprogramma wachten.

Vraag 3 van 10

Sporen zijn genummerd van 0–99. De kop staat op 30 en beweegt naar hogere spoornummers, met verzoeken op 10, 45 en 70. Hoe ver beweegt LOOK voordat alle drie zijn afgehandeld?
  1. 109 sporen
  2. 100 sporen
  3. 40 sporen
  4. 89 sporen
Toon antwoordVerberg antwoord
Antwoord: B
LOOK handelt 45 en 70 af, keert bij 70 om en eindigt bij 10. De beweging is 40 omhoog plus 60 omlaag, in totaal 100 sporen. Doorgaan naar de fysieke rand bij 99 volgt in plaats daarvan SCAN en voegt beweging toe die LOOK vermijdt.

Vraag 4 van 10

Een hostsysteem overschrijft logische pagina 27. De FTL plaatst de nieuwe versie op de vrije fysieke pagina 93. Welke wijziging zorgt dat latere leesbewerkingen de nieuwe versie teruggeven?
  1. Pagina 27 afzonderlijk wissen.
  2. Elke pagina in fysieke volgorde plaatsen.
  3. Logische pagina 27 hernummeren als pagina 93.
  4. De koppeling van logisch naar fysiek veranderen.
Toon antwoordVerberg antwoord
Antwoord: D
De FTL verandert de vermelding voor logische pagina 27 zodat die naar fysieke pagina 93 verwijst en maakt de oude fysieke versie ongeldig. Het hostsysteem blijft logisch adres 27 gebruiken. Het hostadres hernummeren zou de stabiele blokinterface doorbreken die de vertaallaag biedt.

Vraag 5 van 10

Een SSD heeft voor elke leesbewerking 125 µs nodig. Een programma wacht op elke leesbewerking voordat het de volgende aanvraagt, zonder andere overhead. Wat is ongeveer de bewerkingssnelheid?
  1. 125 IOPS
  2. 8.000 IOPS
  3. 80.000 IOPS
  4. 125.000 IOPS
Toon antwoordVerberg antwoord
Antwoord: B
Reken 125 µs om naar 0,000125 s en neem het omgekeerde: 8.000 leesbewerkingen per seconde. Serieel indienen kan niet veel flashkanalen tegelijk benutten. Een hoog opgegeven aantal IOPS voor het hele apparaat veronderstelt voldoende uitstaande verzoeken, die dit programma niet levert.

Vraag 6 van 10

Het opruimen van ongeldige flashgegevens maakt een blok van 100 pagina's vrij dat 60 geldige pagina's bevat. De geldige pagina's worden elders naartoe gekopieerd, waarna de netto vrije ruimte wordt gebruikt voor nieuwe hostpagina's. Alle pagina's zijn even groot. Welke schrijfversterking omvat de kopieën en nieuwe schrijfbewerkingen?
  1. 1,5
  2. 0,6
  3. 2,5
  4. 4,0
Toon antwoordVerberg antwoord
Antwoord: C
Het kopiëren van 60 geldige pagina's laat een nettowinst van 40 vrije pagina's voor hostgegevens over. Het flashgeheugen programmeert in totaal 60 + 40 = 100 pagina's voor 40 hostpagina's, wat WA = 2,5 geeft. Alleen de gekopieerde pagina's delen door de hostpagina's geeft 1,5 en laat de hostgegevens zelf buiten beschouwing.

Vraag 7 van 10

Een strook heeft gegevensblokken 1010 en 0110 en XOR-pariteit 1100. De schijf met 0110 valt uit. Welk blok reconstrueert de ontbrekende gegevens?
  1. 0110
  2. 1100
  3. 1010
  4. 0000
Toon antwoordVerberg antwoord
Antwoord: A
Pas XOR toe op de resterende gegevens en de pariteit: 1010 XOR 1100 = 0110. De pariteit bevat al beide oorspronkelijke gegevensblokken, dus het overgebleven blok heft zijn eigen bijdrage op. Alleen 1100 teruggeven zou de redundantiewaarde verwarren met de ontbrekende gegevens.

Vraag 8 van 10

Er zijn zes schijven van 3 TB beschikbaar. Een array moet minimaal 12 TB bieden en elke combinatie van twee uitgevallen schijven overleven. Welke indeling voldoet volgens de RAID-modellen met gelijke schijven aan beide eisen?
  1. RAID-10 met drie gespiegelde paren.
  2. RAID-1 met twee van de schijven.
  3. RAID-5 over alle zes schijven.
  4. RAID-6 over alle zes schijven.
Toon antwoordVerberg antwoord
Antwoord: D
RAID-6 biedt (6 − 2) × 3 = 12 TB en overleeft elke combinatie van twee uitgevallen schijven. RAID-10 biedt slechts 9 TB en kan gegevens verliezen als beide uitgevallen schijven één paar treffen. RAID-5 heeft met 15 TB voldoende capaciteit, maar verdraagt slechts één uitgevallen schijf.

Vraag 9 van 10

Welke onderhoudsbewerking leest en controleert periodiek gegevens die toepassingen mogelijk zelden gebruiken?
  1. Periodieke gegevenscontrole.
  2. Reservecapaciteit in flashgeheugen.
  3. Samenvoegen van verzoeken.
  4. Bundelen van interrupts.
Toon antwoordVerberg antwoord
Antwoord: A
Periodieke gegevenscontrole leest opgeslagen gegevens proactief en controleert de integriteit terwijl redundante herstelinformatie mogelijk nog beschikbaar is. Het samenvoegen van verzoeken combineert wachtende aangrenzende I/O voor efficiëntie. Daardoor worden ongevraagde, zelden gebruikte blokken niet op latente fouten gecontroleerd.

Vraag 10 van 10

Een schrijfbewerking stuurt een correct paar van gegevens en controlesom naar blok 840 in plaats van het bedoelde blok 480. Welke aanvullende controle kan de verkeerde bestemming onthullen wanneer blok 840 wordt gelezen?
  1. Controleer het paar opnieuw met dezelfde controlesom.
  2. Vergelijk de gemelde spilsnelheid.
  3. Vergelijk het adreslabel met het gevraagde adres.
  4. Wacht totdat beide spiegelkopieën zijn geselecteerd.
Toon antwoordVerberg antwoord
Antwoord: C
Een adreslabel dat blok 480 beschrijft, is in strijd met een leesbewerking van blok 840 en onthult de verkeerde bestemming. De controlesom van de gegevens kan bij herberekening nog steeds kloppen omdat gegevens en controlesom samen zijn verplaatst. Overeenkomende inhoud alleen stelt niet vast dat het blok bij het gevraagde adres hoort.
Set 2: Apparaten, tijden en gegevensbescherming10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Een stuurprogramma moet een eenvoudige uitvoerbewerking starten. Het apparaat is gereed. Wat moet het stuurprogramma direct doen voordat het naar het commandoregister schrijft?
  1. Wachten op voltooiing van de uitvoer.
  2. De uit te voeren gegevens aanleveren.
  3. Het bezetbit van het apparaat wissen.
  4. Gegevens van het apparaat lezen.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Op één CPU-kern duurt een opslagbewerking 14 ms. Een ander proces heeft 9 ms aan berekeningen klaarstaan. Hoe kan interruptgestuurd wachten het CPU-gebruik verbeteren?
  1. Het verkort de apparaatbewerking tot 5 ms.
  2. Het voert instructies van beide processen tegelijk uit.
  3. Het voltooit de overdracht zonder CPU-instelling.
  4. Het voert de klaargezette berekeningen uit tijdens het wachten.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Een schijf heeft fysieke sectoren van 4 KiB en accepteert logische sectoren van 512 bytes. Wat duidt een LBA aan?
  1. Een logische sector die het hostsysteem kan zien.
  2. Een fysiek spoor onder één kop.
  3. Een bestandssysteemblok dat aan een bestand is toegewezen.
  4. Een atomaire eenheid met een garantie bij stroomuitval.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Een HDD van 6.000 RPM heeft een gemiddelde zoektijd van 4 ms en een overdrachtssnelheid van 100 MB/s. De schijf handelt onafhankelijke willekeurige leesbewerkingen van 10.000 bytes één voor één af, zonder cachetreffers of wachtrijtijd. Welke effectieve gegevenssnelheid volgt daar ongeveer uit?
  1. 2,44 MB/s
  2. 100 MB/s
  3. 1,10 MB/s
  4. 0,71 MB/s
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Een NAND-pagina bevat oude gegevens. Op welk fysiek niveau moet flashgeheugen worden gewist voordat diezelfde pagina opnieuw kan worden geprogrammeerd?
  1. De afzonderlijke geprogrammeerde byte.
  2. Het wisblok dat de pagina bevat.
  3. Het bestandssysteemblok van de host.
  4. De enkele bezette flashpagina.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Wat is bij een HDD die met 12.000 RPM draait de gemiddelde rotatievertraging voor een willekeurig geplaatste sector?
  1. 2,5 ms
  2. 5 ms
  3. 1,25 ms
  4. 12 ms
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een bestand wordt per ongeluk verwijderd van een volume op een gezonde gespiegelde array. Waarom is een afzonderlijke back-up nog steeds nuttig?
  1. De verwijdering wijzigt één schijf; de andere bewaart een historische kopie.
  2. De verwijdering blijft in de cache totdat een back-up de ontbrekende schijf herstelt.
  3. De verwijdering wijzigt de pariteit; wederopbouw van de spiegel draait de wijziging terug.
  4. De verwijdering wijzigt beide actuele kopieën; een back-up kan een eerdere versie bewaren.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Een RAID-0-array heeft vijf schijven en strookdelen van één blok. Schijven en lokale offsets zijn vanaf nul genummerd. Waar staat logisch blok 23?
  1. Schijf 4, offset 3.
  2. Schijf 2, offset 5.
  3. Schijf 3, offset 4.
  4. Schijf 3, offset 5.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Een schijf geeft een blok met onjuiste bytes terug en meldt succesvolle voltooiing. Welke soort fout is opgetreden?
  1. Een gedetecteerde volledige schijfuitval.
  2. Een gemelde latente sectorfout.
  3. Een ongemerkte gegevensbeschadiging.
  4. Een bevestigde verloren schrijfbewerking.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Een 8-bitscontrolesom door optelling begint bij nul en negeert overloop. Welke controlesom volgt uit de decimale bytes 150, 90 en 40?
  1. 25
  2. 24
  3. 255
  4. 280
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 3: Breng verzoeken in kaart en houd rekening met verborgen werk10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Een stuurprogramma schrijft een commandodescriptor in RAM en schrijft daarna naar een MMIO-meldingsregister. Waarom kan een volatile pointer naar het meldingsregister op zichzelf onvoldoende zijn?
  1. Die ordent poortregisters maar geen gekoppelde registers.
  2. Die beschermt de pointer maar niet de descriptorinhoud.
  3. Die ordent leesbewerkingen maar geen schrijfbewerkingen van het apparaat.
  4. Die garandeert niet alle vereiste ordening van geheugenbewerkingen.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Een gebruikersbuffer van drie pagina's bezet niet-aangrenzende fysieke pagina's. Een stuurprogramma heeft ze voor DMA gekoppeld. Wat moet blijven gelden totdat het apparaat klaar is?
  1. De toepassing moet de CPU laten blijven pollen.
  2. De onderliggende pagina's moeten vastgezet en stabiel blijven.
  3. De fysieke pagina's moeten opeenvolgende nummers krijgen.
  4. Het apparaat moet de oorspronkelijke gebruikerspointer gebruiken.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Een HDD-kop begint op spoor 40 met wachtende verzoeken op 10, 44 en 47. De schijf gebruikt SSTF. Direct na elke voltooiing komt één nieuw verzoek binnen, één spoor hoger dan de huidige koppositie. Welke drie verzoeken worden als eerste afgehandeld?
  1. 44, dan 45, dan 46.
  2. 44, dan 47, dan 48.
  3. 44, dan 47, dan 10.
  4. 44, dan 45, dan 47.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Een schijf meldt een schrijfbewerking als voltooid nadat die in een vluchtige cache is geplaatst. Welk cachebeleid beschrijft dit?
  1. Een doorschrijfcache.
  2. Een vooruitreescache.
  3. Een terugschrijfcache.
  4. Een cache met sectorverschuiving.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Een Fletcher-controlesom begint met beide sommen op nul en gebruikt modulo 255. Welk paar ontstaat na de decimale bytes 100 en 200 als je voor elke byte de eerste som vóór de tweede bijwerkt?
  1. (44, 144)
  2. (45, 145)
  3. (45, 90)
  4. (100, 45)
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Een SSD van 2 TB heeft een opgave van 1.460 TBW over vijf jaar. Welke DWPD-opgave volgt daaruit als je 365 dagen per jaar gebruikt?
  1. 0,8 DWPD
  2. 2,0 DWPD
  3. 0,2 DWPD
  4. 0,4 DWPD
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Acht gelijke schijven verwerken elk 120 kleine willekeurige fysieke I/O-bewerkingen per seconde. Hoeveel logische kleine schrijfbewerkingen per seconde kunnen RAID-5 en RAID-6 in het ideale evenwichtige model verwerken met lezen-wijzigen-schrijven?
  1. RAID-5: 240; RAID-6: 160.
  2. RAID-5: 480; RAID-6: 320.
  3. RAID-5: 120; RAID-6: 120.
  4. RAID-5: 960; RAID-6: 960.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Een pariteitsstrook heeft oude pariteit 1011. Eén gegevensblok verandert van 0010 in 1101. Wat is de nieuwe XOR-pariteit?
  1. 0110
  2. 1001
  3. 0100
  4. 1111
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Een XOR-controlesom omvat de bytes 0x20 en 0x10. Van beide bytes slaat het laagste bit om, waardoor ze 0x21 en 0x11 worden. Wat gebeurt er met de controlesom?
  1. Die stijgt van 0x30 naar 0x32.
  2. Die daalt van 0x30 naar 0x2E.
  3. Die verandert van 0x30 in 0x31.
  4. Die blijft gelijk aan 0x30.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Een bevestigde wijziging van blok 80 moet overeenkomen met de nieuwe controlesom van een vastgelegd ouderblok. Een leesbewerking geeft de eerdere bytes terug met hun bijpassende oude controlesom en adreslabel 80. Een spiegelkopie komt overeen met het ouderblok. Welke kopie moet worden teruggegeven, wat wijst de eerste kopie af en wat moet worden hersteld?
  1. Geef de eerste terug; het adreslabel klopt; herstel de spiegel.
  2. Geef de spiegel terug; de oudercontrole wijst de eerste af; herstel de eerste.
  3. Geef de eerste terug; de lokale controlesom klopt; herstel het ouderblok.
  4. Geef de spiegel terug; het adreslabel van de eerste faalt; herstel het label.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 4: Leg afwegingen rond prestaties en integriteit uit10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Een apparaat voltooit 240.000 verzoeken per seconde. Elke interrupt kost 4 µs CPU-tijd. Reeksen van vier voegen maximaal 12 µs meldingsvertraging toe; reeksen van acht maximaal 28 µs. De grenzen zijn 0,30 processorkern en 20 µs extra vertraging. Welk beleid voldoet aan beide?
  1. Eén interrupt per acht voltooiingen.
  2. Eén interrupt per voltooiing.
  3. Eén interrupt per vier voltooiingen.
  4. Eén interrupt per twee voltooiingen.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Wat vertelt een schrijfbewerking naar het meldingsregister van een indieningswachtrij de controller bij een NVMe-verzoek?
  1. Dat een proces zijn resultaat al heeft verwerkt.
  2. Dat een bestand duurzame opslag heeft bereikt.
  3. Dat alle CPU-caches de nieuwe gegevens bevatten.
  4. Dat ingediend werk in de wachtrij beschikbaar is.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Een HDD heeft een zoektijd van 3 ms, een omwentelingstijd van 10 ms en een overdrachtssnelheid van 200 MB/s. Negeer cachetreffers en wachtrijtijd. Wat is de kleinste grootte van één sequentieel verzoek die een effectieve doorvoer van minimaal 100 MB/s oplevert, uitgaande van de gemiddelde aanvankelijke rotatievertraging bij een willekeurige sectorpositie?
  1. 1,6 MB
  2. 0,8 MB
  3. 1,0 MB
  4. 2,0 MB
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Twee schijfverzoeken hebben voorspelde zoek- en rotatietijden van 1 ms/7 ms en 3 ms/1 ms. Hoe ordent SPTF ze?
  1. Het handelt het eerste af omdat 1 ms de kortere zoektijd is.
  2. Het handelt het tweede af omdat 4 ms de kortere positioneringstijd is.
  3. Het handelt het eerste af omdat 7 ms de langere rotatiewachttijd is.
  4. Het handelt het tweede af omdat een langere zoektijd altijd voorrang heeft.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Een SSD van 512 GiB gebruikt logische pagina's van 8 KiB en één vertaalvermelding van 8 bytes per pagina. Hoeveel ruimte vereist de volledige vertaaltabel op paginaniveau als die in het geheugen blijft?
  1. 256 MiB
  2. 1 GiB
  3. 64 MiB
  4. 512 MiB
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Een gevulde SSD wordt langzamer tijdens aanhoudende willekeurige overschrijvingen, hoewel de verbindingssnelheid gelijk blijft. Welk intern werk kan de afname verklaren?
  1. Toenemende rotatiewachttijden tussen flashpagina's.
  2. Pagina's kopiëren die tijdens GC al ongeldig zijn gemarkeerd.
  3. Geldige pagina's kopiëren tijdens het opruimen van ongeldige gegevens.
  4. Alleen de afzonderlijke overschreven flashpagina's wissen.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een redundante array heeft één schijf verloren, maar levert binnen zijn fouttolerantie nog steeds alle gevraagde gegevens. In welke toestand verkeert de array?
  1. Gedegradeerde werking.
  2. Een voltooide wederopbouw.
  3. Een uitschakeling na volledige uitval.
  4. Een werking zonder stroken.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Bij de wederopbouw van RAID-5 met vier schijven moeten drie overgebleven schijven van 6 TB worden gelezen. Modelleer voor een voorbeeldberekening één leesfout per 10¹⁵ bits. Welk verwacht aantal fouten volgt daaruit en wat betekent het?
  1. 0,018 fouten; een verwacht aantal volgens het foutmodel.
  2. 0,144 fouten; een verwacht aantal volgens het foutmodel.
  3. 0,144 fouten; precies 14,4% kans op gegevensverlies.
  4. 0,018 fouten; precies 1,8% kans op gegevensverlies.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Twee spiegelschijven geven verschillende inhoud terug voor hetzelfde blok. Geen van beide meldt een leesfout en er is geen verwachte controlesom beschikbaar. Welke conclusie is gerechtvaardigd?
  1. De eerst gelezen schijf moet de nieuwste gegevens bevatten.
  2. De schijf met meer vrije ruimte moet correct zijn.
  3. Het verschil wijst aan welke schijf defect is.
  4. De kopieën verschillen, maar geen van beide is als correct gecontroleerd.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Hoeveel onderscheidbare ladingsniveaus heeft een QLC-flashcel nodig om haar vier bits weer te geven?
  1. 16
  2. 8
  3. 4
  4. 32
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 5: Kies ontwerpen bij gecombineerde beperkingen10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Een apparaatregister wist zijn gereedheidsvlag telkens wanneer het wordt gelezen. Waarom moet het stuurprogramma herhaaldelijk lezen als apparaatbewerkingen behandelen?
  1. Het register bevat altijd een volledig gegevensblok.
  2. Elke leesbewerking kan de zichtbare toestand van het apparaat veranderen.
  3. Elke leesbewerking geeft gegarandeerd gecachte bytes terug.
  4. Het register is alleen via DMA beschrijfbaar.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Tijdens een stroom pakketten blijft een CPU bezig met het afhandelen van interrupts terwijl de toepassing bijna geen pakketten verwerkt. Welke verandering pakt dit livelockmechanisme aan?
  1. Veroorzaak voor elk wachtend pakket afzonderlijk een interrupt.
  2. Behoud dezelfde interruptfrequentie en blokkeer elke verwerker.
  3. Gebruik bij zware belasting begrensde reeksen pollingwerk.
  4. Laat elk voltooid pakket een nieuwe interrupt veroorzaken.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Een buffer is virtueel aaneengesloten over twee niet-aangrenzende fysieke pagina's. Het stuurprogramma geeft de gebruikerspointer aan een DMA-apparaat en geeft daarna de pagina's vóór voltooiing vrij. Welke oplossing verhelpt beide fouten?
  1. Behoud de gebruikerspointer en schrijf het commandoregister weg.
  2. Koppel één pagina en kopieer alleen de voltooiingsstatus.
  3. Zet de pagina's vast maar blijf de virtuele pointer doorgeven.
  4. Geef gekoppelde scatter-gatheradressen en houd pagina's vastgezet.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Een apparaat garandeert atomiciteit bij stroomuitval voor één eenheid van 4 KiB. Een uitgelijnde schrijfbewerking van 8 KiB beslaat twee zulke eenheden en wordt bevestigd in een vluchtige terugschrijfcache. Wat kan worden geconcludeerd bij onmiddellijke stroomuitval?
  1. Noch de volledige wijziging van 8 KiB noch de persistentie ervan is gegarandeerd.
  2. De volledige wijziging van 8 KiB is atomair omdat beide eenheden zijn uitgelijnd.
  3. De volledige schrijfbewerking is duurzaam omdat de bevestiging al is ontvangen.
  4. Alleen de tweede eenheid van 4 KiB kan de vorige inhoud behouden.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Welk fysiek proces begrenst vooral het aantal programmeer-wiscycli van NAND-flashgeheugen?
  1. Herhaald lezen telt altijd als volledige wiscycli.
  2. Elke wisbewerking verwijdert permanent een opgeslagen bitpositie.
  3. Herhaalde programmeer-wiscycli beschadigen flashcellen.
  4. Herhaalde ECC-controles verbruiken het schrijfbudget van de cel.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Een array heeft een bitmap voor voorgenomen schrijfbewerkingen maar geen logboek met nieuwe gegevens of pariteit. Welke herstelinformatie biedt de bitmap na een onderbroken wijziging?
  1. De exact bedoelde nieuwe inhoud van elk getroffen blok.
  2. De gebieden die controle en hersynchronisatie nodig hebben.
  3. De identiteit van elke ongemerkt beschadigde gegevensschijf.
  4. De ontbrekende pariteitswaarden voor elke onvolledige strook.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een RAID-10-array met zes schijven heeft de paren (0,1), (2,3) en (4,5). Schijf 2 is uitgevallen. Elke gezonde schijf heeft een willekeurige leessnelheid R. Welke tweede uitval behoudt alle gegevens en welke ideale totale willekeurige leessnelheid blijft over?
  1. Schijf 3 valt uit; 4R blijft over.
  2. Schijf 4 valt uit; 3R blijft over.
  3. Schijf 3 valt uit; 3R blijft over.
  4. Schijf 4 valt uit; 4R blijft over.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Een RAID-0-array heeft vier schijven en strookdelen van drie blokken. Schijven en lokale offsets beginnen bij nul. Waar staat logisch blok 29?
  1. Schijf 1, offset 8.
  2. Schijf 1, offset 7.
  3. Schijf 3, offset 6.
  4. Schijf 2, offset 8.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Vier schijven van 8 TB moeten 16 TB bieden, elke combinatie van twee uitgevallen schijven overleven en een volledige vervangende schijf wederopbouwen. De schrijfsnelheid naar de vervangende schijf mag niet hoger zijn dan 160 MB/s. Welk niveau en welke optimistische minimale tijd passen hierbij?
  1. RAID-10; ongeveer 13,9 uur.
  2. RAID-6; ongeveer 6,9 uur.
  3. RAID-6; ongeveer 13,9 uur.
  4. RAID-5; ongeveer 13,9 uur.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Een leesbewerking uit een spiegel komt op schijf A niet overeen met de verwachte controlesom. Schijf B levert een kopie die wel klopt. Wat moet een zelfherstellend systeem doen?
  1. De gegevens van A teruggeven en alleen de afwijkende controlesom registreren.
  2. De gegevens van B teruggeven en daarmee de kopie op A herstellen.
  3. Beide kopieën afwijzen omdat de eerste leesbewerking faalde.
  4. B herschrijven met A omdat A als eerste werd geselecteerd.
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Kom je niet uit je eigen opgave? Huiswerkhulp

Kernbegrippen

103 Kernbegrippen, elk met een definitie

A

adreslabel
Een adreslabel legt vast bij welke locatie een blok hoort, zodat een lezer de teruggegeven identificatie kan vergelijken met de gevraagde bestemming.
Een adreslabel voor blok 720 is in strijd met een leesverzoek voor blok 270.
anticiperende planning
Anticiperende planning wacht kort op een waarschijnlijk vervolgverzoek in de buurt in plaats van meteen weg te bewegen naar ander wachtend werk.
Anticiperende planning kan een zoekbeweging weg en terug besparen wanneer één proces kort daarna een ander blok aanvraagt.
apparaatinterface
Een apparaatinterface bestaat uit de registers en commando's waarmee systeemsoftware hardware bestuurt zonder het interne ontwerp te kennen.
Een stuurprogramma kan dezelfde apparaatinterface gebruiken ook als een nieuwere controller andere firmware heeft.
apparaatstuurprogramma
Een apparaatstuurprogramma realiseert hardwarespecifieke commando's en voltooiingsafhandeling achter een interface die de rest van het besturingssysteem kan gebruiken.
Met een nieuw apparaatstuurprogramma kan de bestaande bloklaag verzoeken indienen bij een andere controller.

B

blokapparaat
Een blokapparaat biedt opslag aan als geadresseerde blokken die onafhankelijk kunnen worden gelezen of geschreven via de blokverzoekinterface van de kernel.
Linux stelt een NVMe-naamruimte beschikbaar als blokapparaat dat een bestandssysteem kan lezen en beschrijven.
bloklaag
De bloklaag plaatst opslagverzoeken in wachtrijen en kan ze samenvoegen of plannen voordat de bewerkingen aan het juiste hardwarestuurprogramma worden doorgegeven.
De bloklaag combineert twee aangrenzende leesverzoeken zodat het stuurprogramma één groter verzoek kan indienen.
busmaster
Een busmaster is een apparaat of controller dat overdrachten op de verbinding initieert, zoals een DMA-eenheid die hoofdgeheugen leest of beschrijft.
Een SSD treedt op als busmaster wanneer die een gevraagd blok rechtstreeks naar de gekoppelde buffer schrijft.

C

C-LOOK
C-LOOK handelt verzoeken in één richting af en keert terug tussen de uiterste wachtende verzoeken, zodat beweging naar ongebruikte fysieke schijfranden wordt vermeden.
C-LOOK beweegt terug naar het laagste wachtende verzoek zonder tijdens de terugweg verzoeken af te handelen.
C-SCAN
C-SCAN handelt verzoeken in één richting af en keert zonder afhandeling terug naar het begin, wat posities een gelijkmatiger afhandelingscyclus geeft.
Tijdens de terugweg bij C-SCAN beweegt de kop nog steeds en die beweging moet worden meegeteld in de totale afstand.
capaciteitsefficiëntie
Capaciteitsefficiëntie is de bruikbare gegevenscapaciteit gedeeld door de ruwe schijfcapaciteit en laat zien hoeveel ruimte een indeling aan redundantie besteedt.
De capaciteitsefficiëntie van RAID-5 neemt toe met het aantal schijven, terwijl voor herstel meer overgebleven gegevens moeten worden gelezen.
cilinder
Een cilinder is de verzameling HDD-sporen op dezelfde radiale positie op de schijfplaatoppervlakken, bereikbaar bij dezelfde positie van de gedeelde koparm.
Van oppervlak wisselen binnen een cilinder vereist niet dat de arm naar een andere radiale positie beweegt.
commandoregister
Een commandoregister ontvangt een verzoek om een apparaatbewerking en kan hardwarewerk starten zodra het stuurprogramma het vereiste commando schrijft.
Het stuurprogramma levert uitvoergegevens aan voordat het naar het commandoregister schrijft dat de overdracht start.
controlesom
Een controlesom is een compacte waarde die uit gegevens wordt berekend en bij het lezen met een verwachte waarde wordt vergeleken om veranderingen in de beschermde inhoud te detecteren.
De lezer berekent een controlesom opnieuw voordat wordt bepaald of een opgeslagen blok aan de verwachte waarde voldoet.
controlesom door optelling
Een controlesom door optelling telt gegevensdelen op modulo een vast bereik en detecteert zo goedkoop sommige veranderingen, maar is ongevoelig voor de volgorde van de delen.
Een 8-bitscontrolesom door optelling reduceert een totaal van 300 modulo 256 tot de waarde 44.
controlesom in de verwijzing vanuit het ouderblok
Een controlesom in de verwijzing vanuit het ouderblok bewaart de verwachte controlesom van een kindblok in het ouderblok dat ernaar verwijst. Zo staat de verwachte waarde buiten het gecontroleerde kindblok.
Een controlesom in de verwijzing vanuit het ouderblok kan een oude versie van een kindblok afwijzen, ook als de lokale controlesom daarvan klopt.
controlesombotsing
Een controlesombotsing treedt op wanneer verschillende invoerwaarden dezelfde controlesom opleveren, waardoor sommige gewijzigde inhoud een vergelijking met een overeenkomstige waarde doorstaat.
Twee bitomslagen die elkaar opheffen veroorzaken een controlesombotsing bij een eenvoudige XOR-controle per byte.
cryptografische hash
Een cryptografische hash zet gegevens om in een samenvatting met een vaste grootte die is ontworpen om opzettelijke botsingsaanvallen te weerstaan en onbedoelde veranderingen te detecteren.
Een cryptografische hash detecteert manipulatie alleen wanneer de verwachte samenvatting zelf betrouwbaar is.
cyclische redundantiecontrole (CRC)
Een cyclische redundantiecontrole (CRC) bewaart een rest uit polynoomdeling met XOR en biedt daarmee sterke detectie van bepaalde foutreekspatronen.
Een 3-bits cyclische redundantiecontrole (CRC) gebruikt een generator van graad drie en een rest van drie bits.

D

direct inzetbare reserveschijf
Een direct inzetbare reserveschijf is een geïnstalleerde ongebruikte schijf die na uitval van een arrayschijf snel beschikbaar is als doel voor wederopbouw.
Een direct inzetbare reserveschijf verkort de vervangingswachttijd, terwijl het eigenlijke kopieerwerk voor wederopbouw nog moet gebeuren.
directe geheugentoegang (DMA)
Directe geheugentoegang (DMA) draagt gegevens via hardware over tussen een apparaat en het hoofdgeheugen, zodat de CPU niet elk gegevenswoord hoeft te kopiëren.
Dankzij directe geheugentoegang (DMA) kan de CPU berekeningen uitvoeren terwijl een controller een voorbereide geheugenbuffer vult.
doorvoer
Doorvoer is voltooid werk per tijdseenheid, zoals MB/s of IOPS, en verschilt van de tijd die één afzonderlijk verzoek kost.
Meer spiegelkopieën voor lezen kunnen de doorvoer verhogen terwijl één blokleesbewerking nog ongeveer even lang duurt als voorheen.
DWPD
DWPD drukt het opgegeven dagelijkse schrijfvolume van het hostsysteem gedurende de garantieperiode uit als een veelvoud van de volledige schijfcapaciteit.
Een SSD van 2 TB met een opgave van 0,5 DWPD ondersteunt een opgegeven gemiddelde van 1 TB aan schrijfbewerkingen van het hostsysteem per garantiedag.

F

FCFS
FCFS handelt schijfverzoeken af in volgorde van binnenkomst. Die volgorde blijft behouden, maar tussen ver uit elkaar gelegen opeenvolgende verzoeken kan de kop veel bewegen.
FCFS kan de kop herhaaldelijk over de schijf sturen wanneer opeenvolgende verzoeken afwisselen tussen de randen.
firmware
Firmware is software die binnen een apparaatcontroller draait, het interne gedrag realiseert en de beschikbare hardware-interface ondersteunt.
De firmware van een SSD beheert de plaatsing in flashgeheugen terwijl het hostsysteem gewone blokverzoeken blijft indienen.
flashpagina
Een flashpagina is een eenheid die binnen een wisblok wordt gelezen of geprogrammeerd, meestal enkele KiB groot, en waarvan hergebruik afhangt van de wistoestand van het blok.
Een flashpagina met een oude versie kan niet zomaar de nieuwe versie op dezelfde locatie ontvangen.
flashvertaallaag (FTL)
De flashvertaallaag (FTL) is firmware van een SSD die logische adressen van het hostsysteem aan flashpagina's koppelt en plaatsing, wissen en slijtage beheert.
De flashvertaallaag (FTL) leidt een overschrijving om naar vrije ruimte zonder de LBA van het hostsysteem te veranderen.
Fletcher-controlesom
Een Fletcher-controlesom houdt een gegevenssom en een lopende som van die som bij, waardoor een goedkope integriteitscontrole gevoelig wordt voor positie.
Het tweede onderdeel van de Fletcher-controlesom kan veranderen wanneer de eerste twee bytes worden verwisseld.
foutcorrigerende code (ECC)
Een foutcorrigerende code (ECC) slaat redundante informatie op waarmee bepaalde bitfoutpatronen binnen het correctievermogen kunnen worden gedetecteerd en hersteld.
Een schijf meldt een onleesbare sector wanneer de foutcorrigerende code (ECC) de bits niet kan herstellen.

G

gedeeltelijk uitgevoerde schrijfbewerking
Een gedeeltelijk uitgevoerde schrijfbewerking is een onderbroken wijziging die sommige afzonderlijk atomaire eenheden met nieuwe inhoud en andere met hun vorige inhoud achterlaat.
Een wijziging van 8 KiB over twee atomaire eenheden van 4 KiB kan na stroomuitval gedeeltelijk zijn uitgevoerd.
gedegradeerde modus
Gedegradeerde modus is het blijven leveren van gegevens door een redundante array na uitval binnen de fouttolerantie, voordat de ontbrekende redundantie is wederopgebouwd.
Een RAID-5-array in gedegradeerde modus kan gegevens lezen maar verdraagt geen verdere volledige schijfuitval.
gegevensreconstructie bij schijfuitval
Gegevensreconstructie bij schijfuitval leidt gevraagde gegevens af uit overgebleven redundantie wanneer de schijf die ze normaal opslaat ontbreekt.
Gegevensreconstructie bij schijfuitval in RAID-5 leest meerdere overgebleven strookblokken in plaats van één gegevensblok.
gegevensverdeling in stroken
Gegevensverdeling in stroken verdeelt opeenvolgende logische strookdelen over schijven en maakt zo parallel werk mogelijk; of er redundantie is, hangt af van de RAID-indeling.
RAID-0 gebruikt gegevensverdeling in stroken om de totale doorvoer te verhogen zonder extra herstelinformatie te bewaren.
geheugengeadresseerde I/O (MMIO)
Geheugengeadresseerde I/O (MMIO) geeft apparaatregisters adressen in de fysieke adresruimte, zodat gecontroleerde laad- en opslaginstructies ze kunnen bereiken.
Het NVMe-stuurprogramma gebruikt geheugengeadresseerde I/O (MMIO) om naar een meldingsregister van een wachtrij te schrijven nadat het een commando heeft voorbereid.
gelaagde opslag
Gelaagde opslag plaatst vaak geraadpleegde gegevens op snellere opslag en minder actieve gegevens op goedkopere opslagcapaciteit om toegangstijd en kosten af te wegen.
Gelaagde opslag kan een actieve index op SSD's bewaren terwijl grote, zelden gelezen bestanden op HDD's blijven.
geprogrammeerde I/O (PIO)
Geprogrammeerde I/O (PIO) verplaatst bruikbare gegevens tussen geheugen en een apparaatregister via CPU-instructies, zodat de CPU bij elke overdracht betrokken blijft.
Geprogrammeerde I/O (PIO) vereist veel registertoegangen wanneer de bruikbare gegevens een groot gegevensblok bevatten.

H

hybride wachten
Bij hybride wachten wordt korte tijd polling gebruikt en daarna op een interrupt geblokkeerd als de bewerking nog niet klaar is. Zo past het wachten zich aan wisselende voltooiingstijden aan.
Hybride wachten handelt een snelle reactie direct af zonder tijdens een lange apparaatvertraging actief te blijven wachten.

I

integriteit over de volledige gegevensketen
Integriteit over de volledige gegevensketen controleert de inhoud over het gegevenstraject dicht bij de uiteindelijke gebruiker en detecteert zo fouten buiten de bescherming die alleen het medium dekt.
Een controlesom van het bestandssysteem biedt integriteit over meer onderdelen van de gegevensketen dan de interne ECC van de schijf.
interruptafhandelaar
Een interruptafhandelaar is kernelcode die op een hardwaremelding reageert, de gebeurtenis controleert en het vereiste werk voor de voltooiing uitvoert.
De interruptafhandelaar maakt het proces dat op een voltooide leesbewerking wacht gereed voor de CPU-scheduler.
interruptbundeling
Interruptbundeling groepeert meerdere apparaatgebeurtenissen in minder interrupts, waardoor de CPU-overhead voor meldingen afneemt maar enige voltooiingsvertraging ontstaat.
Door interruptbundeling kan één uitvoering van de afhandelaar de voltooiingen van meerdere opslagverzoeken verwerken.
IOMMU
Een IOMMU vertaalt geheugenadressen die apparaten zien en dwingt toegangsbeperkingen af, waardoor DMA-apparaten van ander fysiek geheugen worden geïsoleerd.
De IOMMU kan een rechtstreeks toegewezen apparaat beperken tot het geheugen dat aan de bijbehorende virtuele machine is toegewezen.
IOPS
IOPS meet het aantal voltooide I/O-bewerkingen per seconde; de betekenis hangt af van verzoekgrootte, werklast, gelijktijdigheid en de verhouding tussen lezen en schrijven.
Een test met steeds één willekeurige leesbewerking rapporteert IOPS voor een heel andere werklast dan een test met een diepe wachtrij.

K

kwetsbaarheid tijdens de wederopbouw
Kwetsbaarheid tijdens de wederopbouw omvat de periode en werklast waarin een array minder redundantie heeft terwijl ontbrekende gegevens op een vervangende schijf worden hersteld.
Een grotere schijf kan de kwetsbare periode tijdens de wederopbouw verlengen, ook wanneer de vervangende schijf direct beschikbaar is.

L

latente sectorfout (LSE)
Een latente sectorfout (LSE) is een onleesbare sector die bij toegang wordt ontdekt en door de schijf wordt gemeld nadat interne correctie is mislukt.
Periodieke gegevenscontrole kan een latente sectorfout (LSE) blootleggen in gegevens die maandenlang niet zijn gelezen.
leesverstoring
Leesverstoring is een verschuiving van opgeslagen lading in flashgeheugen door herhaald lezen, waardoor mogelijk meer bitfouten in nabijgelegen cellen ontstaan.
De ECC en verversingsmechanismen van de controller helpen fouten te beheersen die leesverstoring kan veroorzaken.
lezen-wijzigen-schrijven
Lezen-wijzigen-schrijven werkt pariteit bij door oude gegevens en redundantie te lezen, vervangende waarden te berekenen en daarna de nieuwe gegevens en redundantie te schrijven.
Een RAID-5-bewerking van lezen-wijzigen-schrijven gebruikt twee leesbewerkingen gevolgd door twee schrijfbewerkingen voor één kleine logische wijziging.
livelock
Livelock is voortdurende systeemactiviteit met weinig nuttige voortgang, zoals overmatige interruptafhandeling die verhindert dat pakketverwerkers draaien.
Een stroom pakketten kan livelock veroorzaken terwijl de CPU-bezettingsgraad dicht bij honderd procent blijft.
logisch blokadres (LBA)
Een logisch blokadres (LBA) is een sectornummer in de voor het hostsysteem zichtbare reeks van een opslagapparaat, onafhankelijk van de verborgen fysieke plaatsing op het medium.
Het bestandssysteem vraagt om een logisch blokadres (LBA) zonder een schijfplaat of spoor te noemen.
LOOK
LOOK beweegt langs verzoeken maar keert om bij het laatste wachtende verzoek in de bewegingsrichting, zodat de ongebruikte afstand tot de schijfrand wordt vermeden.
LOOK keert om bij spoor 110 als er geen hoger verzoek meer is, ook als de schijf tot 199 loopt.

M

meldingsregister
Een meldingsregister is een apparaatbesturingsregister waarnaar software schrijft om een controller te melden dat de indienings- of voltooiingstoestand van een wachtrij is veranderd.
Nadat het stuurprogramma een commando in het geheugen heeft geplaatst, schrijft het naar het meldingsregister van de indieningswachtrij.
model van gedeeltelijk falen
Het model van gedeeltelijk falen staat toe dat een apparaat grotendeels blijft werken terwijl afzonderlijke blokken onleesbaar zijn of ongemerkt onjuiste gegevens teruggeven.
Het model van gedeeltelijk falen verklaart waarom een online schijf toch blokken kan hebben die herstel vereisen.
model van volledige, detecteerbare uitval
Het model van volledige, detecteerbare uitval gaat ervan uit dat een schijf correct werkt of volledig en detecteerbaar uitvalt, zodat de locaties van de ontbrekende gegevens bekend zijn.
Met het model van volledige, detecteerbare uitval kan een array met pariteit bepalen welk blok na schijfuitval moet worden gereconstrueerd.
MSI-X
MSI-X is een PCIe-mechanisme voor interrupts via berichten dat meerdere vectoren biedt, zodat een apparaat verschillende meldingen onafhankelijk kan sturen.
Een NVMe-controller kan MSI-X-vectoren gebruiken om voltooiingen uit wachtrijen naar de CPU-kernen te sturen die ze afhandelen.

N

NAND-flashgeheugen
NAND-flashgeheugen is niet-vluchtig geheugen dat bits weergeeft als ladingsniveaus in cellen en toegang organiseert in pagina's binnen grotere wisblokken.
NAND-flashgeheugen bewaart zijn inhoud zonder stroom, maar heeft gewiste ruimte nodig voordat een pagina kan worden geprogrammeerd.
NVMe
NVMe is een opslagcommando-interface voor niet-vluchtig geheugen die veel indienings- en voltooiingswachtrijen in het geheugen ondersteunt.
Met NVMe-wachtrijparen kunnen verschillende CPU-kernen flashverzoeken indienen met minder concurrentie om gedeelde bronnen.

O

ongemerkte gegevensbeschadiging
Ongemerkte gegevensbeschadiging treedt op wanneer een opslagleesbewerking onjuiste inhoud teruggeeft zonder een fout te melden, zodat onafhankelijke verificatie nodig is om die te detecteren.
Een gewone spiegel kan ongemerkt beschadigde gegevens teruggeven wanneer die een slechte kopie leest zonder de inhoud te controleren.
onherstelbare leesfout (URE)
Een onherstelbare leesfout (URE) is een leesfout die de schijf niet kan corrigeren; een gepubliceerd URE-percentage begrenst het aantal fouten ten opzichte van het aantal gelezen bits.
Een URE op een overgebleven schijf tijdens een RAID-5-wederopbouw kan de betreffende strook met te weinig herstelinformatie achterlaten.
opruimen van ongeldige flashgegevens (GC)
Het opruimen van ongeldige flashgegevens (GC) maakt SSD-ruimte vrij door geldige pagina's uit een wisblok te verplaatsen, hun koppelingen bij te werken en het bronblok te wissen.
Het opruimen van ongeldige flashgegevens (GC) is goedkoper wanneer een gekozen blok weinig geldige pagina's bevat die moeten worden bewaard.
opslag in zones
Opslag in zones plaatst meer sectoren op langere buitenste HDD-sporen, waardoor per omwenteling meer bytes worden overgedragen dan op kortere binnenste sporen.
Opslag in zones verklaart waarom een lange sequentiële leesbewerking langzamer kan worden naarmate die binnenste sporen nadert.
overdrachtstijd
Overdrachtstijd is de tijd die nodig is om de bruikbare gegevens te verplaatsen zodra ze bereikbaar zijn, berekend als het aantal bytes gedeeld door de toepasselijke overdrachtssnelheid.
Een groot sequentieel verzoek besteedt een veel groter deel van de afhandelingstijd aan overdracht dan een zeer kleine leesbewerking.

P

pariteitsinconsistentie door een onderbroken schrijfbewerking
De pariteitsinconsistentie door een onderbroken schrijfbewerking ontstaat wanneer een onderbroken wijziging op meerdere schijven gegevens en redundantie van verschillende versies achterlaat.
Een geschikt beschermd wijzigingenlogboek helpt voorkomen dat deze pariteitsinconsistentie later herstel ondermijnt.
periodieke gegevenscontrole
Periodieke gegevenscontrole leest en controleert opgeslagen gegevens proactief, zodat latente fouten aan het licht komen terwijl resterende redundantie herstel mogelijk nog toestaat.
Een maandelijkse gegevenscontrole kan koude gegevens nakijken lang voordat een toepassing ze opnieuw aanvraagt.
polling
Bij polling wordt de apparaattoestand herhaaldelijk gecontroleerd op gereedheid of voltooiing. Zo wordt een verandering direct opgemerkt, maar kost het CPU-werk zolang het apparaat bezig blijft.
Een korte pollinglus kan minder kosten dan blokkeren en gewekt worden bij een zeer snelle opslagbewerking.
poortgeadresseerde I/O
Poortgeadresseerde I/O benadert apparaatregisters via een aparte poortadresruimte met speciale processorinstructies zoals x86 in en out.
Een x86-kernel kan beperken welke processen de instructies voor poortgeadresseerde I/O mogen uitvoeren.
prestaties in de stationaire toestand
Prestaties in de stationaire toestand beschrijven het aanhoudende gedrag van een SSD nadat voortdurende schrijfbewerkingen en het opruimen van ongeldige gegevens de aanvankelijke fase van een lege schijf hebben vervangen.
De prestaties van een gevulde schijf in de stationaire toestand kunnen lager zijn dan de schrijfsnelheid direct uit de doos.
programmeer-wiscyclus
Een programmeer-wiscyclus is een gebruikscyclus waarin flashcellen worden geprogrammeerd en gewist, wat slijtage veroorzaakt en hun vermogen om lading betrouwbaar vast te houden geleidelijk vermindert.
Slijtageverdeling spreidt programmeer-wiscycli zodat een kleine groep hete blokken niet als eerste verslijt.

R

RAID
RAID combineert meerdere schijven tot een logisch opslagapparaat waarvan de indeling de bruikbare ruimte, parallelle prestaties en tolerantie voor schijfuitval bepaalt.
Een bestandssysteem kan een RAID-blokinterface lezen zonder te weten welke fysieke schijf de gegevens bevat.
RAID-0
RAID-0 verdeelt gegevens in stroken over schijven zonder redundantie, gebruikt alle ruwe schijfcapaciteit maar verliest arraygegevens bij uitval van een willekeurige schijf.
RAID-0 is geschikt voor tijdelijke resultaten die opnieuw kunnen worden gemaakt als een opslagschijf uitvalt.
RAID-4
RAID-4 verdeelt gegevens in stroken en bewaart XOR-pariteit op een aparte schijf, die een gedeeld knelpunt wordt voor kleine schrijfbewerkingen in de array.
Gegevensschijven toevoegen aan RAID-4 neemt het lees- en schrijfwerk van de pariteitsschijf per wijziging niet weg.
RAID-5
RAID-5 verdeelt één pariteitsblok per strook over de schijven en behoudt tolerantie voor één uitgevallen schijf terwijl het werk voor pariteitswijzigingen wordt gespreid.
Een RAID-5-array met zes schijven biedt de gegevenscapaciteit van vijf schijven en verdraagt één uitgevallen schijf.
RAID-6
RAID-6 bewaart twee onafhankelijke redundantiewaarden per strook en verdraagt zo elke combinatie van twee uitgevallen schijven ten koste van de capaciteit van twee schijven.
Een kleine wijziging bij RAID-6 moet beide redundantiewaarden bijwerken, wat meer fysiek I/O-werk oplevert dan bij RAID-5.
RAID-10
RAID-10 verdeelt gegevens in stroken over gespiegelde paren, gebruikt de helft van de ruwe capaciteit en overleeft uitval zolang elk paar een werkende kopie behoudt.
Een RAID-10-array met zes schijven kan drie uitgevallen schijven overleven als elk uit een ander gespiegeld paar komt.
reservecapaciteit
Reservecapaciteit houdt flashcapaciteit buiten gebruik door het hostsysteem, zodat een SSD extra vrije ruimte heeft voor het opruimen van ongeldige gegevens en ander intern beheer.
Dankzij reservecapaciteit kan GC het vrijmaken uitstellen van blokken waarvoor veel geldige pagina's moeten worden gekopieerd.
rotatievertraging
Rotatievertraging is de wachttijd totdat een gevraagde HDD-sector na positionering onder de kop draait, gemiddeld een halve omwenteling bij willekeurige sectoren.
Bij 10.000 RPM is de gemiddelde willekeurige rotatievertraging 3 ms omdat één volledige omwenteling 6 ms duurt.

S

SCAN
SCAN handelt verzoeken af tijdens een beweging naar een schijfrand en keert daarna om, zodat verzoeken tijdens herhaalde bewegingen over de sporen worden afgehandeld.
SCAN gaat door naar de rand, ook als het laatste wachtende verzoek in die richting eerder ligt.
scatter-gatherlijst
Een scatter-gatherlijst beschrijft afzonderlijke overdrachtsgebieden met paren van adres en lengte, zodat één verzoek niet-aangrenzend geheugen kan beslaan.
Een stuurprogramma bouwt een scatter-gatherlijst voor een buffer die op meerdere afzonderlijke fysieke pagina's berust.
schrijfbewerking naar een verkeerde locatie
Een schrijfbewerking naar een verkeerde locatie slaat gegevens op een andere bestemming dan de bedoelde schijf of het bedoelde blok op, waardoor mogelijk één blok verouderd blijft en een ander wordt overschreven.
Een adreslabel kan een schrijfbewerking naar een verkeerde locatie onthullen, ook wanneer de teruggegeven gegevens overeenkomen met hun controlesom.
schrijfversterking
Schrijfversterking is de verhouding tussen het aantal bytes dat intern naar flashgeheugen wordt geprogrammeerd en het aantal bytes dat het hostsysteem schrijft, inclusief intern verplaatsingswerk.
Schrijfversterking neemt toe wanneer aanhoudende wijzigingen afdwingen dat tijdens GC veel geldige pagina's worden gekopieerd.
schrijven van een volledige strook
Het schrijven van een volledige strook vervangt elk gegevensblok in een pariteitsstrook, zodat nieuwe redundantie kan worden berekend zonder de oude strookinhoud te lezen.
Een controller kan een volledige reeks combineren tot het schrijven van een volledige strook om leesbewerkingen van oude pariteit te vermijden.
sectorverschuiving tussen sporen
Sectorverschuiving tussen sporen verschuift sectorposities tussen aangrenzende sporen zodat een sequentiële leesbewerking kan doorgaan na de tijd die nodig is om van spoor te wisselen.
Sectorverschuiving tussen sporen voorkomt dat de volgende sequentiële sector passeert net voordat de kop het spoor bereikt.
sequentiële toegang
Bij sequentiële toegang worden nabijgelegen blokken op volgorde gelezen of geschreven, zodat een harde schijf de positioneringskosten over een lange overdracht kan spreiden.
Sequentiële toegang kan de aanhoudende overdrachtssnelheid van de HDD benaderen wanneer het verzoek groot genoeg is.
slijtageverdeling
Slijtageverdeling spreidt wiscycli in flashgeheugen over blokken en verplaatst soms ongewijzigde gegevens zodat weinig gebruikte blokken kunnen meedoen aan actieve schrijfbewerkingen.
Slijtageverdeling kan koude gegevens verplaatsen ook wanneer het hostsysteem geen wijziging van die gegevens heeft gevraagd.
spiegeling
Spiegeling bewaart kopieën van dezelfde logische gegevens op afzonderlijke schijven, zodat uit beide kan worden gelezen en elke wijziging naar beide moet worden geschreven.
Spiegeling laat een gecontroleerde gezonde kopie gegevens leveren wanneer de partner is uitgevallen.
spoor
Een spoor is een cirkelvormige baan met magnetische gegevens op één HDD-schijfplaatoppervlak, verdeeld in sectoren die onder een kop passeren terwijl de plaat draait.
Naar een ander spoor gaan vereist dat de arm opnieuw wordt gepositioneerd voordat de gewenste sectoren kunnen worden gelezen.
SPTF
SPTF kiest het verzoek met de kortste voorspelde som van zoektijd en rotatievertraging, met positioneringsinformatie die normaal gesproken binnen de schijf beschikbaar is.
SPTF kan de voorkeur geven aan een verder gelegen spoor wanneer de sector ervan eerder onder de kop draait.
SSTF
SSTF kiest het wachtende verzoek met de kortste zoekbeweging, wat beweging in de buurt vermindert maar het risico geeft dat verafgelegen verzoeken onbeperkt worden uitgesteld.
SSTF kiest herhaaldelijk nieuw binnengekomen verzoeken in de buurt terwijl een ouder verzoek op een verafgelegen spoor wacht.
statusregister
Een statusregister meldt de huidige toestand van een apparaat, zoals gereedheid, activiteit, voltooiing of een fout, zodat systeemsoftware die kan controleren.
Het stuurprogramma controleert het statusregister voordat het een commando indient bij een bezette controller.
strookdeelgrootte
Strookdeelgrootte is de hoeveelheid opeenvolgende arraygegevens die op één schijf wordt geplaatst voordat de plaatsing doorgaat naar de volgende schijf van de strook.
Een strookdeelgrootte van twee blokken plaatst twee aangrenzende logische blokken op dezelfde schijf voordat de volgende schijf aan de beurt is.

T

TBW
TBW is een levensduuropgave voor het totale aantal terabytes dat het hostsysteem onder de opgegeven voorwaarden schrijft, los van interne programmeerbewerkingen in flashgeheugen.
Een opgave van 900 TBW telt het schrijfvolume van het hostsysteem, ook wanneer GC extra schrijfbewerkingen naar flashgeheugen toevoegt.
tekenapparaat
Een tekenapparaat biedt een stroomgerichte apparaatinterface, zoals een terminal of seriële poort, in plaats van een reeks geadresseerde opslagblokken.
Een terminal als tekenapparaat wisselt bytes uit zonder sectoradressering zoals bij een schijf aan te bieden.
terugschrijfcache
Een terugschrijfcache bevestigt schrijfbewerkingen zodra die in de cache zijn opgenomen, zodat voltooiing kan plaatsvinden voordat de bytes het persistente opslagmedium bereiken.
Een vluchtige terugschrijfcache kan een bevestigde wijziging verliezen als de stroom uitvalt voordat de cache is weggeschreven.
TRIM
TRIM vertelt een SSD dat logische bereiken geen benodigde gegevens meer bevatten, zodat de controller hun oude fysieke inhoud als ongeldig kan behandelen.
TRIM na verwijdering van een bestand kan voorkomen dat de controller verouderde pagina's kopieert tijdens het vrijmaken van ruimte.

V

vastgezette pagina
Een vastgezette pagina is een geheugenpagina die aanwezig en stabiel wordt gehouden zolang een bewerking zoals DMA de onderliggende fysieke opslag nog kan benaderen.
Een vastgezette pagina kan pas voor een andere buffer worden hergebruikt nadat de actieve apparaatoverdracht is voltooid.
verificatie door teruglezen na schrijven
Verificatie door teruglezen na schrijven vergelijkt een nieuwe leesbewerking met de bedoelde nieuwe inhoud en voegt I/O toe om te controleren of de verwachte wijziging is opgeslagen.
Verificatie door teruglezen na schrijven moet het opgeslagen resultaat bereiken in plaats van alleen de vluchtige cache opnieuw te lezen.
verloren schrijfbewerking
Een verloren schrijfbewerking is een als voltooid gemelde wijziging die de opslag niet bereikt, waardoor oude inhoud kan achterblijven met een geldige lokale controlesom.
Een actuele controlesom in een ouderrecord kan de verouderde inhoud van een kindblok afwijzen die door een verloren schrijfbewerking is achtergebleven.
verplichte opslag op het persistente medium (FUA)
Verplichte opslag op het persistente medium (FUA) is een attribuut van een schrijfverzoek dat vereist dat de betreffende gegevens persistente opslag bereiken voordat voltooiing wordt gemeld.
Een bestandssysteem kan verplichte opslag op het persistente medium (FUA) gebruiken wanneer geschreven gegevens bij voltooiing duurzaam moeten zijn.
vertaaltabel
Een vertaaltabel legt vast welke fysieke flashlocatie elke gekoppelde logische eenheid momenteel opslaat, zodat wijzigingen gegevens transparant kunnen verplaatsen.
De vertaaltabel verwijst naar de nieuwe pagina nadat een wijziging op een andere plaats de oude pagina ongeldig heeft gemaakt.
verwacht aantal fouten
Een verwacht aantal fouten is het gemiddelde aantal fouten dat voor een leesvolume wordt voorspeld onder een gekozen foutmodel, niet op zichzelf een kans op uitval.
Een verdubbeling van het gemodelleerde leesvolume verdubbelt het verwachte aantal fouten wanneer het foutpercentage vast is.

W

wachtrijdiepte
Wachtrijdiepte is het aantal uitstaande I/O-verzoeken. Een grotere diepte kan SSD-parallellisme benutten, maar ook wachttijd toevoegen wanneer de afhandelingscapaciteit verzadigd is.
Een grotere wachtrijdiepte laat meerdere flashkanalen tegelijk onafhankelijke leesbewerkingen verwerken.
wederopbouw
Een wederopbouw herstelt de inhoud van een ontbrekende arrayschijf op een vervangende schijf door een spiegelkopie te kopiëren of gegevens uit overgebleven informatie te reconstrueren.
Verkeer op de voorgrond kan een wederopbouw verlengen omdat toepassingsverzoeken concurreren met herstel-I/O.
wisblok
Een wisblok is de groep flashpagina's die door één wisbewerking samen wordt teruggezet en die meestal veel groter is dan de programmeereenheid van één pagina.
GC kopieert geldige pagina's uit een wisblok voordat het blok wordt teruggezet voor toekomstige programmeerbewerkingen.

X

XOR-pariteit
XOR-pariteit is de bitsgewijze exclusieve OF van de gegevensblokken van een strook en maakt reconstructie van één blok mogelijk wanneer de ontbrekende locatie bekend is.
Met XOR-pariteit en de overgebleven gegevensblokken wordt de waarde hersteld die op één zichtbaar uitgevallen schijf stond.

Z

zelfherstel
Zelfherstel herstelt een slechte opgeslagen kopie met redundante inhoud die eerst is gecontroleerd tegen de verwachte gegevens.
Een gespiegeld bestandssysteem voert zelfherstel uit nadat het een geldig alternatief voor een kopie met een controlesomfout heeft gevonden.
zoektijd
Zoektijd is de tijd die een HDD-arm nodig heeft om de koppen naar het voor een verzoek vereiste spoor te verplaatsen en tot rust te brengen, vóór het wachten op rotatie.
Bij een kleine willekeurige leesbewerking kan de zoektijd veel langer zijn dan de tijd die nodig is om de gegevens over te dragen.

Over deze les

Door StudeliFout melden

Maak je eigen Studiemateriaal

Maak van je aantekeningen, slides en documenten Leermodules, Oefenvragen, Flashcards en 6 andere tools.

Aan de slag