pdflush、kjournald、swapdなどはどのように相互運用しますか?


17

最近、この考えを引き起こした質問を見ました。ここでも、Googleマシンでも答えが見つかりませんでした。基本的に、カーネルI / Oアーキテクチャがどのように階層化されているかを知りたいと思っています。たとえば、kjournaldディスパッチするpdflushか、その逆ですか?私の仮定は、pdflush(大容量記憶装置I / Oにより一般的である)低レベルに位置し、実際に書き込みを実行するために必要なSCSI / ATA /その他のコマンドをトリガーし、書き込みkjournald前に高レベルのファイルシステムデータ構造を処理することです。しかし、kjournaldファイルシステムのデータ構造と直接インターフェースをpdflush取り、時々目を覚まして、ダーティページキャッシュページをデバイスに書き込むことで、逆の方法でそれを見ることができましたkjournald。また、他の何らかの理由でこの2つがまったく相互作用しない可能性もあります。

基本的に、Linuxカーネル内の大容量ストレージにI / Oをディスパッチするために使用される基本的なアーキテクチャを視覚化する方法(グラフまたは単なる説明)が必要です。


1
これはあなたが探しているものですか?oss.org.cn/ossdocs/linux/kernel/a1/index.html
slm

1
また、このプレゼンテーションがあります:7番目のスライド:slideshare.net/LukCzerner/local-file-systems-update
slm

1
私も見つけ、この図があります:thomas-krenn.com/en/oss/linux-io-stack-diagram/...
SLMは

1
カーネルのさまざまなコンポーネントがどのように連携するかを示すのに役立つこの対話型カーネルマップを見つけました。makelinux.net
slm

1
もう1つのリソース、19〜24ページ:Linuxのパフォーマンスとチューニングのガイドライン。これはまさにあなたが探しているもののように見えます。
slm

回答:


21

pdflushkjournald, andkswapd` の詳細を説明する前に、Linuxカーネルに関して正確に話している内容の背景について少し説明しましょう。

GNU / Linuxアーキテクチャ

GNU / Linuxのアーキテクチャは、2つのスペースと考えることができます。

  • ユーザー
  • カーネル

間でユーザ空間カーネル空間は、 GNU Cライブラリ(座っていますglibc)。これにより、カーネルをユーザー空間アプリケーションに接続するシステムコールインターフェイスが提供されます。

カーネルスペースは、さらに3つのレベルに分割できます。

  • システムコールインターフェース
  • アーキテクチャに依存しないカーネルコード
  • アーキテクチャ依存コード

システムコールインターフェイスは、その名前が示すとおり、glibcカーネルとカーネル間のインターフェイスを提供します。建築独立したカーネルコードは、このようなVFS(仮想ファイルシステム)とVMM(仮想メモリ管理)などの論理ユニットで構成されています。アーキテクチャに依存するコードは、特定のハードウェアアーキテクチャのプロセッサとプラットフォーム固有のコードである成分です。

GNU / Linuxアーキテクチャの図

                                 gnu / linux archのss。

この記事の残りの部分では、カーネルスペース内のVFSおよびVMM論理ユニットに注目します。

GNU / Linuxカーネルのサブシステム

                                    カーネルcomのss

VFSサブシステム

GNU / Linuxカーネルがどのように構成されているかについての高レベルの概念があれば、VFSサブシステムをもう少し深く掘り下げることができます。このコンポーネントは、物理デバイス(HDD /など)上のファイルシステム(ext3 / ext4 / etc。)に最終的にマップされるさまざまなブロックストレージデバイスへのアクセスを提供します。

VFSの図

ss of vfs

この図はwrite()、ユーザーのプロセスからVFSを通過し、最終的にデバイスドライバーに到達して物理ストレージメディアに書き込まれる方法を示しています。これは私たちが遭遇する最初の場所pdflushです。これは、ダーティデータとメタデータバッファブロックをバックグラウンドでストレージメディアにフラッシュするデーモンです。この図には示されていませんが、別のデーモンがありますkjournald。これはpdflush、サイドに並んで、ダーティジャーナルブロックをディスクに書き込む同様のタスクを実行します。注:ジャーナルブロックは、ext4やJFSなどのファイルシステムが、ファイル内のディスクへの変更を、それらの変更が行われる前に追跡する方法です。

上記の詳細は、このペーパーでさらに説明します。

write()手順の概要

I / O sybsystem操作の簡単な概要を提供するために、write()ユーザースペースアプリケーションによって関数が呼び出される例を使用します。

  1. プロセスは、write()システムコールを介してファイルの書き込みを要求します。
  2. カーネルは、ファイルにマップされたページキャッシュを更新します。
  3. pdflushカーネルスレッドは、ページキャッシュをディスクにフラッシュします。
  4. ファイルシステムレイヤーは、各ブロックバッファーをaにまとめbio struct23ページの1.4.3、「ブロックレイヤー」を参照)、ブロックデバイスレイヤーに書き込み要求を送信します。
  5. ブロックデバイスレイヤーは、上位レイヤーからリクエストを取得し、I / Oエレベータ操作を実行して、リクエストをI / Oリクエストキューに入れます。
  6. SCSIなどのデバイスドライバーまたは他のデバイス固有のドライバーが書き込み操作を処理します。
  7. ディスクデバイスファームウェアは、シークヘッド、回転、およびプラッター上のセクターへのデータ転送などのハードウェア操作を実行します。

VMMサブシステム

さらに深く掘り下げて、VMMサブシステムを調べることができます。このコンポーネントは、メインメモリ(RAM)、スワップ、および物理ストレージメディア間の一貫性を維持する役割を果たします。一貫性を維持するための主要なメカニズムはbdflushです。メモリのページはダーティと見なされるので、記憶媒体上のデータと同期する必要があります。デーモンbdflushと調整しpdflushて、このデータをストレージメディアと同期します。

VMMの図

                VMMのss

スワップ

システムメモリが不足するか、カーネルスワップタイマーが切れると、kswapdデーモンはページを解放しようとします。だから、長い空きページ数は、上記のままでfree_pages_highkswapd何もしません。ただし、空きページの数が下に下がるkswapdと、ページの再利用プロセスが開始されます。kswapd再配置のためのページをマークした後bdflushpdflushデーモンを介して、記憶媒体への未解決の変更を同期するように注意します。

参考資料と詳細資料


1
これを回答として受け入れ、賞金を授与するまで1日待って、賞金が「賞金」ページに残るようにします。そうすれば、それを以前に見たことがある人なら誰でもすぐに答えがあることに気付くことができます。
ブラッチリー

1
どうもありがとう、ところで。あなたは本当にこれを研究することに全力を尽くしました。
ブラチリー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.