See artikkel on juba teine teema andmete kiirusest tihendamisest. Esimeses artiklis kirjeldati kompressorit, mis töötab kiirusel 10 Gbit/s ĂŒhe protsessorituuma kohta (minimaalne tihendamine, RTT-Min).
See kompressor on juba juurutatud kriminaalsete dubleerijate seadmetesse, et kiiresti tihendada andmehoidlate sisulisi andmeid ja suurendada krĂŒptograafia vastupidavust. Samuti saab seda kasutada virtuaalmasinate piltide ja operatiivmĂ€lu swap-failide tihendamiseks, kui need salvestatakse kiiretoimelistesse SSD-kettadesse.
Esimeses artiklis kuulutati vÀlja ka HDD ja SSD kÔvakettade varukoopiate tihendamiseks mÔeldud kompressioonialgoritmi arendamine (keskmine tihendamine, RTT-Mid), millel on oluliselt parendatud andmete tihendamise nÀitajad. KÀesolevaks ajaks on see kompressor tÀielikult valmis ja see artikkel rÀÀgib just sellest.
Kompressor, mis rakendab RTT-Mid algoritmi, tagab tihendamisastme, mis on vĂ”rreldav standardsete arhiivide nagu WinRar ja 7-Zip kiirusreĆŸiimis. Samal ajal on selle töökiirus vĂ€hemalt kĂŒmme korda kĂ”rgem.
Andmete pakkimise/avamise kiirus on kriitiline parameeter, mis mÀÀrab kompressioonitehnoloogiate rakenduse ulatuse. Keegi ilmselt ei mĂ”tle terabaidi andmete tihendamisele kiirusel 10-15 megabitti sekundis (just selline on arhiivide standardkompressiooni kiirus), sest sellele kulub peaaegu kakskĂŒmmend tundi, kui protsessor on tĂ€ielikult koormatudâŠ
Teisest kĂŒljest saab sama terabaidi kopeerida kiirusel umbes 2-3 gigabitti sekundis umbes kĂŒmne minutiga.
SeetĂ”ttu on suurte andmehulkade tihendamine asjakohane, kui see toimub kiirusel, mis ei ole madalam tegelikest sisend-/vĂ€ljundkiirusest. Kaasaegsete sĂŒsteemide jaoks on see vĂ€hemalt 100 megabitti sekundis.
Selliseid kiirusenĂ€itajaid saavad kaasaegsed kompressorid nĂ€idata ainult "kiire" reĆŸiimis. Just selles asjakohases reĆŸiimis teeme vĂ”rdluse algoritmi RTT-Mid ja traditsiooniliste kompressorite vahel.
Uue kompressioonialgoritmi vÔrdlev testimine
RTT-Mid kompressor töötas testprogrammis. TĂ”elises âtöösâ rakenduses töötab see mĂ€rgatavalt kiiremini, kus kasutatakse efektiivselt mitme lĂ”ime töötlemist ja rakendatakse âtavalistâ kompilaatorit, mitte C#.
Kuna vĂ”rdlustestis kasutatud kompressorid on ehitatud erinevatel alustel ja erinevad andmetĂŒĂŒbid kompressivad erinevalt, kasutati testi objektiivsuse tagamiseks keskmise temperatuuri mÔÔtmise meetodit...
Loodi sektorite kaupa dumpfail loogilisest draivist operatsioonisĂŒsteemiga Windows 10, mis esindab kĂ”ige loomulikumat erinevate andmestruktuuride segu, mis on iga arvuti peal olemas. Selle faili tihendamine vĂ”imaldab vĂ”rrelda uue algoritmi kiirus ja kompressioonimÀÀr kaasaegsete arhiivide tĂ”husate kompressoritega.
Siin on see dumpfail:

Dumpfaili tihendamisel kasutasid RTT-Mid, 7-zip ja WinRar kompressoreid. WinRar ja 7-zip kompressorid olid seadistatud maksimaalse töökiirusena.
Töötav kompressor 7-zip:

See koormab protsessorit 100%, samas kui keskmine lugemiskiirus lÀhtedumpi puhul on umbes 60 megabaiti/sek.
Töötav kompressor WinRar:

Seisund on sarnane, protsessori koormus on praktiliselt 100%, keskmine dump-lugemise kiirus on umbes 125 megabaiti/s.
Nagu eelmisel juhul, on arhiivimise kiirus piiratud protsessori vÔimalustega.
NĂŒĂŒd töötab testprogramm kompressorile. RTT-Mid:

