Unix/linux/bsdunix固有のファイルシステムを検討:
ファイルシステムの作成中に使用するブロックサイズを選択/知るにはどうすればよいですか?特定のファイルシステムに対して最も効率的であると考えられる特定のファイルシステムの特定のブロックサイズ値はありますか?
ファイルシステムに大きなブロックサイズを選択しているとしましょう。明らかに、大きなファイルのデータを高速に読み書きします。小さいファイルの場合、スペースの断片化が発生します(間違っている場合は修正してください)。それでは、どのアプリケーションが一般に大きなfsブロックサイズを使用し、どのアプリケーションが小さなブロックサイズを使用するのでしょうか。
また、ブロックサイズを選択すると、使用するファイルシステムに違いが生じますか? FS 1つのFS(たとえばext3)の方がパフォーマンスは良く、他のFS(たとえばext2またはvxfsまたは同じosの任意のfs)の場合はそれほど良くありませんか?
ブロックサイズは、メモリとストレージが貴重なものであったため、データへのポインタでさえサイズを最適化する必要があった昔のファイルシステムの成果物の一種です。 MS-DOSは初期のバージョンのFATに12ビット幅のポインタを使用していたため、最大2 ^ 12 = 4096のブロック(またはファイル)を管理できました。ファイルシステムの最大サイズは本質的に(max_block_size)
バツ (max_block_number)
、「正しい」ブロックサイズは、ファイルシステムの合計サイズと、より大きなブロックサイズを選択することで無駄になるスペースの量を考慮する必要がある問題でした。
最近のファイルシステムは48ビット(ext4)、64ビット(NTFS、BTRFS)、または128ビット(ZFS)のポインターを使用するため、巨大な(ブロック数の)ファイルシステムを可能にし、ブロックサイズの選択が可能になりました。特定のアプリケーションがあり、それを最適化したい場合を除き、重要な問題は少なくなります。例は
特にext2/3を要求したように、32ビットポインターを使用したかなり古いファイルシステムなので、大きなデバイスでは、同じの最大ファイルシステムサイズを実行する必要がある場合があります。スペースの無駄」先ほど書いた考察。
ファイルシステムのパフォーマンスmightは、単一のファイルに使用される多数のブロックの影響を受けるため、より大きなブロックサイズが有効な場合があります。具体的には、ext2には、inodeおよび多数のブロックを消費するファイルで直接保存できる、かなり限られた数のブロック参照があります リンクリストの4つの層から参照する必要があります :
したがって、明らかに、ブロック数が少ないファイルは、参照レイヤーが少なくて済むため、理論的にはより高速なアクセスが可能になります。そうは言っても、インテリジェントキャッシングは、実際にはこの問題のパフォーマンス面のほとんどをカバーする可能性があります。
より大きなブロックを支持してよく使用される別の引数は、fragmentationです。 (ログやデータベースのように)継続的に増大するファイルがある場合、ファイルシステムのブロックサイズを小さくすると、ディスク上のデータの断片化が増加し、連続して読み取られるデータのチャンクが大きくなる可能性が低くなります。これは本質的には真実ですが、複数のプロセス(トレッド/ユーザー)にサービスを提供するI/Oサブシステムでは、汎用アプリケーションではシーケンシャルデータアクセスがありそうもないことを常に覚えておく必要があります。ストレージを仮想化した場合はなおさらです。したがって、一部のコーナーケースを除いて、フラグメンテーション自体は、より大きなブロックサイズを選択する理由として十分ではありません。
すべての常識に当てはまる一般的な経験則として、FS実装では、特定の理由がない限り、ブロックサイズをデフォルトのままにしておく必要があります。 (または、より良いのは、テストデータが示す)デフォルト以外のブロックサイズを選択することによるあらゆる種類の利点
SSDを組み込んだより最近のシステムでは、最近作成されたSSDは、主にSSDが使用するNANDフラッシュページのサイズが少なくとも4Kであるため、512Bブロックサイズよりも4Kブロックサイズの方がはるかに優れています。