Teknologian jakaminen

Tietokannan hallinta – Issue 218 Palvelinmuisti (20240711)

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Tietokannan hallinta – Issue 218 Palvelinmuisti (20240711)

Kirjailija: The Fish Tank of Fat-headed Fish (Yin Haiwen)
Oracle ACE Pro: Tietokanta (Oracle与MySQL)
PostgreSQL ACE -kumppani
10 vuoden kokemus tietokantateollisuudesta, tällä hetkellä pääasiassa tietokantapalveluista
Siinä on OCM 11g/12c/19c, MySQL 8.0 OCP, Exadata, CDP ja muut sertifikaatit
Mo Tianlun MVP, Vuoden Moli-tähti, ITPUB-sertifioitu asiantuntija, 100 asiantuntijaryhmän jäsen, OCM-luennoitsija, PolarDB avoimen lähdekoodin yhteisön tekninen konsultti, HaloDB:n ulkopuolinen tekninen konsultti, OceanBase-tarkkailuryhmän jäsen, nuorisoyhdistyksen MOP-teknologiayhteisö (nuorten tietokanta) Learning Mutual Aid Association ) tekninen neuvonantaja
Hänellä on piirissä nimikkeitä, kuten "Director", "Security" ja "The Biggest Enemy of Domestic Database", eikä hän ole kuuluisa sosiaalinen terroristi (sosiaalinen terroristi).
Julkinen tili: Rasvapäisen kalan akvaario (Yin Haiwen: Rasvapäisen kalan akvaario: yhw1809);
Ellei uusintapainosta luvalla ja lähdettä mainita, kaikki on "laitonta" plagiointia

Olen aiemmin selittänyt palvelimien, kuten CPU:n, SSD:n ja verkon, laitteiston. Yllä mainittuja komponentteja sisältävän emolevyn lisäksi on myös erittäin tärkeä komponentti, joka on yleiseen työpöytätasoon verrattuna (yleinen kotitietokone ) Muisti, palvelimen muistissa on oma virheenkorjaustoiminto, jota kutsumme myös ECC (Error Checking and Correcting) -muistiksi.
Tämä numero selittää lyhyesti, kuinka ECC-muisti toimii.

1 muisti

Muisti on tärkeä osa tietokonetta. Sitä käytetään laskentatietojen väliaikaiseen tallentamiseen suorittimeen ja tietojen vaihtamiseen ulkoisten muistien, kuten kiintolevyjen, kanssa. Se on silta ulkoisen muistin ja CPU:n välillä. Kaikki tietokoneen ohjelmat toimivat muistissa. Niin kauan kuin tietokone käynnistyy, käyttöjärjestelmä siirtää laskettavat tiedot muistista CPU:lle laskennan jälkeen CPU lähettää tulokset.
Muistin syntyminen on pääasiassa korvaamaan valtavia kaistanleveys- ja latenssieroja ulkoisen tallennustilan ja suorittimen sisäänrakennetun välimuistin (eli L1, L2, L3) välillä. Se on pohjimmiltaan suurempi kuin suorittimen sisäänrakennettu välimuisti, mutta yleensä paljon pienempi kuin ulkoinen tallennusväline Välitiedonsiirtolaite voi nopeuttaa tietojen valmistelua hitaammalta ulkoisesta tallennustilasta etukäteen, mikä vähentää tai jopa eliminoi odotusajan CPU:lle tiedon saamiseen.
Palvelimissa käytettävä muisti on nyt DDR-muisti. Yleisen muistin lisäksi on myös muistirajapintaan (tai PCIe-liitäntään) perustuva haihtumaton muisti PMEM (esimerkiksi Intel Optane), joka tarjoaa suuremman osan dataa muistin ja ulkoisen tallennustilan väliin ja on lähellä välimuistialueen nopeus.

2 ECC-muistia

Yleisesti ottaen palvelimet kuljettavat tärkeitä liiketoimintajärjestelmiä. Sähkömagneettiset häiriöt voivat aiheuttaa bittien vaihtoa (eli 0:n ja 1:n vaihtoa) muistin ja laitteen välisen tiedonsiirron aikana. CPU, tällä tavalla virheitä tapahtuu (Pankki ei loppujen lopuksi halua varojesi kasvavan ilman syytä. Muutama 0, et halua varojen vähenevän).
Sitten syntyi ECC-muisti, joka havaitsi ennakoivasti datavirheet tiedoista ja korjaa ne.

3 periaatetta

Tässä on kaksi suhteellisen primitiivistä ratkaisua:

3.1 Useiden kopioiden lähetys

Toisin sanoen tieto lähetetään 3 kopiona, jos jossakin tietyssä kopiossa on ongelma, se voidaan korjata:
image.png
Mutta ongelmia on myös ilmaantunut, vaikka esiintymistodennäköisyys on erittäin pieni, jos kahdella tiedolla on bittikäännös samassa paikassa, tietojen varmentamisessa ja virheenkorjauksessa on ongelmia:
image.png
Suurin ongelma tämän menetelmän käytössä on IO-kaistanleveyden tuhlaus.

