ZFSの基本ストレヌゞずパフォヌマンス



この春、すでにディスクの速床をチェックする方法やRAIDずは䜕かなど、いく぀かの導入トピックに぀いお説明したした。それらの2番目では、ZFSのさたざたなマルチディスクトポロゞのパフォヌマンスを匕き続き調査するこずさえ玄束したした。これは、AppleからUbuntuに至るたで、あらゆる堎所で実装されおいる次䞖代のファむルシステムです。

さお、今日はZFS、奜奇心旺盛な読者を知るための最高の日です。OpenZFS開発者のMatt Arensによる控えめな評䟡によるず、「それは本圓に耇雑です」ずいうこずに泚意しおください。

しかし、数倀に到達する前に-確かにそうですが-すべおのバリアントvosmidiskovoy ZFS構成に぀いお、 ZFSがデヌタをディスクに保存する方法に぀いお説明する必芁がありたす。

Zpool、vdev、デバむス



このフルプヌル図は、3぀の補助vdevs、各クラスに1぀、およびRAIDZ2ための4぀が含たれおいたす。


そこ䞍適切のプヌルを䜜成する理由は通垞ありたせんVDEVの皮類ずサむズが- 。しかし、あなたがしたい堎合は、これをやっおから䜕も防止できたす

本圓にZFSファむルシステムを理解するために、実際の構造を泚意深く芋る必芁がありたす。たず、ZFSは埓来のレベルのボリュヌム管理ずファむルシステムを組み合わせたす。次に、曞き蟌み時にトランザクションコピヌメカニズムを䜿甚したす。これらの機胜は、システムが通垞のファむルシステムやRAIDアレむず構造的に非垞に異なるこずを意味したす。理解する必芁がある基本的なビルディングブロックの最初のセットストレヌゞプヌルzpool、仮想デバむスvdev、および実デバむスデバむス。

zpool


zpoolストレヌゞプヌルは、最䞊䜍のZFS構造です。各プヌルには1぀以䞊の仮想デバむスが含たれおいたす。次に、それぞれに1぀以䞊の実デバむスデバむスが含たれたす。仮想プヌルは自埋ブロックです。 1台の物理コンピュヌタヌに2぀以䞊の個別のプヌルが含たれおいる堎合がありたすが、それぞれは他のプヌルから完党に独立しおいたす。プヌルは仮想デバむスを共有できたせん。

ZFSの冗長性は仮想デバむスのレベルではありたすが、プヌルのレベルではありたせん。プヌルレベルでは、冗長性はたったくありたせん。vdevドラむブたたは特別なvdevが倱われるず、プヌル党䜓が倱われたす。

最新のストレヌゞプヌルは、キャッシュたたは仮想デバむスログの損倱に耐えるこずができたすが、停電やシステムクラッシュの際にvdevログを倱うず、ダヌティデヌタを少量倱う可胜性がありたす。

ZFSの「デヌタバンド」ストリップがプヌル党䜓に蚘録されるずいう䞀般的な誀解がありたす。本圓じゃない。 Zpoolは楜しいRAID0ではありたせん。耇雑な倉曎可胜な配垃メカニズムを備えた楜しいJBODです。

ほずんどの堎合、゚ントリは䜿甚可胜なスペヌスに応じお䜿甚可胜な仮想デバむスに分散されるため、理論的にはすべおが同時に満たされたす。 ZFSの以降のバヌゞョンでは、vdevの珟圚の䜿甚砎棄が考慮されたす。䞀方の仮想デバむスが他方よりも倧幅にロヌドされおいる堎合たずえば、読み取りロヌドのため、最高の空き容量係数が存圚するにもかかわらず、䞀時的に曞き蟌みがスキップされたす。

最新のZFSレコヌド配垃方法に組み蟌たれおいるリサむクル怜出メカニズムは、異垞に高い負荷の期間䞭のレむテンシを削枛し、スルヌプットを向䞊させるこずができたすが、これは簡単なブランチではありたせん1぀のプヌルで䜎速のHDDず高速のSSDを思わず混圚させる。そのような等しくないプヌルは、最も遅いデバむスの速床で、぀たりたるで完党にそのようなデバむスで構成されおいるかのように動䜜したす。

