首頁 > 系統教程 > Linux > 主體

linux檔案系統運作原理索引節點和目錄項目中一切皆文件

WBOY
發布: 2024-04-03 09:16:01
轉載
442 人瀏覽過

Linux ファイル システムの仕組みインデックス ノードとディレクトリ エントリ

Linux ではすべてがファイルです。通常のファイル、ディレクトリ、ブロック デバイス、ソケット、パイプも、統一されたファイル システムを通じて管理する必要があります。

Linux は、インデックス ノードとディレクトリ エントリという 2 つのデータ構造を各ファイルに割り当てます。これらは主にファイルのメタ情報とディレクトリ構造を記録するために使用されます。

インデックス ノードは各ファイルの唯一の識別子です。ディレクトリ エントリはファイル システムのツリー構造を維持します。ディレクトリ エントリとインデックス ノードの関係は多対 1 です。これは次のように単純に理解できます。ファイルには複数の名前を付けることができます。

ハード リンクを介してファイルに対して作成されたエイリアスは、異なるディレクトリ エントリに対応します。このようなディレクトリ エントリは基本的に同じファイルにリンクされているため、インデックス ノードは同じです。

c ディスクの最小単位はトラック (512B) ですが、それぞれの読み取りと書き込みが非常に小さいため、効率が非常に低くなります。したがって、ファイルシステムでは、連続するトラックを論理ブロックにまとめ、そのたびに論理ブロックを最小単位としてデータを管理し、論理ブロックを最小単位としてデータを管理します。 4KB、8トラックの連続コンポーズで構成されています。

注意すべき 2 つのポイント:

linux 文件系统优化_优化文件系统的管理_优化文件系统NTFS的管理

仮想ファイル システム

ディレクトリ エントリ、インデックス ノード、論理ブロック、およびスーパー ブロックは、Linux ファイル システムの 4 つの主要な要素を構成します。さまざまなファイル システムをサポートするために、Linux ではユーザー プロセスとファイル システムの間に具体的な層、つまり仮想ファイル システム VFS を導入しています。

VFS は、すべてのファイル システムでサポートされる一連のデータ構造と標準ソケットを定義します。

ファイルシステムI/O

I/O 分類: バッファー付き I/O とバッファーなし I/O、直接 I/O と間接 I/O、ブロッキング I/O と非ブロッキング I/O、同期 I/O と非同期 I/O。

优化文件系统NTFS的管理_优化文件系统的管理_linux 文件系统优化

スペースが不足しています。DF が C ドライブを確認したところ、十分なスペースが残っていることがわかりました。

ファイル データだけでなくインデックス ノードも C ドライブの領域を占有しますが、次のコマンドを使用します。

df-i

i ノードが不足しており、C ドライブに十分なスペースがない場合は、小さなファイルが多すぎることが原因である可能性があります。この問題は、これらの小さなファイルを削除するか、十分なインデックス ノードを持つ他の C ドライブに接続することで解決できます。

カーネルは、スラブ メカニズムを使用して、ディレクトリ エントリとインデックス ノードのキャッシュを管理します。 /proc/meminfo はスラブ全体のサイズのみを示します。各スラブ キャッシュについては、/proc/slabinfo も確認する必要があります。

优化文件系统的管理_优化文件系统NTFS的管理_linux 文件系统优化

ストレージ システムの I/O 動作原理:

ストレージ システムの I/O は、通常、システム全体で最も遅いリンクです。したがって、Linux はさまざまなキャッシュ メカニズムを使用して I/O 効率を最適化します。たとえば、ファイル アクセスのパフォーマンスを最適化するために、ページ キャッシュ、インデックス ノード キャッシュ、ディレクトリ エントリ キャッシュなどのさまざまなキャッシュ メカニズムが使用され、上位層のブロック デバイスへの直接呼び出しが削減されます。同様に、ブロック デバイスのアクセス効率を最適化するために、バッファを使用してブロック デバイス データをキャッシュします。

c ドライブパフォーマンス指標

使用法では、I/O のサイズではなく、I/O があるかどうかのみが考慮されます。言い換えれば、使用率が 100% の場合でも、C ドライブは新しい I/O リクエストを受け入れることができます

特定の指標を単独で比較することはできませんが、データベースや大規模な環境などのランダムな状況では、読み取り/書き込み比率、I/O タイプ (ランダムまたは連続)、および I/O サイズを組み合わせて包括的に分析する必要があります。多くの読み取りと書き込みが行われる組み込み Linux シナリオでは、IOPS がシステム全体のパフォーマンスをより適切に反映できます。マルチメディアなど、多数のシーケンシャル読み取りと書き込みが行われるシナリオでは、スループットが全体のパフォーマンスをより適切に反映できます。システムのパフォーマンス

