Linux 磁碟I O是怎麼工作的

2021-09-23 01:43:04 字數 1305 閱讀 3746

linux 磁碟i/o是怎麼工作的?

vfs 內部通過目錄項、索引節點、邏輯塊以及超級塊等資料結構,來管理檔案。

目錄項,記錄了檔案的名字,以及檔案與其他目錄項之間的目錄關係。

索引節點,記錄了檔案的元資料。

邏輯塊,是由連續磁碟扇區構成的最小讀寫單元,用來儲存檔案資料。

超級塊,用來記錄檔案系統整體的狀態,如索引節點和邏輯塊的使用情況等。

為了減小不同塊裝置的差異帶來的影響,linux 通過乙個統一的通用塊層,來管理各種不同的塊裝置。

通用塊層,是處在檔案系統和磁碟驅動中間的乙個塊裝置抽象層。它主要有兩個功能 。

第乙個功能跟虛擬檔案系統的功能類似。向上,為檔案系統和應用程式,提供訪問塊裝置的標準介面;向下,把各種異構的磁碟裝置抽象為統一的塊裝置,並提供統一框架來管理這些裝置的驅動程式。

第二個功能,通用塊層還會給檔案系統和應用程式發來的 i/o 請求排隊,並通過重新排序、請求合併等方式,提高磁碟讀寫的效率。

i/o請求排序的過程,即i/o 排程。linux 核心支援四種i/o排程演算法,分別是none、noop、cfq以及deadline。

第一種 none ,更確切來說,並不能算 i/o 排程演算法。因為它完全不使用任何i/o排程器,對檔案系統和應用程式的i/o其實不做任何處理,常用在虛擬機器中(此時磁碟i/o排程完全由物理機負責)。

第二種 noop ,是最簡單的一種 i/o 排程演算法。它實際上是乙個先入先出的佇列,只做一些最基本的請求合併,常用於 ssd 磁碟。

第三種 cfq(completely fair scheduler),也被稱為完全公平排程器,是現在很多發行版的預設 i/o 排程器,它為每個程序維護了乙個 i/o 排程佇列,並按照時間片來均勻分布每個程序的 i/o 請求。類似於程序 cpu 排程,cfq 還支援程序 i/o 的優先順序排程,所以它適用於執行大量程序的系統,像是桌面環境、多**應用等。

第四種 deadline 排程演算法,分別為讀、寫請求建立了不同的 i/o 佇列,可以提高機械磁碟的吞吐量,並確保達到最終期限(deadline)的請求被優先處理。deadline 排程演算法,多用在 i/o 壓力比較重的場景,比如資料庫等。

linux 儲存系統的 i/o 棧,由上到下分為三個層次,分別是檔案系統層、通用塊層和裝置層。

檔案系統層,包括虛擬檔案系統和其他各種檔案系統的具體實現。它為上層的應用程式,提供標準的檔案訪問介面;對下會通過通用塊層,來儲存和管理磁碟資料。

通用塊層,包括塊裝置 i/o 佇列和 i/o 排程器。它會對檔案系統的 i/o 請求進行排隊,再通過重新排序和請求合併,然後才要傳送給下一級的裝置層。

裝置層,包括儲存裝置和相應的驅動程式,負責最終物理裝置的i/o操作。

Linux 磁碟 I O是怎麼工作的

通用塊層 i o 棧 磁碟效能指標 磁碟 i o 觀測 程序 i o 觀測 介質分類 磁碟是可以持久化儲存的裝置,根據儲存介質的不同,可以分為兩類 機械磁碟和固態磁碟。機械磁碟 固態磁碟 介面分類 按照介面來分類,可以把硬碟分為 ide integrated drive electronics sc...

linux 高階IO 磁碟對映IO

儲存對映io 說明 在程序的棧中開闢一塊緩衝區將之與磁碟檔案相對應,對緩衝區的更改將自動寫入磁碟檔案,這樣就可以不在使用read和write的情況下執行io mmap函式 void mmap void addr,size t len,int prot,int flag,int filedes,off...

heartbeat是怎麼工作的

因為我們要提供 高可用性 所以要考慮到 導演 突然罷工的情形 因此我們要安排兩個導演,也 就是要有兩個排程伺服器節點。這兩個節點的地位不同,其中乙個是主節點,另外乙個是輔節點 可以看成是乙個 主導演 和乙個 副導演 這兩個節點正是 用heartbeat來互相監測對方的。heartbeat可以通過乙太...