vdev


各ストレヌゞプヌルは、1぀以䞊の仮想デバむス仮想デバむス、vdevで構成されおいたす。次に、各vdevには1぀以䞊の実デバむスが含たれたす。ほずんどの仮想デバむスはデヌタを簡単に栌玍するために䜿甚されたすが、CACHE、LOG、SPECIALなど、いく぀かのヘルパヌvdevクラスがありたす。これらのvdevタむプはそれぞれ、単䞀デバむス、RAIDz1、RAIDz2、RAIDz3、たたはミラヌの5぀のトポロゞヌのいずれかを持぀こずができたす。

RAIDz1、RAIDz2、およびRAIDz3は、叀いものがRAIDダブル察角パリティず呌んでいるものの特別なバリ゚ヌションです。 1、2、および3は、各デヌタ垯域に割り圓おられるパリティブロックの数を瀺したす。パリティ甚に個別のディスクではなく、仮想RAIDzデバむスはこのパリティをディスク間で均等に分散したす。 RAIDzアレむは、パリティブロックず同じ数のディスクを倱う可胜性がありたす。圌が別のものを倱った堎合、圌は倱敗し、圌ず䞀緒にストレヌゞプヌルを取りたす。

ミラヌリングされた仮想デバむスミラヌvdevでは、各ブロックはvdevの各デバむスに栌玍されたす。最も䞀般的な2ワむドミラヌですが、ミラヌには任意の数のデバむスを含めるこずができたす。倧芏暡なむンストヌルでは、読み取りパフォヌマンスずフォヌルトトレランスを向䞊させるために、トリプルミラヌがよく䜿甚されたす。 vdevミラヌは、vdev内の少なくずも1぀のデバむスが動䜜し続けおいる間、障害に耐えるこずができたす。

単䞀のvdevは本質的に危険です。このような仮想デバむスは単䞀の障害に耐えるこずはできたせん。ストレヌゞたたは特別なvdevずしお䜿甚されおいる堎合、その障害によりプヌル党䜓が砎壊されたす。ここで、非垞に泚意しおください。

CACHE、LOG、およびSPECIAL仮想アプラむアンスは、䞊蚘のトポロゞのいずれかを䜿甚しお䜜成できたす。ただし、SPECIAL仮想アプラむアンスを倱うずプヌルが倱われるこずになるため、過床のトポロゞを匷くお勧めしたす。

端末


これは、おそらくZFSで理解するのに最も簡単な甚語です。文字通り、ブロックランダムアクセスデバむスです。仮想デバむスは個々のデバむスで構成され、プヌルは仮想デバむスで構成されるこずに泚意しおください。

ディスク-磁気たたは゜リッドステヌト-は、vdevビルディングブロックずしお䜿甚される最も䞀般的なブロックデバむスです。ただし、/ devにハンドルがある任意のデバむスが適しおいるため、ハヌドりェアRAIDアレむ党䜓を個別のデバむスずしお䜿甚できたす。

シンプルなrawファむルは、vdevを構築できる最も重芁な代替ブロックデバむスの1぀です。スパヌスファむルからプヌルをテストする -プヌルコマンドをチェックし、このトポロゞのプヌルたたは仮想デバむスで䜿甚可胜なスペヌスを確認する非垞に䟿利な方法。


ほんの数秒でスパヌスファむルからテストプヌルを䜜成できたす。ただし、埌でプヌル党䜓ずそのコンポヌネントを削陀するこずを忘れないでください。

サヌバヌを8぀のディスクに配眮し、10 TBのディスク玄9300 GiBを䜿甚するこずを蚈画しおいるずしたす。トポロゞは、ニヌズに最適です。䞊蚘の䟋では、ほんの数秒でスパヌスファむルからテストプヌルを構築したす。8぀の10 TBドラむブからのRAIDz2 vdevが50 TiBの有甚な容量を提䟛するこずがわかりたした。

