Linux核心學習筆記十一——I/O層和I/O調度機制

來源:互聯網
上載者:User
一 塊I/O基本概念

字元裝置:按照字元流的方式被有序訪問的裝置。如串口、鍵盤等。

塊裝置:系統中不能隨機(不需要按順序)訪問固定大小的資料片(chunk 塊)的裝置。

    如:硬碟、磁碟片、CD-ROM磁碟機、快閃記憶體等。都是通過以安裝檔案系統的方式使用。

塊裝置的組成:

       扇區:是塊裝置中最小的可定址單元(常見大小512位元組);是塊裝置的基本定址和操作單元。

       塊:是檔案系統最小邏輯可定址單元,檔案系統的抽象,只能通過塊訪問檔案系統。通常包含多個扇區。

 

  當一個塊被調入記憶體時(讀入後或等待寫出時),它要儲存在一個緩衝區中;每個緩衝區與一個塊對應,

緩衝區相當於是磁碟塊在記憶體中的表示;塊大小不超過一個頁面,一個頁可以容納一個或多個記憶體中的塊。

       緩衝區:是核心操作塊裝置的邏輯單元,每個緩衝區需要一個描述符來表示塊的控相關制資訊。

資料結構:緩衝區頭 buffer_head,核心操作I/O塊基本容器是:bio。操作核心中所有的緩衝區對應的I/O塊。

       請求隊列:塊裝置將他們掛起的塊I/O請求儲存在請求隊列中。

二 I/O調度機制

       簡單的以核心產生I/O請求的次序直接將請求發向塊裝置,造成效能將難以接受。因為磁碟定址是整個電腦中

最慢的操作之一,每一次定址定位硬碟磁頭到特定塊上某個位置需要花費不少時間;要提高I/O操作效能,盡量縮短磁碟定址時間。

       在提交請求到塊裝置前,核心需要對請求進行處理:先執行合并與排序的預操作——I/O調度機制子系統,負責I/O請求的提交。

       I/O發送器管理塊裝置的請求隊列,決定隊列中的請求排列順序,何時派發請求到裝置。以減少磁碟定址時間,提高全域輸送量。

其實現的方法是合并與排序:

合并:將兩個或多個請求結合成一個新的請求,比如訪問磁碟扇區相鄰時,合并為一個對單個和多個相鄰磁碟扇區操作的新請求。

   合并後僅需要一次請求一條定址命令。

排序:沒有相鄰操作扇區請求時,但可能是比較接近的;將整個請求隊列按扇區增長方向有序排列,操作時保持磁頭以直線一個

     方向移動,縮短請求磁碟定址時間。

三 發送器實現

1 Linus Elevator

       當一個請求加入到隊列時:

如果隊列已存在一個對相鄰磁碟扇區操作的請求,將新請求和這個已存在的請求合并成一個請求。

如果隊列中存在一個駐留時間過長的請求,將新請求插入到隊列尾部,防止請求發生饑餓。

如果隊列中以扇區方向為序存在合適插入位置,將新請求插入到該位置,與被訪問磁碟物理位置為序排列。

如果隊列不存在合適位置插入,將請求插入到隊列尾部。

 

2 最終期限I/O發送器

Linus Elevator發送器存在使請求發生饑餓的情況:

  l  對某個磁碟地區繁重操作,使得磁碟其他位置上的操作請求得不到運行;

  l  同一位置順序上的請求流可以造成較遠位置請求得不到運行;

  l  寫操作和提交應用程式是非同步執行,讀操作和提交應用程式是同步執行會阻塞,讀操作回應時間影響效能。

要在提高全域輸送量和使請求得到公平處理之間進行平衡。

 

最終期限I/O發送器中:每個請求都有一個逾時時間,讀請求預設500毫秒,寫請求5秒。

提交請求時:

  一個請求遞交給排序隊列,按照合并和排序插入隊列;

  將讀請求按次序插入到讀FIFO隊列中;

  將寫請求按次序插入到寫FIFO隊列中;

 

派發請求時:

  通常從排序隊列中取隊首請求加入到派發隊列中;

  如果寫FIFO隊列首或讀FIFO隊列首請求逾時,發送器從FIFO隊列中提取隊首請求加入到派發隊列中。

如所示:

   

    

此方式能盡量保證:

  請求逾時前得到執行,防止請求發生饑餓;

  讀請求逾時時間比寫請求短很多,保證寫請求不會因為堵塞讀請求而使讀請求發生饑餓。

 

3 預測I/O發送器

  最終期限發送器降低請求發生饑餓的機率,同時降低了系統輸送量。預測I/O發送器的目標就是在保持

良好讀響應同時提供良好的全域輸送量。

  預測I/O發送器與最終期限發送器不同之處:請求提交後並不直接放回處理其他請求,而是會空閑片刻(6毫秒),

使應用程式有提交其他請求的機會——任何對相鄰磁碟位置的操作請求都會立刻得到處理,等待結束後,預測I/O發送器

重新返回原來的位置,繼續執行以前的剩下請求。

  預測I/O發送器所能帶來的優勢取決於能否正確預測應用程式和檔案系統的行為,需要啟發和統計工作,預測準確能夠

減少定址開銷,提高系統響應,提高輸送量。

 

還有其他發送器:完全公正的排隊I/O發送器(每個進程獨立I/O請求隊列)和空操作I/O發送器(相鄰合并)

 

要在提高全域輸送量和使請求得到公平處理之間進行平衡。

系統發送器再啟動時可以進行配置。

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.