3

ファイルシステムのプロトタイピングのベスト プラクティスは何ですか?

私はfusepyを使用して Python で試みましたが、今は興味があります:

  • 長期的には、立派なファイルシステムの実装を C で行うべきでしょうか? Camper の移植性を妨げたり、最終的にパフォーマンスの問題を引き起こしたりすることはありませんか?
  • FUSE のような他の実装はありますか?
  • コア ファイルシステム テクノロジ (fat32、ext3、ntfs、その他はすべて小さな魚) の動きが遅いようですが、どのようなデバッグ手法が採用されていますか?
  • 主要な OS で高度に最適化され、完全にサポートされた実装に到達するためにファイルシステム開発が取る一般的なコースは何ですか?
4

4 に答える 4

4

ユーザー空間に存在するファイルシステム (FUSE またはその Mac バージョンにあるファイルシステム) は確かに非常に便利ですが、カーネル空間に存在する (したがって C でなければならない) 従来のファイルシステムと同じパフォーマンスは得られません。A. タネンバウムが Minix メーリング リストの有名な投稿で Linux を攻撃した際にはっきりと述べたように、マイクロカーネル システム (ファイルシステムやその他のものがユーザー空間に存在する場所) が実際に「モノリシック カーネルを置き去りにする」ことは決してなかったのは、このためだと言えます。 20 年前 (CS の教授として、彼は自分の OS にモノリシック アーキテクチャを選択したことで Linus を失望させるだろうと言いました。Linus はもちろん元気よく反応し、そのやり取り全体が今ではかなり有名になり、Web 上の多くの場所で見つけることができます。 ;-)。

おそらく、非常に限られた量のメモリを備えた「組み込み」デバイスをターゲットにしている場合を除き、移植性は実際には問題ではありません-そのようなデバイスを除いて、Cを実行できる場所でPythonを実行できます(どちらかといえば、FUSEの可用性ですPython ランタイムの制限ではありません)。しかし、パフォーマンスは間違いなく可能性があります。

于 2010-07-27T05:52:40.543 に答える
2

長期的には、立派なファイルシステムの実装を C で行うべきでしょうか? Camper の移植性を妨げたり、最終的にパフォーマンスの問題を引き起こしたりすることはありませんか?

必ずしもそうとは限りませんが、C とは異なる実行言語がたくさんあります (O'Caml、C++ が最初に思い浮かびます)。実際、NTFS は C++ で記述されることを期待しています。あなたは Linux 出身のようですが、Linux カーネルは C で書かれているため、カーネルにマージされるファイルシステムもすべて C で書かれている必要があります。

FUSE のような他の実装はありますか?

たとえば、さまざまな成熟度レベルのhttp://code.google.com/p/winflux/http://dokan-dev.net/en/のように、Windows 用にいくつかあります。

コア ファイルシステム テクノロジ (fat32、ext3、ntfs、その他はすべて小さな魚) の動きが遅いようですが、どのようなデバッグ手法が採用されていますか?

繰り返しますが、これは Windows ではほぼ当てはまります。Solarisでは ZFSがあり、Linux ではext4btrfs が存在します。通常、デバッグ手法では、さまざまな操作の途中でマシンの電源を切り、データがどのような状態で残っているかを確認し、大量のデータを保存してパフォーマンスを確認します。

主要な OS で高度に最適化され、完全にサポートされた実装に到達するためにファイルシステム開発が取る一般的なコースは何ですか?

繰り返しますが、これは OS によって異なりますが、特に障害によってデータが失われないことを確認するために、かなりの量のテストが必要です。

于 2010-07-27T05:51:00.967 に答える
1

カーネル ブロック デバイス API レイヤーのモック オブジェクトを作成することをお勧めします。モック レイヤーはmmap、ファイル システムのバッキング ストアとして 'd ファイルを使用する必要があります。これを行うことには多くの利点があります。

  1. 単体テスト ケースを実行するための非常に高速な FS パフォーマンス。
  2. デバッグ コード/ブレーク ポイントをモック レイヤーに挿入して、障害状態をチェックする機能。
  3. 調査やテスト ケースの実行のために、ファイル システムの状態の複数のコピーを簡単に保存できます。
  4. ファイル システムが処理する必要があるブロック デバイス エラーまたはその他のシステム イベントを決定論的に導入する機能。
于 2010-08-03T21:50:42.027 に答える
0

立派なファイルシステムは高速で効率的です。Linuxの場合、これは基本的にCでの書き込みを意味します。これは、カーネルが配布されていない場合は真剣に受け止められないためです。

Fuseのような他のツールに関しては、MacFUSEがあります。これにより、LinuxだけでなくMacでも同じコードを使用できるようになります。

于 2010-08-03T21:56:10.893 に答える