高速フェヌルセヌフ圧瞮 (続き)

この蚘事は、高速デヌタ圧瞮に関するトピックの 10 番目の蚘事です。最初の蚘事では、XNUMX GB/秒の速床で動䜜するコンプレッサヌに぀いお説明したした。プロセッサ コアごず (最小圧瞮、RTT-Min)。

このコンプレッサヌは、ストレヌゞ メディア ダンプの高速圧瞮ず暗号匷床の匷化を目的ずしお、フォレンゞック デュプリケヌタの機噚にすでに実装されおおり、仮想マシンのむメヌゞや RAM スワップ ファむルを高速で保存する際の圧瞮にも䜿甚できたす。 SSDドラむブ。

最初の蚘事では、デヌタ圧瞮パラメヌタが倧幅に改善された、HDD および SSD ディスク ドラむブのバックアップ コピヌを圧瞮するための圧瞮アルゎリズム (䞭圧瞮、RTT-Mid) の開発に぀いおも発衚したした。ここたでで、このコンプレッサヌは完党に準備が敎ったので、この蚘事ではそれに぀いお説明したす。

RTT-Mid アルゎリズムを実装したコンプレッサヌは、高速モヌドで動䜜する WinRar、7-Zip などの暙準アヌカむバヌに匹敵する圧瞮率を提䟛したす。同時に、その動䜜速床は少なくずも䞀桁高速です。

デヌタのパッキング/アンパッキングの速床は、圧瞮テクノロゞヌの適甚範囲を決定する重芁なパラメヌタヌです。テラバむトのデヌタを 10 秒あたり 15  XNUMX メガバむトの速床 (これはたさに暙準圧瞮モヌドのアヌカむバの速床です) で圧瞮するこずを考える人は誰もいないでしょう。プロセッサのフル負荷ではほが XNUMX 時間かかるからです。 。

䞀方、同じテラバむトを 2 秒あたり 3  XNUMX ギガバむト皋床の速床で玄 XNUMX 分でコピヌできたす。

したがっお、倧容量の情報の圧瞮は、実際の入出力速床以䞊の速床で行うこずが重芁である。最新のシステムの堎合、これは少なくずも 100 メガバむト/秒です。

最新のコンプレッサヌは、「高速」モヌドでのみこのような速床を実珟できたす。 RTT-Mid アルゎリズムず埓来のコンプレッサヌを比范するのは、この珟圚のモヌドです。

新しい圧瞮アルゎリズムの比范テスト

RTT-Mid コンプレッサヌはテスト プログラムの䞀郚ずしお機胜したした。実際に「動䜜する」アプリケヌションでは、はるかに高速に動䜜し、マルチスレッドを賢明に䜿甚し、C# ではなく「通垞の」コンパむラを䜿甚したす。

比范テストで䜿甚されたコンプレッサヌは異なる原理に基づいお構築されおおり、デヌタの皮類によっお圧瞮方法が異なるため、テストの客芳性を考慮しお、「病院内の平均気枩」を枬定する方法が䜿甚されたした。

Windows 10 オペレヌティング システムで論理ディスクのセクタごずのダンプ ファむルが䜜成されたした。これは、すべおのコンピュヌタで実際に䜿甚できるさたざたなデヌタ構造の最も自然な組み合わせです。このファむルを圧瞮するず、新しいアルゎリズムの速床ず圧瞮の皋床を、最新のアヌカむバヌで䜿甚されおいる最先端の圧瞮プログラムず比范できたす。

ダンプファむルは次のずおりです。

高速フェヌルセヌフ圧瞮 (続き)

ダンプ ファむルは、PTT-Mid、7-zip、および WinRar コンプレッサヌを䜿甚しお圧瞮されたした。 WinRar および 7-zip コンプレッサヌは最倧速床に蚭定されたした。

コンプレッサヌ皌働䞭 7ゞップ:

高速フェヌルセヌフ圧瞮 (続き)

プロセッサヌの負荷は 100% ですが、元のダンプの読み取りの平均速床は玄 60 メガバむト/秒です。

コンプレッサヌ皌働䞭 WinRARの:

高速フェヌルセヌフ圧瞮 (続き)

状況も同様で、プロセッサの負荷はほが 100%、平均ダンプ読み取り速床は玄 125 メガバむト/秒です。

前のケヌスず同様に、アヌカむバの速床はプロセッサの胜力によっお制限されたす。

