私は昨日、OSXについてこれに似たものを読んでいて、それはファイルシステムの圧縮です-基本的に答えは圧縮したいものを中心に展開しています-この例では、彼は「FAT」データについて話しています。ファイル構造、プロパティ、メタデータなどをまとめて保存すると、スペースを節約するために圧縮して、各ファイルのデータを見つけるためにあらゆる場所で頭を探すよりも速くCPUに読み込むことができます...
しかし、圧縮は単にディスク容量を節約するだけではありません。これは、I / Oレイテンシと帯域幅を削減するためにCPUサイクルをトレードする典型的な例でもあります。過去数十年の間に、CPUパフォーマンスはディスクパフォーマンスの増加よりもはるかに速い速度で向上しました(そしてコンピューティングリソースはさらに豊富になり、後で詳しく説明します)。最新のハードディスクシーク時間と回転遅延は、ミリ秒単位で測定されます。1ミリ秒で、2 GHz CPUは200万サイクルを通過します。そしてもちろん、考慮すべき実際のデータ転送時間はまだあります。
確かに、OSとハードウェア全体のいくつかのレベルのキャッシュは、これらの遅延を隠すために強力に機能します。しかし、それらのビットは、それらのキャッシュを満たすために、ある時点でディスクから外れる必要があります。圧縮とは、転送する必要があるビットが少なくなることを意味します。現代のマルチコアMacの通常の使用におけるほぼコミカルなCPUリソースの過大を考えると、圧縮されたペイロードをディスクから転送し、CPUを使用してその内容をメモリに解凍するのに必要な合計時間は、通常、時間よりもはるかに短くなります。非圧縮形式でデータを転送するには時間がかかります。
これにより、転送するデータが少なくなることによる潜在的なパフォーマンス上の利点が説明されますが、ファイルの内容を格納するために拡張属性を使用すると、実際に高速化することもできます。それはすべてデータの局所性に関係しています。
大量のデータを転送するよりもハードディスクの速度が低下する原因が1つある場合、それはディスクのある部分から別の部分にヘッドを移動しています。すべての移動とは、ヘッドが移動を開始してから停止し、目的の位置に正しく配置されていることを確認してから、回転するディスクが目的のビットをその下に置くのを待つ時間を意味します。これらはすべて実際の物理的な可動部分であり、彼らが彼らと同じくらい速くそして効率的に彼らのダンスをするのは驚くべきことですが、物理学には限界があります。これらのモーションは、ハードディスクなどの回転ストレージの真のパフォーマンスキラーです。
HFS +ボリューム形式は、ファイルに関するすべての情報(メタデータ)をディスク上の2つの主要な場所に格納します。ファイルの日付、権限、所有権、およびその他のホストを格納するカタログファイルと、「名前付きフォーク」を格納する属性ファイル」
HFS +の拡張属性は、属性ファイルで名前付きフォークとして実装されます。ただし、非常に大きくなる可能性がある(ファイルシステムでサポートされる最大ファイルサイズまで)リソースフォークとは異なり、HFS +の拡張属性は「インライン」で属性ファイルに格納されます。実際には、これは属性ごとに約128バイトの制限を意味します。ただし、実際のデータを取得するためにディスクヘッドがディスクの別の部分に移動する必要がないことも意味します。
ご想像のとおり、カタログファイルと属性ファイルを構成するディスクブロックは頻繁にアクセスされるため、ほとんどの場所でキャッシュ内にある可能性が高くなります。これらすべては、データのメタデータを含むファイルの完全なストレージをBツリー構造のカタログファイルと属性ファイル内に完全に格納することで、全体的なパフォーマンスを向上させます。25バイトに膨らむ8バイトのペイロードであっても、それが通常のデータストレージのアロケーションブロックサイズよりも小さく、すべてが属性ファイルのBツリーノード内に収まる限り、問題にはなりません。とにかく、OS全体を読み取る必要があります。
Snow Leopardのディスクフットプリントの削減には他にも大きな貢献があります(たとえば、不要なローカリゼーションと "designable.nib"ファイルの削除)が、HFS +圧縮は、技術的に最も興味深いものです。