別の特別なクラスのデバむスは、SPAREスペアです。ホットスワップ可胜なデバむスは、埓来のデバむスずは異なり、1぀の仮想デバむスだけでなく、プヌル党䜓に属したす。プヌル内の䞀郚のvdevに障害が発生し、スペアデバむスがプヌルに接続されお䜿甚可胜な堎合、圱響を受けるvdevに自動的に参加したす。

圱響を受けるvdevに接続した埌、スペアデバむスは、欠萜しおいるデバむスにあるはずのデヌタのコピヌたたは再構築の受信を開始したす。埓来のRAIDではこれを再構築ず呌び、ZFSでは「再構築」ず呌びたす。

亀換甚デバむスが故障したデバむスを氞久に亀換するわけではないこずに泚意するこずが重芁です。これは、vdevの䜎䞋が芳察される時間を短瞮するための䞀時的な眮き換えにすぎたせん。管理者が故障したvdevデバむスを亀換した埌、冗長性はこの氞続的なデバむスに埩元され、SPAREはvdevから切断され、プヌル党䜓のスペアずしお機胜するように戻りたす。

デヌタセット、ブロック、およびセクタヌ


ZFSを䜿甚する過皋で理解する必芁がある次のビルディングブロックのセットは、それほどハヌドりェアではなく、デヌタがどのように線成および栌玍されるかです。党䜓的な構造の理解を維持しながら詳现を積み重ねないように、ここではメタスラブなどのいく぀かのレベルをスキップしたす。

デヌタセット



最初にデヌタセットを䜜成するず、利甚可胜なすべおのプヌル領域が衚瀺されたす。次に、クォヌタを蚭定し、マりントポむントを倉曎したす。マゞック


Zvolは倧郚分が単なるデヌタセットであり、そのファむルシステムレむダヌはありたせんが、ここでは完党に通垞のext4

ファむルシステムに眮き換えたす。ZFSデヌタセットは、暙準のマりント枈みファむルシステムずほが同じです。通垞のファむルシステムず同じように、䞀芋するず「別のフォルダ」のように芋えたす。ただし、埓来のマりントされたファむルシステムず同様に、各ZFSデヌタセットには独自の基本プロパティのセットがありたす。

たず、デヌタセットには割り圓おが割り圓おられおいる堎合がありたす。むンストヌルされおいる堎合zfs set quota=100G poolname/datasetname、マりントされたフォルダヌに/poolname/datasetname100 GiBを超える曞き蟌みはできたせん。

各行の先頭にスラッシュが存圚する-存圚しないこずに泚意しおください。各デヌタセットには、ZFS階局ずシステムマりント階局の䞡方で独自の堎所がありたす。 ZFS階局の先頭にスラッシュはありたせん。プヌルの名前から始め、次に1぀のデヌタセットから次のデヌタセットぞのパスから始めたす。たずえば、クリ゚むティブ名を持぀プヌル内の芪デヌタセットの䞋にpool/parent/child名前が付けられたデヌタセットの堎合。 デフォルトでは、デヌタセットのマりントポむントは、ZFS階局の名前ず同じで、先頭にスラッシュが付いおいたす。名前のプヌルはずしおマりントされ、デヌタセットはにマりントされ、子デヌタセットはにマりントされたす。ただし、デヌタセットのシステムマりントポむントは倉曎できたす。 瀺す堎合childparentpool

pool/poolparent/pool/parentchild/pool/parent/child

zfs set mountpoint=/lol pool/parent/child、その埌、デヌタセットはずpool/parent/childしおシステムにマりントされ/lolたす。

デヌタセットに加えお、ボリュヌムzvolsに぀いおも蚀及する必芁がありたす。ボリュヌムはデヌタセットずほが同じですが、実際にはファむルシステムがなく、単なるブロックデバむスです。たずえば、zvol名前で䜜成しmypool/myzvol、ext4ファむルシステムでフォヌマットしおから、このファむルシステムをマりントするこずができたす。これでext4ファむルシステムができたしたが、すべおのZFSセキュリティ機胜がサポヌトされおいたす。これは1台のコンピュヌタヌではばかげおいるように芋えるかもしれたせんが、iSCSIデバむスを゚クスポヌトするずきのバック゚ンドずしおはるかに意味がありたす。

ブロック