3.2 Virheenkorjauskoodi

Tällä tavalla tiedon alkuun lisätään virheenkorjauskoodi, eli virheenkorjauskoodi lisätään ennen jokaista dataa 0, ja kun luku on pariton, virheenkorjauskoodi on 1.
image.png
Jos virheenkorjauskoodi ei vastaa ykkösten määrää, tiedot lähetetään uudelleen.
image.png
Tämä aiheuttaa myös ongelman. Jokainen tarkistus voi vain määrittää, ovatko kaikki tiedot normaalit. Teoriassa virheenkorjausta ei tehdä, ja uudelleenlähetys lisää viivettä.
Samanaikaisesti, jos kaksi tietovirhettä tapahtuu samanaikaisesti, varmentamisen tarkoitusta ei silti voida saavuttaa.

3.3 Hamming-koodi

Hamming-koodi on tärkein tällä hetkellä ECC-muistissa käytetty varmennus- ja virheenkorjausmenetelmä.
Jatketaan askel askeleelta seuraavalla tavalla. Oletetaan, että bitti 2 on vastuussa oikean osan pariteetin tarkistuksesta. Jos tiedoissa on virhe ja pariteettitarkistus määrittää, että oikealla puoliskolla ei ole ongelmaa, niin ongelma on vasemmassa puoliskossa, muuten ongelma on oikealla puoliskolla.
image.png
Kuten alla olevasta kuvasta näkyy, bitti 1 suorittaa pariteettitarkistuksen sarakkeille 2 ja 4, sitten bitti 1 tallentaa 1. Jos pariteettitarkistuksessa on ongelma sarakkeissa 2 ja 4, ongelma on sarakkeissa 2 ja 4, muuten ongelma on sarakkeissa 1 ja 3.
image.png
Yllä olevien kahden menetelmän yhdistelmä voi helposti varmistaa, missä tietosarakkeessa on ongelma:
image.png
Käytä seuraavaksi samanlaista menetelmää tarkistamalla rivit 2 ja 4 bitillä 8 ja tarkistamalla alapuoli Rivierotuksen ja osion pariteettitarkistuksen avulla voit löytää virheen sijainnin ja suorittaa virheen korjauksen (käännös). Se siitä.
image.png
Yllä olevan tuomion lähtökohtana on kuitenkin, että oletustiedoissa on ongelma Yllä olevan menetelmän arvioinnin jälkeen databitti nro 0 ei sisälly suojaukseen, onko se väärin vai ei yllä oleva pariteettitarkistuksen tulos. Siksi käytämme bittiä 0 koko tietolohkon tarkistamiseen kohdan 3.2 menetelmällä.
image.png
Tässä tapauksessa, jos virheitä on kaksi, levyn täyden pariteettitarkistuksen ja osion pariteettitarkistuksen tulokset ovat ristiriidassa Virheen sijaintia ei voida määrittää, mutta voidaan todeta, että koko tietolohko on epänormaali. Lähetä vain tiedot uudelleen.
image.png
Mutta kun datavirheitä on kolme, on mahdotonta arvioida.
image.png
Toisella tavalla huomaamme, että tarkistuskoodien paikat ovat kaikki 2 N:nnen potenssiin:
image.png
Tarkistuskoodi tarvitsee vain sijoittaa N:nnelle potenssille 2. Mitä suurempi lohko, sitä vähemmän sisältöä virheenkorjauskoodi vie, mutta sitä suurempi on useiden bittien käännösten todennäköisyys. Yleinen ECC-lähetyslohkokoko on 72-bittinen, 64-bittinen dataa ja 8-bittinen virheenkorjauskoodi. Siksi muisti, jonka kapasiteetti on 8G, vaatii yleensä vain kahdeksan 1G:n muistihiukkasta, kun taas ECC-muisti, jonka kapasiteetti on 8G, vaatii yhdeksän 1G:n muistihiukkasta. Ylimääräistä 1G-muistia käytetään ylimääräisen virheenkorjauskoodikapasiteetin tallentamiseen.
Tietokonevirheen korjaus ei kuitenkaan todellakaan laske virheen sijaintia tavallisella "tyhmillä" tavalla.
image.png
Otamme pois kaikki paikat, jotka ovat 1, ja suoritamme pystysuoran binäärisen TAI-operaation saadaksemme ongelmallisen sijainnin suoraan:
image.png

Liite: On myös LDPC (Low Density Parity-Check Code), joka on matalatiheyksinen pariteettitarkistuskoodi. Erityistä toteutusperiaatetta ei selitetä tässä. Tämä menetelmä voi määrittää monibittisen kääntämisen ongelman käytetään SSD-korjaukseen. Muistin suuren nopeuden ja toteutuskustannusten vuoksi ECC:n toteuttamiseen käytetään edelleen Hamming-koodeja.

Tee yhteenveto

Tässä numerossa esitellään lyhyesti, kuinka ECC-muisti toteuttaa virheenkorjauksen.
Vanha sääntö on tietää, mitä on kirjoitettu.