zz``ディスクレイアウトとファイルシステムのI / Oマッピング

sysnote.org/2015/08/06/fs-io-map/

ダニエルは、あなたが収集することができ、この良いブログや研究の下に広がります

本論文では、プロファイリングをカーディングディスクレイアウトファイルシステムでは、ファイルシステムを解析し、これに基づいてI / OをブロックするためのI / Oマッピング機構。

1.ファイルシステムのディスクレイアウト

ファイルとブロックデバイスとの間の関係を説明するために、まず、ファイル・システム・レベル。

1.1ファイルディスクリプタとiノード

ファイルへのアクセスが最初の各プロセスに対応し、カーネルで、ファイルを開きます。アプリケーションは、ファイルディスクリプタ・テーブルは、プロセスがファイルを開くことを示しているが存在しますが、ユーザプログラムは直接カーネルファイルディスクリプタテーブルにアクセスするが、唯一のことはできませんあなたは、ファイル記述子インデックスと呼ばれるインデックスファイルディスクリプタテーブル(整数)を、使用することができます。ファイルを開くか、新しいファイルを作成するために開い呼び出すと、カーネルはファイルディスクリプタを割り当て、ユーザプログラム、新しくオープンしたファイルへのファイルディスクリプタテーブルのエントリポインタに戻りました。

各ファイル記述テーブルが開いて、ファイルのデータ-fileオブジェクト記述ファイルのブロックへのポインタである場合、プロセスは、ファイルを開くと、などを読み取り、位置を書き込み、重要オブジェクト情報ファイルオープンモードを記述するカーネルは新しいファイルオブジェクトを作成します。オブジェクト・ファイルが排他的プロセスではない、ということに注意してください、異なるファイルディスクリプタテーブルポインタの処理は、このように開いているファイルを共有し、同じファイルオブジェクトを指すことができます。ファイルオブジェクトは、同じファイルのプロセスを共有するオブジェクトには影響しません参照カウント、ファイルディスクリプタのレコード番号は、参照カウントが0である場合にのみ、カーネルはプロセスがファイルを閉じ、ファイルオブジェクトを破壊し、オブジェクトを参照しています。

ファイルオブジェクトは、オブジェクトのdentryへのポインタが含まれています。dentryオブジェクトは、ファイルを複数回開いている場合、それは複数のファイルオブジェクトを作成し、同じのdentryオブジェクトへの彼らのすべてのポイントになる、パスを別のファイル・パスを表します。iノードオブジェクトは、オブジェクトのinodeは、ファイルシステムタイプ、ファイルを動作させる方法であって、ファイルのパーミッション、アクセス日時、ファイルの最終的な動作に必要なすべての情報が含まれ、別のファイルを表しています。

iノード

1.2ファイルシステムのディスクレイアウト

物理ブロック間の特定のファイルのマッピング関係を記載するために、ファイルのinode後の対応関係を理解する上で、ファイルシステムは、ディスクレイアウトことを理解しなければなりません。図は、EXT2 / EXT3ファイルシステムのディスクレイアウトです。ext3ファイルシステムパーティション、または彼らは、ブロックの異なるグループに(ブートブロックを除く)のディスクブロックを管理します。同じ大きさの各ブロックグループは、もちろん、ブロック群管理の最後のブロックは、そのサイズがファイルシステムのブロックサイズに応じて、ファイルシステムが作成されるときに決定され、以下であってもよいです。各ブロックは、データブロックにファイルデータを格納するためのiノードテーブルを説明するためのブロックビットブロック、ビットのinodeブロック、一つ以上のブロックのグループを含み、加えて、スーパーブロックを含み、すべてのよいですブロックグループディスクリプタテーブル。ビットに対応するブロックが割り当てられていないブロックの代わりに、次に、設定されていない場合、ブロックによって管理ブロック群の状態を説明するためのビット割り当てブロック図は、使用のために割り当てられてもよいです。iノードの割り当てビットマップは、一意の番号、inodeはファイルシステム内の各iノードに対応し、iノード管理グループのブロックの状態を記述するために使用される場合、分配されたiノードを表すビットマップの対応ビット、;そうでなければ、使用することができるが。
fs2disk

1.3論理ファイルシステムブロックマッピング