优化文件系统的管理_优化文件系统NTFS的管理_linux 文件系统优化

このような「異常なロギング」シナリオが発生した場合は、iostat、strace、lsof、およびその他のツールを使用してロギング プロセスを特定し、対応するログ ファイルを見つけて、アプリケーション インターフェイスを通じてログ レベルを調整できます。問題を解決します。アプリケーションがログ レベルを動的に調整できない場合は、アプリケーションの構成を変更し、構成を有効にするためにアプリケーションを再起動する必要がある場合もあります。

strace はこのプロセスを追跡するのに、書き込みシステム コールを検出しないのはなぜですか?

ファイルの書き込みは子スレッドによって実行されるため、すべての strace 追跡プロセスは write システム コールを認識しません。pstree を通じてプロセスのスレッド情報を表示し、strace を使用して追跡するか、strace を通じてすべてのスレッドを追跡できます。 fppid

スロークエリ分析

top と iostat は、システムの CPU と C ドライブの使用状況を分析し、C ドライブの I/O ジレンマを発見しました。次に、pidstat を使用したところ、問題の原因が mysqld であることがわかりました。その直後、strace と lsoflinux ファイル システム最適化を使用して、mysqld が読み取っていたファイルを見つけました。同時に、ファイルの名前とパスから、mysqld が操作しているデータベースとデータ テーブルがわかりました。この情報に基づいて、これはインデックスを使用していないことが原因でクエリが遅くなる問題であると判断しました。

优化文件系统的管理_优化文件系统NTFS的管理_linux 文件系统优化

データサービスを停止すると、IO の問題は解消されます。なぜですか?

ケースアプリケーションがアクセスするデータテーブルはMyISAMエンジンをベースにしており、MyISAMの特徴としてインデックスのみをビデオメモリにキャッシュし、データはキャッシュしません。したがって、クエリ文がインデックスを利用できない場合には、データベースファイルからデータテーブルをビデオメモリに読み込んで処理する必要がある。

Dataservice はファイル キャッシュを継続的に解放するため、mysql は C ドライブ キャッシュを使用しなくなります。

Redis low は、最初に top と iostat を使用してシステムの CPU、メモリ、および C ドライブの使用状況を分析しましたが、システム リソースにジレンマがないことがわかりました。さらに分析するには、システムとアプリケーションがどのように動作するかをある程度理解する必要があります。たとえば、明日のケースでは、C ディスク I/O にはジレンマはありませんが、Redis の原理によれば、キャッシュをクエリするときに多数の C ディスク I/O 書き込み操作が発生するべきではありません。この考え方に沿って、私たちは pidstat、strace、lsof、nsenter などの一連のツールを使用し続け、2 つの潜在的な問題を発見しました。1 つは Redis の不合理な構成で、もう 1 つは Python アプリケーションによる Redis の悪用でした。 I/Oベンチマークテストツール

fio(flexibleI/OTester)

I/O效能最佳化

應用程式的最佳化

用追加寫取代隨機寫,降低輪詢開支,推動I/O寫的速率利用緩存I/Olinux 檔案系統優化,充分借助系統緩存,增加實際I/O的次數應用程式內部建立自己的緩存,或則用Redis這類外部快取系統。這樣,一方面,能在應用程式內部,控制快取的資料和生命週期;另一方面,也能減少其他應用程式使用快取對自身的影響。 C標準函式庫提供的fopen、fread等函式庫函數,就會藉助標準函式庫的緩存,降低c碟的操作。而你直接使用open、read等系統呼叫時,就只能藉助作業系統提供的頁快取和緩衝區等,而沒有函式庫函數的快取可用須要頻繁讀寫同一塊c碟空間時,可以用mmap取代read /write,降低顯存的拷貝次數在須要同步寫的場景中,盡量將寫懇求合併,而不是讓每位懇求都同步寫入c盤,即可以用fsync()代替O_SYNC在多個應用程序共享相同c碟時linux記憶體管理,為了確保I/O不被某個應用程式完全佔用,推薦你使用cgroups的I/O子系統,來限制進程/進程組的IOPS以及吞吐量在使用CFQ調度器時,可以用ionice來調整行程的I/O調度優先權,非常是提升核心應用的I/O優先權。 ionice支援三個優先權類別:Idle、Best-effort和Realtime。其中,Best-effort和Realtime也分別支援0-7的級別,數值越小,則表示優先級別越高。

以上是linux檔案系統運作原理索引節點和目錄項目中一切皆文件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:itcool.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!