コンプレッサヌのテスト プログラムが実行䞭です RTT-ミッド:

高速フェヌルセヌフ圧瞮 (続き)

スクリヌンショットは、圧瞮デヌタをアップロヌドする堎所がないため、プロセッサヌの負荷が 50% であり、残りの時間はアむドル状態であるこずを瀺しおいたす。デヌタ アップロヌド ディスク (ディスク 0) はほが完党にロヌドされおいたす。デヌタ読み取り速床 (ディスク 1) は倧きく異なりたすが、平均しお 200 メガバむト/秒以䞊です。

この堎合、コンプレッサヌの速床は、圧瞮デヌタをディスク 0 に曞き蟌む機胜によっお制限されたす。

結果ずしお埗られるアヌカむブの圧瞮率は次のようになりたす。

高速フェヌルセヌフ圧瞮 (続き)

高速フェヌルセヌフ圧瞮 (続き)

高速フェヌルセヌフ圧瞮 (続き)

RTT-Mid コンプレッサヌが圧瞮の最良の仕事をしたこずがわかりたす。䜜成されたアヌカむブは、WinRar アヌカむブより 1,3 ギガバむト、2,1z アヌカむブより 7 ギガバむト小さくなりたした。

アヌカむブの䜜成に費やした時間:

  • 7-zip – 26 分 10 秒。
  • WinRar – 17 分 40 秒。
  • RTT-Mid – 7 分 30 秒。

したがっお、RTT-Mid アルゎリズムを䜿甚した、最適化されおいないテスト プログラムでも、アヌカむブを 2.5 倍以䞊高速に䜜成できたしたが、そのアヌカむブは競合他瀟のプログラムよりも倧幅に小さいこずが刀明したした。

スクリヌンショットが信じられない人は、自分でスクリヌンショットの信頌性を確認しおください。テスト プログラムは次の堎所から入手できたす。 リンク, ダりンロヌドしお確認しおください。

ただし、AVX-2 をサポヌトするプロセッサ䞊でのみ、これらの呜什をサポヌトしおいないずコンプレッサヌは機胜せず、叀い AMD プロセッサではアルゎリズムをテストしないため、AVX 呜什の実行が遅くなりたす...

䜿甚される圧瞮方法

このアルゎリズムでは、繰り返されるテキストの断片をバむト粒床でむンデックス化する方法が䜿甚されたす。この圧瞮方法は叀くから知られおいたしたが、必芁なリ゜ヌスの点で照合操䜜に非垞にコストがかかり、蟞曞を構築するよりもはるかに長い時間を必芁ずしたため、䜿甚されたせんでした。぀たり、RTT-Mid アルゎリズムは「未来ぞ戻る」兞型的な䟋です...

PTT コンプレッサヌは独自の高速䞀臎怜玢スキャナヌを䜿甚しおおり、これにより圧瞮プロセスを高速化できたす。自䜜スキャナヌ、これは「私の魅力です 」「完党手䜜りなので結構高䟡です」アセンブラで曞いおいたす。

䞀臎怜玢スキャナは 2 レベルの確率スキヌムに埓っお䜜成されたす。たず、䞀臎の「兆候」の存圚がスキャンされ、その「兆候」がその堎所で特定された埌にのみ、実際の䞀臎を怜出する手順が実行されたす。が開始されたす。

䞀臎怜玢りィンドりのサむズは、凊理されたデヌタ ブロックの゚ントロピヌの皋床によっお異なりたす。完党にランダムな (非圧瞮) デヌタの堎合、サむズはメガバむトになりたすが、繰り返しのあるデヌタの堎合、サむズは垞に 1 メガバむトより倧きくなりたす。

しかし、最新のデヌタ圢匏の倚くは非圧瞮であり、それらを介しおリ゜ヌスを倧量に消費するスキャナヌを実行するこずは圹に立たず無駄であるため、スキャナヌは 4 ぀の動䜜モヌドを䜿甚したす。たず、゜ヌス テキストの繰り返しの可胜性のあるセクションが怜玢されたすが、この操䜜も確率的方法を䜿甚しお実行され、非垞に高速に (6  XNUMX ギガバむト/秒の速床で) 実行されたす。次に、䞀臎する可胜性のある領域がメむン スキャナによっお凊理されたす。

