1

ext3ファイルシステムを変更しようとしています。基本的に、ファイルのiノードがメタデータを格納するファイルと同じ(または隣接する)ブロックに保存されるようにします。うまくいけば、これはディスクアクセスのパフォーマンスに役立つはずです

カーネルソースを取得してコンパイルし、inodeに関する情報をたくさん読んで、fsサブディレクトリにあるinode.cファイルを調べました。ただし、作成中の新しいファイルと、このファイルのiノードを同じブロックまたは隣接するブロックに確実に保存する方法がわかりません。さらなる読み物への助けやポインタをいただければ幸いです。ありがとう!

4

2 に答える 2

0

ファイルシステムの設計に入ってくれてありがとう!

まず、ハッキングに深く入り込む前に、技術的なアドバイスを少し。ext3 ツリーのコピーを作成し、ファイル システムの名前を別のものに変更します。私は、ファイル システムに実験的な変更を導入するとき、それをメイン システムに使用したくないと思っていることを発見しました。ファイルをランダムに失うバグを導入した場合でも、システムは起動するはずです (最終的には発生します)。また、新しいシステムで作業するには、ext3 ユーザー空間ツールを分岐する必要があります。

次に、 Understanding the Linux Kernel, 3 edのコピーを入手してください。Bovet と Cesati による。カーネル サブシステムの体系的なビューを提示しており、その説明は価値があることがわかりました。これは古いカーネル (x < 15 の場合は 2.6.x; 正確には忘れました) 用に書かれています多くの場所で依然として正確です。ファイルシステムの説明を読んでください。私はそれがext3をカバーしていると信じています。

第三に、実際のプロジェクトについては、ext3 への単純な変更を提案していません。そのファイル システムには、i ノード番号をディスク ブロックにマッピングする非常に簡単な方法があります。このマッピングを行う新しい方法を見つける必要があります。ext3 の残りの部分が変更されることはないと思います。この課題を解決することは、アーキテクチャの重要な設計ポイントの 1 つになる場合があります。i ノード -> ディスク ブロック マップの大きな配列を維持しても問題は解決しないことに注意してください。おそらく、既存の ext3 よりも優れているわけではありません。

于 2010-12-11T06:51:16.623 に答える
0

興味深いアイデアです。

私は ext3 に詳しくありませんが、いくつかの一般的な指針を示すことができます。

現在、ext3 は inode を所定の場所に格納します。各ブロック グループには、inode の配列である独自の inode テーブルがあります。そのため、i ノード番号がある場合 (つまり、ディレクトリ内のファイル名を検索した結果として)、最初に i ノード番号を使用して正しいブロック グループを選択し、次にそのブロックにインデックスを付けると、ディスク上で対応する i ノードを見つけることができます。グループの inode テーブル。

対応するファイル データの隣に i ノードを配置する場合は、ディスク上で i ノードを見つけるための新しいスキームが必要になります。各 i ノード専用のブロックを用意する場合、考えられる 1 つの方法は、i ノードが必要になるたびに新しいブロックを割り当て、そのブロック番号を i ノード番号として使用することです。これには、小さなファイルの場合、データを同じブロックに格納できるという利点がある場合があります。

このようなことを実現するには、新しいファイルの作成 (i ノードの割り当て) が、現在の ext3 ファイル システムとはまったく異なる方法で行われる必要があります。ビットマップを使用して、未使用で事前に割り当てられ、事前に初期化された inode を見つける代わりに、空のブロックを割り当てて自分で初期化する必要があります。そのため、ファイル システムがファイルへの書き込み時にどのようにブロックを割り当てるかを確認し、それを模倣して i ノードを割り当てることをお勧めします。

別の方法として、i ノードをディレクトリに格納する方法があります。したがって、I/O を保存するのは、inode がそのデータの隣にあるからではなく、ファイル名を検索するときに inode も読み取るためです。これは 90 年代に BSD の FFS ファイル システムの実験として行われ、優れたUSENIX 論文にまとめられました。これらのアイデアは FFS にも、私が知っている他のメイン ストリーム ファイル システムにも反映されていません。

これらのスキームのいずれかを追求するか、独自のものを考え出すかに関係なく、mke2fsを変更して、新しいファイル システム バリアントが理解できる方法でディスク上のファイル システムを初期化する必要もあります。

幸運を!楽しいプロジェクトのようですね。

于 2010-12-06T02:19:08.313 に答える