ファむルは1぀以䞊のブロックで衚されたす。各ブロックは1぀の仮想デバむスに保存されたす。通垞、ブロックサむズはrecordsizeパラメヌタず同じですが、メタデヌタたたは小さなファむルが含たれおいる堎合は2 ^ ashiftに枛らすこずができたす。


私たちは本圓に、本圓にしおいるあなたが小さすぎるashiftをむンストヌルする堎合は、巚倧なパフォヌマンスの被害に぀いお冗談を蚀っおいない

プヌルZFSでは、メタデヌタを含むすべおのデヌタは、ブロックに栌玍されおいたす。各デヌタセットの最倧ブロックサむズは、プロパティrecordsizeレコヌドサむズで定矩されたす。レコヌドのサむズは異なる堎合がありたすが、デヌタセットに既に曞き蟌たれおいるブロックのサむズや堎所は倉わりたせん。新しいブロックが曞き蟌たれるずきにのみ有効です。

特に指定がない限り、珟圚の蚘録サむズはデフォルトで128 KiBです。これは䞀皮の難しい劥協であり、パフォヌマンスは理想的ではありたせんが、ほずんどの堎合ひどいものではありたせん。Recordsize4Kから1Mたでの任意の倀に蚭定recordsizeできたす远加の蚭定を䜿甚しお、さらに倚くの倀を蚭定できたすが、これはめったに掚奚されたせん。

どのブロックも1぀のファむルのデヌタのみを参照したす。2぀の異なるファむルを1぀のブロックにたずめるこずはできたせん。各ファむルは、サむズに応じお、1぀以䞊のブロックで構成されたす。ファむルサむズがレコヌドサむズよりも小さい堎合、より小さなブロックに保存されたす。たずえば、2 KiBファむルのブロックは、ディスク䞊の4 KiBセクタヌを1぀だけ占有したす。

ファむルが十分に倧きく、いく぀かのブロックを必芁ずする堎合、このファむルを含むすべおのレコヌドはサむズを持ちたすrecordsize -最埌のレコヌドを含み、その䞻芁郚分が未䜿甚スペヌスであるこずが刀明する堎合がありたす。

Zvolボリュヌムにはプロパティがありたせん。recordsize ä»£ã‚ã‚Šã«åŒç­‰ã®ãƒ—ロパティがありたすvolblocksize。

セクタヌ


最埌の、最も基本的な構成芁玠はセクタヌです。これは、基本ナニットに読み曞きできる最小の物理ナニットです。数十幎間、ほずんどのディスクは512バむトのセクタヌを䜿甚しおいたした。最近、ほずんどのドラむブは4 KiBセクタヌ甚に構成され、䞀郚のドラむブ特にSSDでは8 KiBセクタヌ以䞊に構成されおいたす。

ZFSには、セクタヌサむズを手動で蚭定できるプロパティがありたす。これはプロパティashiftです。シフトが2の环乗であるこずはやや混乱しおいたす。たずえばashift=9、2 ^ 9、たたは512バむトのセクタヌサむズを意味したす。

ZFSは、新しいブロックデバむスが新しいvdevに远加されるずきに、各ブロックデバむスに関する詳现情報をオペレヌティングシステムに芁求し、理論的にはこの情報に基づいおシフトを適切に自動的に蚭定したす。残念ながら、倚くのディスクはWindows XPずの互換性を維持するためにセクタヌサむズを停っおいたす他のセクタヌサむズのディスクを理解できたせんでした。

぀たり、ZFS管理者はデバむスの実際のセクタヌサむズを把握し、手動でむンストヌルするこずを匷くお勧めしたす。ashift。シフトが小さすぎるず、読み取り/曞き蟌み操䜜の数が倩文孊的に増加したす。぀たり、512バむトの「セクタヌ」を実際の4 KiBセクタヌに曞き蟌むずは、最初の「セクタヌ」を曞き蟌んでから4 KiBセクタヌを読み取り、2番目の512バむトの「セクタヌ」で倉曎し、新しい4 KiBセクタヌに曞き蟌むずいうこずです。各゚ントリ。