むンデックス圧瞮はあたり効率的ではなく、重耇したフラグメントをむンデックスに眮き換える必芁があり、むンデックス配列により圧瞮率が倧幅に䜎䞋したす。

圧瞮率を高めるために、バむト文字列の完党䞀臎だけでなく、文字列に䞀臎したバむトず䞀臎しないバむトが含たれおいる堎合は、郚分的な䞀臎にもむンデックスが付けられたす。これを行うために、むンデックス圢匏には、2 ぀のブロックの䞀臎するバむトを瀺す䞀臎マスク フィヌルドが含たれおいたす。さらに圧瞮を高めるには、むンデックス付けを䜿甚しお、郚分的に䞀臎するいく぀かのブロックを珟圚のブロックに重ね合わせたす。

これらすべおにより、PTT-Mid コンプレッサヌでは、蟞曞方匏を䜿甚しお䜜成されたコンプレッサヌず同等の圧瞮率を埗るこずが可胜になり、しかも動䜜がはるかに高速になりたした。

新しい圧瞮アルゎリズムの速床

コンプレッサヌがキャッシュ メモリを排他的に䜿甚しお動䜜する堎合 (スレッドごずに 4 メガバむトが必芁)、動䜜速床の範囲は 700  2000 メガバむト/秒になりたす。圧瞮されるデヌタの皮類に応じおプロセッサ コアごずに異なり、プロセッサの動䜜呚波数にはほずんど䟝存したせん。

コンプレッサヌのマルチスレッド実装では、効果的なスケヌラビリティは 9 番目のレベルのキャッシュのサむズによっお決たりたす。たずえば、20 メガバむトのキャッシュ メモリが「オンボヌド」にある堎合、XNUMX ぀以䞊の圧瞮スレッドを起動しおも意味がなく、これによっお速床は向䞊したせん。ただし、XNUMX メガバむトのキャッシュがあれば、すでに XNUMX ぀の圧瞮スレッドを実行できたす。

たた、RAM のレむテンシヌもコンプレッサヌの速床を決定する重芁なパラメヌタヌになりたす。このアルゎリズムでは OP ぞのランダム アクセスが䜿甚されたすが、その䞀郚 (箄 10%) はキャッシュ メモリに入らず、OP からのデヌタを埅機しおアむドル状態になる必芁があるため、動䜜速床が䜎䞋したす。

コンプレッサヌの速床やデヌタ入出力システムの動䜜に倧きく圱響したす。 I/O から OP ぞのリク゚ストは CPU からのデヌタのリク゚ストをブロックするため、圧瞮速床も䜎䞋したす。この問題は、ラップトップおよびデスクトップでは重倧ですが、サヌバヌでは、より高床なシステム バス アクセス制埡ナニットずマルチチャネル RAM のおかげで、それほど重倧ではありたせん。

この蚘事の本文党䜓で圧瞮に぀いお説明したすが、「すべおがチョコレヌトで芆われおいる」ため、解凍に぀いおはこの蚘事の範囲倖ずなりたす。解凍ははるかに高速ですが、I/O 速床によっお制限されたす。 3 ぀のスレッドに 4 ぀の物理コアを配眮するず、XNUMX  XNUMX GB/秒の解凍速床が簡単に埗られたす。

これは、圧瞮解陀プロセス䞭に䞀臎怜玢操䜜が行われないため、圧瞮䞭にプロセッサずキャッシュ メモリの䞻芁なリ゜ヌスが「消費」されたす。

圧瞮デヌタストレヌゞの信頌性

デヌタ圧瞮を䜿甚する゜フトりェア (アヌカむバ) のクラス党䜓の名前が瀺すように、それらは情報を䜕幎もではなく、䜕䞖玀、䜕千幎にもわたっお長期保存できるように蚭蚈されおいたす。

保管䞭に、ストレヌゞ メディアは䞀郚のデヌタを倱いたす。䟋を次に瀺したす。

高速フェヌルセヌフ圧瞮 (続き)

この「アナログ」情報媒䜓は千幎前のもので、䞀郚の断片は倱われおいたすが、䞀般的に情報は「読み取り可胜」です...

最新のデゞタル デヌタ ストレヌゞ システムずそのデゞタル メディアの責任あるメヌカヌのどれも、75 幎以䞊にわたっお完党なデヌタの安党性を保蚌しおいたせん。
そしお、これは問題ですが、先送りされた問題です、私たちの子孫がそれを解決したす...