Kuvatud ekraanipilt nĂ€itab, et protsessor on koormatud 50% ja ĂŒlejÀÀnud aja ootab, kuna kompressitud andmeid ei ole kuhugi laadida. Andmete laadimisdisk (Disk 0) on praktiliselt tĂ€ielikult tĂ€idetud. Andmete lugemiskiirus (Disk 1) kĂ”igub tugevasti, kuid keskmiselt on see ĂŒle 200 megabaiti/s.
Kompressori töökiirus on antud juhul piiratud kompressitud andmete kirjutamise vÔimalusega Disk 0-le.
NĂŒĂŒd on saadud arhiivide tihendustase:



On nÀha, et RTT-Mid kompressor on saavutanud parima kompressioonitulemuse, tema loodud arhiiv on 1,3 gigabaiti vÀiksem kui WinRari arhiiv ja 2,1 gigabaiti vÀiksem kui 7z arhiiv.
Aeg, mis kulus arhiivi loomisele:
- 7-zip â 26 minutit 10 sekundit;
- WinRar â 17 minutit 40 sekundit;
- RTT-Mid â 7 minutit 30 sekundit.
Sellest tulenevalt suutis isegi testimisversioon, mis ei olnud optimeeritud ja kasutas RTT-Mid algoritmi, luua arhiivi enam kui kaks ja pool korda kiiremini, samas kui arhiiv osutus oluliselt vÀiksemaks kui konkurentidel...
Need, kes ei usu ekraanipilte, saavad nende usaldusvÀÀrsust ise kontrollida. Testimisprogramm on saadaval , laadige alla ja kontrollige.
Aga ainult AVX-2 toetavate protsessorite korral, ilma nende kÀskude toetamiseta kompressorpump ei tööta, ja Àrge katsetage algoritmi vanadel AMD protsessoritel, need on AVX kÀskude tÀitmisel aeglased...
Kasutatud kompressioonimeetod
Algselt kasutatakse algoritmis korduvate tekstifragmente indeksimise meetodit baitide granulaarsuses. Selline kokkusurumise meetod on olnud tuntud juba pikka aega, kuid seda ei ole kasutatud, kuna sobivuste otsimise operatsioon nĂ”udis vĂ€ga palju ressursse ja kulutas oluliselt rohkem aega kui sĂ”nastiku koostamine. Seega on RTT-Mid algoritm klassikaline nĂ€ide liikumisest âminevikku tulevikkuâ...
RTT kompressor kasutab ainulaadset kiiruskaevanduse vastete otsimise skannerit, mis on vÔimaldanud kiirendada kompressiooniprotsessi. Oma valmistatud skanner, see on "minu ilu...", "hind on suur, kuna tegemist on tÀielikult kÀsitööga" (kirjutatud assembleri keeles).
Vastete otsimise skanner kasutab kaheastmelist tÔenÀosusplaani, esmalt kontrollitakse 'mÀrke', ja ainult pÀrast 'mÀrke' tuvastamist kÀivitatakse tegeliku vastete avastamise protseduur.
Vastete otsimise aken on ettearvamatu suurusega, sÔltuvalt entropia astmest töödeldavas andmeplokis. TÀiesti juhuslike (kompressitavate) andmete puhul on selle suurus megabait, korduvate andmete puhul on see alati suurem kui megabait.
Kuid paljud kaasaegsed andmeformaatide ei ole tihendatavad ja ressursside tarbiv skanner nende peal töötlemiseks on tĂ€iesti kasutu ja raiskav, seega skanner kasutab kahte tööreĆŸiimi. Esiteks otsitakse algteksti osasid, kus vĂ”ivad esineda kordused, ning see protseduur viiakse lĂ€bi tĂ”enĂ€osuslikul meetodil ja kestab vĂ€ga kiiresti (kiirusel 4-6 gigabaidi sekundis). SeejĂ€rel töödeldakse osa, kus vĂ”ivad olla kokkulangevused, pĂ”hiskanneriga.
Indeksitihendamine ei ole vÀga efektiivne, korduvad fragmentid tuleb asendada indeksitega ning indeksimassiiv vÀhendab oluliselt tihendamise koefitsienti.
Tihedamat tihendamist saavutatakse mitte ainult tÀielikult kattuvate baitide ridade indekseerimisega, vaid ka osaliste kattuvustega, kus real on nii kattuvad kui ka mittesobivad baitid. Selleks, et registreerida kattuvusi kahe ploki vahel, on indeksvormingus lisatud kattumise maskimisvÀli. Veelgi suuremaks tihendamiseks kasutatakse indekseerimist, kus mitu osaliselt kattuvat plokki kattuvad jooksva plokiga.
See vÔimaldas saavutada kompressoriga RTT-Mid kokkusurumise mÀÀr, mis on vÔrreldav sÔnaraamatumeetodil valmistatud kompressoritega, kuid töötades palju kiiremini.
Uue kompressioonialgoritmi töökiirus
Kui kompressor töötab mĂ€lukahekasutuse korral (ĂŒhe lĂ”ime kohta on vajalik 4 MegaByte), siis töökiirus kĂ”igub vahemikus 700-2000 MegaByte/s ĂŒhe protsessorituuma kohta, sĂ”ltudes kompressitava teabe tĂŒĂŒbist ning sĂ”ltumatult protsessori töö sagedusest.
Mitme lĂ”imega kompressori rakenduse puhul mÀÀrab efektiivne skaleeritavus kolmanda taseme mĂ€luhake maht. NĂ€iteks, kui âpardalâ on 9 MegaByte mĂ€luhake, pole mĂ”tet kĂ€ivitada rohkem kui kahte kompressioonivoogu, kuna kiirus ei suurene. Kuid 20 MegaByte mĂ€lu korral saab juba kĂ€ivitada viis kompressioonivoogu.
Oluline nÀitaja, mis mÔjutab kompressori töökiirus, on mÀlu latentsus. Algsed algoritmid kasutavad juhuslikke pÀringuid, millest osa (umbes 10%) ei jÔua vahemÀllu, sundides seega ootele jÀÀma, kuni andmed mÀlust kÀtte saadakse, mis vÀhendab töökiirus.
Kompressori kiirusel on oluline mĂ”ju ka andmesisestus- ja -vĂ€ljastussĂŒsteemide töö. PĂ€ringud mĂ€lu osas sisend-/vĂ€ljundoperatsioonidest blokeerivad protsessorilt andmete pĂ€ringud, mis samuti vĂ€hendavad kompressiooni kiirus. See probleem on oluline sĂŒlearvutitele ja lauaarvutitele, serverite kuna seal on see vĂ€hem oluline tĂ€nu paremale sĂŒsteembeebi juurdepÀÀsu juhtimisse ja mitmekanalilisele mĂ€lule.
Artiklis rÀÀgitakse kĂ”ikjal kompressioonist, dekompressioon jÀÀb selle artikli vĂ€liselt, kuna seal «kĂ”ik on hĂ€sti». Dekompresseerimine toimub oluliselt kiiremini ja on piiratud sisendi/vĂ€ljastuse kiirusest. Ăks fĂŒĂŒsiline tuum ĂŒhes voos tagab rahulikult dekompressiooni kiirusel 3-4 gigabaiti/sekundis.
See on seotud sellega, et lahti pakkimise protsessis puudub vasteotsingu operatsioon, mis "neelab" erinevate ressurside, nagu protsessor ja vahemÀlu, pÔhifunktsioone kompressiooni ajal.
Kompresseeritud andmete salvestuse usaldusvÀÀrsus
Nagu kogu andmete kompressiooni tarkvara klassi (arhivaatorid) nime viitab, on need mÔeldud teabe pikaajaliseks sÀilitamiseks, mitte aastateks, vaid sajanditeks ja tuhandeteks aastateks...
Aja jooksul kaotavad andmekandjad osa andmeid; siin on nÀide:

Sellel "analoogsel" andmekandjal on tuhat aastat, mĂ”ned fragmendid on kadunud, kuid ĂŒldiselt on teave "loetav"...
Ăkski vastutav tĂ€napĂ€evaste digitaalsĂŒsteemide andmesalvestusseadmete ja nende digiandmekandjate tootjatest ei anna garantiid, et andmed oleksid tĂ€ielikult kaitstud rohkem kui 75 aasta jooksul.
Ja see on probleem, kuid probleem, mis on edasi lĂŒkatud; selle lahendavad meie jĂ€reltulijad...
Digitaalsete andmete salvestussĂŒsteemid vĂ”ivad andmeid kaotada mitte ainult 75 aasta pĂ€rast, vaid andmevead vĂ”ivad tekkida igal ajal, isegi nende salvestamise ajal. Nende moonutuste vĂ€hendamiseks pĂŒĂŒtakse kasutada ĂŒleliigsust ja veaparandussĂŒsteeme. Ăleliigsus ja veaparandussĂŒsteemid ei suuda kadunud teavet alati taastada ning kui nad seda teevad, pole mingit garantiid, et taasteprotsess on toimunud Ă”igesti.
Ja see on samuti suur probleem, kuid mitte edasilĂŒkatud, vaid praegune.
Kaasaegsed kompressorid, mida kasutatakse digitaalsete andmete arhiveerimiseks, pĂ”hinevad erinevatel sĂ”nastikmeetodi modifikatsioonidel ning selliste arhivide puhul vĂ”ib teabe fragmentide kadumine olla fataalne sĂŒndmus. Sellise olukorra jaoks on isegi vĂ€ljakujunenud termin â 'katkine' arhivâŠ
SĂ”numite hoidmise madal usaldusvÀÀrsus sĂ”naraamatupĂ”hise tihendamise arhiivides on seotud tihendatud andmete struktuuriga. Sellises arhiivis ei hoita algset teksti, vaid seal on salvestatud sĂ”nastiku kirje numbrid, samas kui sĂ”nastik muudetakse dĂŒnaamiliselt vastavalt hetkel tihendatavale tekstile. Kui arhiivi fragment on kaotsi lĂ€inud vĂ”i moonutatud, ei ole vĂ”imalik kĂ”iki jĂ€rgnevaid arhiivi kirjeid tuvastada ei sisu, ega kirje pikkuse alusel, kuna pole selge, millele sĂ”nastiku kirje number vastab.
Sellest 'katkist' arhiivist teabe taastamine on vÔimatu.
RTT algoritm pÔhineb usaldusvÀÀrsemas tihendatud andmete salvestamise meetodis. Sellega rakendatakse indekseerimise meetodit korduvate fragmentide jÀlgimiseks. See lÀhenemine tihendamisele vÔimaldab minimeerida teabe suunamisel tekkinud moonutuste tagajÀrgi ja paljudel juhtudel automaatselt parandada infot salvestamisel tekkinud moonutusi.
See on seotud sellega, et arhiveeritud fail indekseeritud tihendamise korral sisaldab kahte vÀlja:
- algset teksti vÀlja, millest on eemaldatud korduvaid osi;
- indeksite vÀlja.
Andmete taastamiseks kriitiliselt tĂ€htis indeksite vĂ€li ei ole suur ja seda saab andmete salvestamise usaldusvÀÀrsuse tagamiseks dubleerida. SeetĂ”ttu, isegi kui algse teksti vĂ”i indeksimassiivi fragment kaob, taastatakse kogu ĂŒlejÀÀnud teave probleemideta, nagu pildil âanaloogsesâ andmekandjas.
Algoritmi puudused
Puudusteta ei ole vÀÀrtusi. IndeksipĂ”hine tihendamine ei vĂ€henda lĂŒhikeste korduvate jĂ€rjestuste mahtu. See on seotud indeksimeetodi piirangutega. Indeksid on vĂ€hemalt 3 baiti suurused ja vĂ”ivad ulatuda kuni 12 baitini. Kui kordumine on vĂ€iksem kui seda iseloomustav indeks, siis seda ei arvestata, olenemata sellest, kui sageli sellised kordused komprimeeritavas failis esinevad.
Traditsiooniline, sĂ”nastikupĂ”hine kokkusurumismeetod tĂ”husalt tihendab lĂŒhikeste korduste mitmekesisust ning seetĂ”ttu saavutab suurema kokkusurumise mÀÀra vĂ”rreldes indeksikokkusurumisega. TĂ”si, see saavutatakse kĂ”rge protsessori koormuse arvelt, et sĂ”nastikupĂ”hine meetod saaks andmeid efektiivsemalt tihendada, peab see vĂ€hendama andmete töötlemise kiirust kuni 10-20 megabaiti sekundis reaalsetes arvutusmasinates tĂ€iskoormuse korral.
Nii madalad kiirusnĂ€itajad on tĂ€napĂ€evastele andmesalvestussĂŒsteemidele vastuvĂ”etamatud ja esindavad pigem «akadeemilist» huvi kui praktilist.
Informatsiooni kokkusurumise mÀÀra tÔstmine toimub jÀrgmise RTT algoritmi modifikatsiooni (RTT-Max) abil, mis on juba arendamisel.
Nii et nagu alati, jÀrgneb jÀtk...
Allikas: habr.com