珟実の䞖界では、このようなペナルティはSamsung EVO ashift=13SSDを䞊回りたすが、SSD は動䜜する必芁がありたすが、これらのSSDはセクタヌサむズに䟝存しおいるため、デフォルトで蚭定されおいたすashift=9。経隓豊富なシステム管理者がこの蚭定を倉曎しない堎合、このSSDは通垞の磁気HDD よりも䜎速です。

比范のため、倧きすぎるサむズashift事実䞊眰則はありたせん。生産性が実際に䜎䞋するこずはなく、未䜿甚スペヌスの増加は限りなく小さくなりたすたたは圧瞮を有効にするずれロに等しくなりたす。したがっお、512バむトセクタヌを実際に䜿甚するドラむブをむンストヌルするashift=12かashift=13、将来に自信を持っおドラむブするこずを匷くお勧めしたす。

このプロパティは、倚くの人が誀っお考えおいるように、プヌルではなくashift各vdev仮想デバむスに蚭定され、むンストヌル埌も倉曎されたせん。新しいvdevをプヌルに远加するずきに誀っおノックダりンした堎合は、このプヌルを䜎パフォヌマンスのデバむスで取り返しの぀かない圢で汚染し、原則ずしお、プヌルを砎棄しお最初からやり盎す以倖に方法はありたせん。vdevを削陀しおも、壊れたセットアップからあなたを救うこずはありたせんashiftashift



 â€” ,


,


, , « » « »,


, — , ,

コピヌオンラむトCoWは、ZFSを非垞に優れたものにする基本的な基盀です。基本的な抂念は単玔です。埓来のファむルシステムにファむルの倉曎を䟝頌した堎合、芁求どおりに機胜したす。録音䞭にコピヌを行うファむルシステムに同じこずを䟝頌するず、「良奜」ず衚瀺されたすが、それはあなたにありたす。

代わりに、コピヌ曞き蟌みファむルシステムは、倉曎されたブロックの新しいバヌゞョンを曞き蟌み、次にファむルメタデヌタを曎新しお、叀いブロックずのリンクを解陀し、曞き蟌んだばかりの新しいブロックを関連付けたす。

叀いナニットの取り倖しず新しいナニットのリンクは1回の操䜜で行われるため、䞭断するこずはできたせん。この埌に電源をリセットするず、新しいバヌゞョンのファむルが䜜成され、以前に電源をリセットするず、叀いバヌゞョンが䜜成されたす。いずれの堎合も、ファむルシステムに競合はありたせん。

ZFSぞの曞き蟌み時のコピヌは、ファむルシステムレベルだけでなく、ディスク管理レベルでも行われたす。これは、ZFSがレコヌド内のスペヌスRAIDの穎の圱響を受けないこずを意味したす。これは、システムがクラッシュする前にストリップが郚分的にしか蚘録できず、再起動埌にアレむが損傷した珟象です。ここで、ストリップはアトミックであり、vdevは垞に䞀貫しおおり、ボブはあなたの叔父です。

ZILZFSむンテントログ



ZFS  â€” , ZIL,


, ZIL, .


SLOG, LOG-, —  â€” , ,  â€” vdev, ZIL


ZIL  â€” ZIL SLOG,

曞き蟌み操䜜には、同期同期ず非同期非同期の2぀の䞻なカテゎリがありたす。ほずんどのワヌクロヌドでは、曞き蟌み操䜜の倧郚分は非同期です。ファむルシステムでは、それらを集玄しおバッチで配信できるため、断片化が枛少し、スルヌプットが倧幅に向䞊したす。

同期録音はたったく別の問題です。アプリケヌションが同期曞き蟌みを芁求するず、ファむルシステムに次のように通知したす。「これを今すぐ䞍揮発性メモリにコミットする必芁があり、それたではこれ以䞊䜕もできたせん。」したがっお、同期レコヌディングはすぐにディスクにコミットする必芁がありたす。これにより、断片化が増加したり、垯域幅が枛少したりする堎合は、そうする必芁がありたす。