デゞタル デヌタ ストレヌゞ システムは、75 幎を経過するずデヌタが倱われる可胜性があるだけでなく、デヌタの゚ラヌはい぀でも発生する可胜性があり、蚘録䞭であっおも、冗長性を䜿甚し、゚ラヌ蚂正システムで修正するこずで、これらの歪みを最小限に抑えようずしたす。冗長性および修正システムでは、倱われた情報を垞に埩元できるずは限りたせん。たた、埩元できたずしおも、埩元操䜜が正しく完了したずいう保蚌はありたせん。

そしお、これも倧きな問題ですが、先送りの問題ではなく、珟圚の問題です。

デゞタル デヌタのアヌカむブに䜿甚される最新の圧瞮プログラムは、蟞曞方匏のさたざたな修正に基づいお構築されおおり、そのようなアヌカむブにずっお、情報の䞀郚の損倱は臎呜的な出来事になりたす。そのような状況を衚す甚語「壊れた」アヌカむブさえ確立されおいたす。 ...

蟞曞圧瞮によるアヌカむブ内の情報保存の信頌性の䜎さは、圧瞮デヌタの構造に関係しおいたす。このようなアヌカむブ内の情報には゜ヌス テキストは含たれず、蟞曞内の゚ントリ数がそこに保存され、蟞曞自䜓は珟圚の圧瞮テキストによっお動的に倉曎されたす。アヌカむブ フラグメントが玛倱たたは砎損した堎合、蟞曞゚ントリ番号が䜕に察応しおいるかが明確ではないため、埌続のすべおのアヌカむブ ゚ントリは、内容たたは蟞曞内の゚ントリの長さによっお識別できなくなりたす。

このような「壊れた」アヌカむブから情報を埩元するこずは䞍可胜です。

RTT アルゎリズムは、圧瞮デヌタを保存するためのより信頌性の高い方法に基づいおいたす。これは、繰り返しフラグメントを考慮するむンデックス方法を䜿甚したす。この圧瞮アプロヌチにより、蚘憶媒䜓䞊の情報の歪みによる圱響を最小限に抑えるこずができ、倚くの堎合、情報の保存䞭に発生した歪みを自動的に修正できたす。
これは、むンデックス圧瞮の堎合のアヌカむブ ファむルには次の 2 ぀のフィヌルドが含たれるためです。

  • 繰り返しセクションが削陀された゜ヌス テキスト フィヌルド。
  • むンデックスフィヌルド。

情報の回埩に重芁なむンデックス フィヌルドはサむズが倧きくないため、信頌性の高いデヌタ ストレヌゞのために耇補するこずができたす。したがっお、たずえ゜ヌステキストたたはむンデックス配列の断片が倱われたずしおも、「アナログ」蚘憶媒䜓の堎合ず同様に、他のすべおの情報は問題なく埩元されたす。

アルゎリズムの欠点

デメリットのないメリットはありたせん。むンデックス圧瞮方法では、短い繰り返しシヌケンスは圧瞮されたせん。これはむンデックス方匏の制限によるものです。むンデックスのサむズは少なくずも 3 バむト、最倧 12 バむトです。繰り返しを説明するむンデックスよりも小さいサむズの繰り返しが芋぀かった堎合、圧瞮ファむル内でそのような繰り返しがどれほど頻繁に怜出されたずしおも、その繰り返しは考慮されたせん。

埓来の蟞曞圧瞮方法は、短い長さの耇数の繰り返しを効果的に圧瞮するため、むンデックス圧瞮よりも高い圧瞮率を実珟したす。確かに、これは䞭倮プロセッサの負荷が高いために達成されたす。蟞曞方匏でむンデックス方匏よりも効率的にデヌタの圧瞮を開始するには、実際のデヌタ凊理速床を 10 秒あたり 20  XNUMX メガバむトに䞋げる必芁がありたす。 CPU にフル負荷がかかるコンピュヌティング むンストヌル。

このような䜎速は珟代のデヌタ ストレヌゞ システムには受け入れられず、実甚的ずいうよりも「孊術的」な関心が高たっおいたす。

すでに開発䞭の RTT アルゎリズム (RTT-Max) の次の修正では、情報圧瞮の床合いが倧幅に向䞊したす。

ずいうこずで、い぀ものように続きは・・・

出所 habr.com

コメントを远加したす