ここでは、物理ファイルブロックとの間のマッピング関係を説明するためのものです。
EXT2 / EXT3 +これらの間接アドレスマッピングを格納するための直接的な方法使用:0〜11を前記格納ユーザーデータの物理ブロック番号(ダイレクトアドレッシング)、12は、アドレスマッピングテーブルデータに記憶されている物理ブロックアドレス(A間接的には、さらに、アドレスマッピングテーブル内の物理ブロック番号であり、それぞれが、)アドレッシング。2つのアドレスマッピングテーブル13を格納するアドレス、アドレスマッピングテーブル14は3つのアドレス。それは、間接的な非効率的な何回も通過するための小さなファイル、大きなファイルのためにこのようにして、より適切な。[logicalStartBlock、physicalStartBlock、blockCount]:ext4のは、エクステント・マッピング・モード中に使用されます 。ext4のiノード・サイズは256バイトであるので、iノード限られた範囲に対応することができるファイルがある程度増加すると程度は配列に格納することができない、それは、B +ツリーの形式で格納されます。ext3に比較の間接的な方法をマッピングし、効率を高め、大きなファイルは、ファイルを分割減らす方法をエクステント。上記で説明を通じて、我々は物理ブロック間の特定のファイルとの対応関係が、その後、問題が発生することを知っている:ユーザー4KBのサイズをファイルを書き込むためにI / O、ディスクはO I /のためにあるのですか?直接的な方法であれば?ユーザーが16キロバイトI / Oそれの大きされている場合は?ここではI / Oマッピングメカニズムをブロックするために、ファイルI / Oから説明します。
EXT3マップ

ext4のマップ

2. I / OマッピングをブロックするファイルI / Oを

ブロックサイズ(典型的には、512,1024,2048,4096バイト)ファイルシステムを指定作成する場合、ファイルは、各論理ファイルシステムのブロックサイズのサイズに応じてブロックに分割されたファイルを切断され、ファイルシステムがアイドルこれらの論理ブロックに割り当てられます物理ブロック(ext4ファイルシステムは、遅延が割り当てられている)、ファイルシステムのファイルを読み書きするユーザプログラムで要求処理ブロック層に発行された、対応する論理ブロックに係る特定の物理ブロックを見つけ、IOう。

用户调用read()或write()系统调用进行io读写时,对应的缓冲区buf是用户进程空间的虚拟地址,在内核处理时将虚拟内存映射到到物理内存页。如果是缓存I/O,会经过用户缓冲到内核缓存(page cache)的拷贝,而Direct I/O则可以直接让内核态映射用户态虚拟内存对应的物理页,少了一次拷贝的过程。在从文件I/O到块I/O的映射处理过程中,缓存I/O的刷脏页和Direct I/O的方式类似,这里以Direct I/O进行简要分析,详细的可以去看内核代码里的submit_page_action,__bio_add_page等函数的实现。

用户程序在使用Direct I/O时,使用的buffer和读写的长度需要512字节的整数倍对齐,之所以这样要求,是因为非对齐的请求在底层构造bio时有可能会因为PageSize边界带来额外的I/O,从而需要多次下发请求,降低了效率。

一个文件I/O下发到底层会变成多少个块I/O,取决于文件系统块大小和用户缓冲区的对齐长度,以及该文件的逻辑块对应的物理块是否连续。下面以具体的例子来进行说明。
1)文件系统块大小是1KB ,用户发起一个4KB的请求,申请的buffer在一个页中(或者direc io下的按照4KB对齐)。图中绿色和红色方块里的数字表示对应的真实的物理块的块号,要读写的这个文件的4KB的数据,按照文件系统块大小切分,分成4个逻辑块(0~3),其中逻辑块0对应物理块60,逻辑块1对应物理块61,逻辑块2对应物理块200,逻辑块3对应物理块201(这些对应关系是由文件系统分配块时确定的)。逻辑块0和1对应的物理块是连续的,并且因为块大小是1KB,所以可以放在一个bio里,而逻辑块2和3对应的物理块与逻辑块0和1的物理块不连续,所以不能放在一个bio里,需要新生成一个bio。这样就调用了两次submit_bio下发到通用块层去处理,经过调度层(有可能和其他请求连续,从而进行合并),最后通过块设备驱动层下发到底层磁盘上。
ブロックされ-1kb_4kb-IO-ページ内
2)文件系统块大小是1KB, 用户发起一个4KB的请求,申请的buffer不在一个页中(或者direc io下的按照1KB对齐)。请求落到两个页中,并且因为逻辑块2和逻辑块3对应的物理块不连续,所以构造bio时变成了3个bio(如果两个页中的逻辑块对应的物理块是连续的,则会放到一个bio里,每个bio可以包含多个页)。因此就会有3次submit_bio的调用。
ブロックは-1kb_4kb-IO-ないインページです
3)文件系统块大小是4KB ,用户发起一个4KB的请求,申请的buffer在一个页中(或者direc io下的按照4KB对齐)。这里刚好一个页里只有1个逻辑块,所以只有一次submti_bio。
ブロックされ-4kb_4kb-IO-ページ内
上記解釈部のいくつかの例I / Oは、底部に送られた次のファイルの終わりに上昇3つの問題は、ブロックの数は、I / O、ファイルシステムのブロックサイズ及びユーザバッファの長さに応じて整列されているとなり、そしてファイルかどうかを連続物理ブロックに対応する論理ブロックです。

3.参照

1.「Linuxカーネルの深い理解」
2.「Linuxデバイスドライバ」
3.「高度なUNIXプログラミング環境」
4.Linuxカーネルソース3.10.45


 

おすすめ

転載: www.cnblogs.com/xiaodoujiaohome/p/11649833.html