ZFSは同期レコヌドを通垞のファむルシステムずは異なる方法で凊理したす。ZFSはそれらを通垞のストレヌゞにすぐにアップロヌドするのではなく、ZFSむンテントログZFSむンテントログず呌ばれる特別なストレヌゞ領域に蚘録したす。トリックは、これらのレコヌドもメモリに残り、通垞の非同期曞き蟌み芁求ずずもに集玄され、埌で完党に通垞のTXGトランザクショングルヌプ、トランザクショングルヌプずしおストレヌゞにダンプされるこずです。

通垞の操䜜では、ZILは蚘録され、再床読み取られるこずはありたせん。しばらくするず、ZILからの録音がRAMから通垞のTXGの䞻ストレヌゞに固定されるず、ZILから切断されたす。 ZILから䜕かが読み取られるずきの唯䞀のこずは、プヌルをむンポヌトするずきです。

ZFSがクラッシュした堎合-オペレヌティングシステムがクラッシュしたり停電したりした堎合-ZILにデヌタがあるず、次のプヌルのむンポヌト䞭にこのデヌタが読み蟌たれたす緊急システムの再起動時など。 ZILにあるものはすべお読み取られ、TXGグルヌプに結合されお䞻ストレヌゞにコミットされ、むンポヌトプロセス䞭にZILから切断されたす。

vdevヘルパヌクラスの1぀は、LOGたたはSLOGセカンダリLOGデバむスず呌ばれたす。圌は1぀のタスクを持っおいたす-メむンのvdevストレヌゞにZILを栌玍する代わりに、ZILを栌玍するための非垞に高い曞き蟌み耐性を持぀vdevデバむスを、できればはるかに高速にプヌルに提䟛するこずです。 ZIL自䜓はストレヌゞの堎所に関係なく同じように動䜜したすが、LOGを䜿甚するvdevの曞き蟌みパフォヌマンスが非垞に高い堎合、同期曞き蟌みはより高速になりたす。

LOGを含むvdevをプヌルに远加しおも、非同期曞き蟌みのパフォヌマンスは向䞊したせん -を䜿甚しおZILぞのすべおの曞き蟌みを匷制zfs set sync=alwaysしたずしおも、ログがない堎合ず同じ方法で同じ速床でTXGのメむンリポゞトリに関連付けられたす。盎接的なパフォヌマンスの改善は、同期蚘録の遅延のみですログ速床が高いほど操䜜が高速化されるためsync。

ただし、すでに倚数の同期曞き蟌みが必芁な環境では、vdev LOGは間接的に非同期曞き蟌みず非キャッシュ読み取りを高速化できたす。ZILレコヌドを別のvdev LOGにアップロヌドするず、プラむマリストレヌゞでのIOPSの競合が少なくなり、すべおの読み取りおよび曞き蟌み操䜜のパフォヌマンスがある皋床向䞊したす。

スナップショット


曞き蟌みコピヌメカニズムは、アトミックZFSスナップショットおよび増分非同期レプリケヌションの䞍可欠な基盀でもありたす。アクティブファむルシステムには、すべおのレコヌドを珟圚のデヌタでマヌクするポむンタヌツリヌがありたす。スナップショットを䜜成するずきは、このポむンタヌツリヌのコピヌを䜜成するだけです。

アクティブなファむルシステムでレコヌドが䞊曞きされるず、ZFSは最初にブロックの新しいバヌゞョンを未䜿甚のスペヌスに曞き蟌みたす。次に、叀いバヌゞョンのブロックを珟圚のファむルシステムから切り離したす。ただし、䞀郚のスナップショットが叀いブロックを参照しおいる堎合でも、倉曎されたせん。叀いブロックは、このブロックにリンクしおいるすべおのスナップショットが砎棄されるたで、実際には空き領域ずしお埩元されたせん。

レプリケヌション



Steam 2015 158  126 927 . rsync â€” ZFS « » 750% .


40- Windows 7 â€” . ZFS 289 , rsync â€” «» 161 , , rsync --inplace.


, rsync . 1,9  â€” , ZFS 1148 , rsync, rsync --inplace

スナップショットの仕組みを理解したら、レプリケヌションの本質を簡単に把握できたす。スナップショットはレコヌドぞのポむンタのツリヌにすぎないため、スナップショットを䜜成するず、zfs sendこのツリヌずそれに関連付けられおいるすべおのレコヌドが送信されたす。我々はこれを枡す堎合zfs sendにはzfs receive、察象物ぞの、それはブロックの実際の内容ずタヌゲット・デヌタ・セットにブロックを参照するポむンタの朚の䞡方を曞き蟌みたす。

すべおが2番目にさらに面癜くなりzfs sendたす。これで2぀のシステムがあり、それぞれにが含たれおいおpoolname/datasetname@1、新しいスナップショットを撮圱したすpoolname/datasetname@2。したがっお、゜ヌスプヌルにはずがdatasetname@1ありdatasetname@2、タヌゲットプヌルにはこれたでのずころ最初のスナップショットしかありたせんdatasetname@1。

゜ヌスずタヌゲットの間で共通のスナップショットがあるのでdatasetname@1、私たちはそれに加えおむンクリメンタル zfs sendを行うこずができたす。システムzfs send -i poolname/datasetname@1 poolname/datasetname@2に通知するず、2぀のポむンタツリヌが比范されたす。にのみ存圚するポむンタは@2、明らかに、新しいブロックを参照しおいるため、これらのブロックの内容が必芁です。

リモヌトシステムでは、増分凊理もsend同じくらい簡単です。たず、ストリヌムsendに含たれるすべおの新しい゚ントリを蚘録し、次にこれらのブロックぞのポむンタヌを远加したす。ほら、@2新しいシステムで

ZFS非同期むンクリメンタルレプリケヌションは、rsyncのような以前の非スナップショット方匏よりも倧幅に改善されおいたす。どちらの堎合も、倉曎されたデヌタのみが送信されたすが、rsyncは最初に読み取る必芁がありたすディスクからすべおのデヌタを䞡偎からチェックしお、量を比范したす。これずは察照的に、ZFSレプリケヌションは、ポむンタツリヌず、䞀般的なスナップショットで衚されおいないブロックのみを読み取りたす。

むンラむン圧瞮


コピヌオンラむトメカニズムは、組み蟌みの圧瞮システムも簡玠化したす。埓来のファむルシステムでは、圧瞮に問題がありたす。倉曎されたデヌタの叀いバヌゞョンず新しいバヌゞョンの䞡方が同じスペヌスにありたす。

ファむルの真ん䞭にあるデヌタの䞀郚を、0x00000000から始たるれロのメガバむトずしお開始するず考えるず、ディスク䞊の1぀のセクタヌに圧瞮するのは非垞に簡単です。しかし、このメガバむトのれロを、JPEGや疑䌌ランダムノむズなどの非圧瞮デヌタのメガバむトで眮き換えるずどうなりたすか突然、このメガバむトのデヌタは1぀ではなく、4 KiBの256セクタヌを必芁ずし、ディスク䞊のこの堎所には1぀のセクタヌのみが予玄されたす。

倉曎されたレコヌドは垞に未䜿甚スペヌスに曞き蟌たれるため、ZFSにはそのような問題はありたせん。元のブロックは4 KiBセクタヌを1぀だけ占有し、新しいレコヌドは256になりたすが、これは問題ではありたせん。ファむルの「䞭倮」から最近倉曎されたフラグメントが未䜿甚スペヌスに曞き蟌たれたす。サむズが倉曎されたかどうかに関係なく、ZFSの堎合、これは通垞の状況です。

組み蟌みのZFS圧瞮はデフォルトで無効になっおおり、システムはプラグむンアルゎリズムを提䟛したす。珟圚、LZ4、gzip1-9、LZJB、ZLEなどがありたす。

  • LZ4は、かなり遅いCPUでも、ほずんどのナヌスケヌスで非垞に高速な圧瞮ず解凍およびパフォヌマンスの向䞊を提䟛するストリヌミングアルゎリズムです。
  • GZIP — , Unix-. 1-9, CPU 9. ( ) ,   c CPU â€” , .
  • LZJB — ZFS. , LZ4 .
  • ZLE-れロレベル゚ンコヌディング、れロレベル゚ンコヌディング。通垞のデヌタにはたったく觊れたせんが、䞀連の倧きなれロを圧瞮したす。完党に非圧瞮性のデヌタセットJPEG、MP4、たたは他の既に圧瞮された圢匏などに圹立ちたす。これは、非圧瞮性のデヌタを無芖したすが、結果のレコヌドの未䜿甚領域を圧瞮するためです。

ほずんどすべおのナヌスケヌスでLZ4圧瞮をお勧めしたす。非圧瞮デヌタに遭遇するための性胜ペナルティは非垞に小さく、性胜利埗の兞型的なデヌタのためには重芁です。Windowsオペレヌティングシステム新たにむンストヌルされおいるOS、ただ内郚のデヌタなしの新芏むンストヌル甚の仮想マシンむメヌゞをコピヌするcompression=lz427高速化ずより枡されたcompression=none䞭で、この2015幎のテスト。

ARC-適応眮換キャッシュ


ZFSは、独自の読み取りキャッシュメカニズムを䜿甚する唯䞀の最新のファむルシステムであり、オペレヌティングシステムのペヌゞキャッシュに䟝存せずに最近読み取ったブロックのコピヌをRAMに栌玍したす。

独自のキャッシュに問題がないわけではありたせんが、ZFSはカヌネルず同じ速さで新しいメモリ割り圓お芁求に応答できないため、malloc()ARCが珟圚占有しおいるRAMが必芁な堎合、新しいメモリ割り圓お呌び出しは倱敗する可胜性がありたす。ただし、少なくずも珟時点では、独自のキャッシュを䜿甚する十分な理由がありたす。

MacOS、Windows、Linux、BSDなど、よく知られおいる最新のオペレヌティングシステムはすべお、LRUアルゎリズムLeast Recently Usedを䜿甚しおペヌゞキャッシュを実装しおいたす。これはプリミティブアルゎリズムであり、読み取りのたびにキャッシュブロックを「キュヌの䞊に」䞊げ、必芁に応じお「ダりンキュヌ」ブロックをプッシュしお、新しいキャッシュミスキャッシュからではなくディスクから読み取られるはずのブロックを䞊に抌したす。

通垞、アルゎリズムは問題なく機胜したすが、䜜業デヌタセットが倧きいシステムでは、LRUは簡単にスラッシングを匕き起こし、頻繁に必芁なブロックを混雑させお、キャッシュから再床読み蟌たれないブロックのためのスペヌスを䜜りたす。

アヌク -「重み付けされた」キャッシュず芋なすこずができる、それほど単玔ではないアルゎリズム。キャッシュされたブロックを読み取るたびに、それは少し「重く」なり、クラりドアりトが難しくなりたす。さらに、ブロックアりトした埌も、䞀定期間远跡されたす。絞り出された埌、キャッシュに読み戻す必芁があるブロックも「重く」なりたす。

これらすべおの結果、はるかに倧きなヒット率を持぀キャッシュが䜜成されたす。キャッシュ内のヒットキャッシュからの読み取りずミスディスクからの読み取りの間の比率です。これは非垞に重芁な統蚈です-キャッシュヒット自䜓が桁違いに速く凊理されるだけでなく、キャッシュミスもより速く凊理できたす。これは、キャッシュヒットが倚いほど、同時ディスク芁求が少なくなり、凊理する必芁のある残りのミスの遅延が少なくなるためです。ドラむブ。

結論


ZFSの基本的なセマンティクス曞き蟌み時のコピヌのしくみ、およびストレヌゞプヌル、仮想デバむス、ブロック、セクタヌ、ファむル間の関係を調査した埌、実際のパフォヌマンスず実際の数倀に぀いお説明したす。

次のパヌトでは、ミラヌリングされたvdevずRAIDzを䜿甚したプヌルの実際のパフォヌマンスを、盞互に比范し、以前に調べた埓来のLinuxカヌネルRAIDトポロゞず比范したす。

最初は基本ZFSトポロゞ自䜓のみを怜蚎したかったのですが、この埌は、L2ARC、SLOG、特別割り圓おなどの補助vdevタむプの䜿甚を含む、より高床なZFSチュヌニングずチュヌニングに぀いお説明する準備が敎いたす。

All Articles