伺服器高效能程式 磁碟I/O篇

來源:互聯網
上載者:User
伺服器高效能程式 磁碟I/O篇

Linux IO系統的架構圖

 

一.裝置-------- 影響磁碟效能的因素

硬碟的轉速影響硬碟的整體效能。一般情況下轉速越大,效能會越好。

硬碟的效能因素主要包括兩個:1.平均訪問時間2傳輸速率。

 

平均訪問時間包括兩方面因素:

平均尋道時間(Average Seek Time)是指硬碟的磁頭移動到盤面指定磁軌所需的時間。一般在3ms至15ms之間。

平均旋轉等待時間(Latency)是指磁頭已處於要訪問的磁軌,等待所要訪問的扇區旋轉至磁頭下方的時間。一般在2ms至6ms之間。

 

傳輸速率(Data Transfer Rate) 硬碟的資料轉送率是指硬碟讀寫資料的速度,單位為MB每秒(MB/s)。磁碟每秒能傳輸80M~320M位元組。

 

傳輸速率包括內部傳輸速率和外部傳輸速率。

內部傳輸率(Internal Transfer Rate) 也稱為持續傳輸率(Sustained Transfer Rate),它反映了硬碟緩衝區未用時的效能。內部傳輸率主要依賴於硬碟的旋轉速度。

外部傳輸率(External Transfer Rate)也稱為突發資料轉送率(Burst Data Transfer Rate)或介面傳輸率,它標稱的是系統匯流排與硬碟緩衝區之間的資料轉送率,外部資料傳輸率與硬碟介面類型和硬碟緩衝的大小有關。STAT2 的傳輸速率在300MB/s層級。

 

因此在硬體級上,提高磁碟效能的關鍵主要是降低平均訪問時間。

二.裝置驅動

記憶體到硬碟的傳輸方式:poll,中斷,DMA

 

DMA:當 CPU 初始化這個傳輸動作,傳輸動作本身是由 DMA 控制器 來實行和完成。

DMA控制器獲得匯流排控制權後,CPU即刻掛起或只執行內部操作,由DMA控制器輸出讀寫命令,直接控制RAM與I/O介面進行DMA傳輸。DMA每次傳送的是磁碟上相鄰的扇區。Scatter-gather DMA允許傳送不相鄰的扇區。

 

CPU效能與硬碟與記憶體的資料轉送速率關係不大。

 

裝置驅動內有一個結構管理著IO的請求隊列

structrequest_queue(include/linux/Blkdev.h)

這裡不僅僅有讀寫請求的資料區塊,還有用於IO調度的回呼函數結構。每次需要傳輸的時候,就從隊列中選出一個資料區塊交給DMA進行傳輸。

 

所以IO調度的回呼函數這是降低平均訪問的時間的關鍵。

 

三.OS

IO調度器

Linux kernel提供了四個調度器供使用者選擇。他們是noop,cfq,deadline,as。可以在系統啟動時設定核心參數elevator=<name>來指定預設的調度器。也可以在運行時為某個塊裝置設定IO發送器。

 

下面來簡要介紹這四個調度器的電梯調度演算法。

Noop:最簡單的調度演算法。新的請求總是被添加到隊頭或者隊尾,然後總是從隊頭中選出將要被處理的請求。

 

CFQ:(Complete FarinessQueueing)它的目標是在所有請求的進程中平均分配IO的頻寬。因此,它會根據進程建立自己的請求隊列,然後將IO請求放入相應的隊列中。在使用輪轉法從每個非空的隊列中取出IO請求。

 

Deadline:使用了四個隊列,兩個以磁碟塊序號排序的讀寫隊列,兩個以期限時間排序的讀寫隊列。演算法首先確定下一個讀寫的方向,讀的優先順序高於寫。然後檢查被選方向的期限隊列:如果期限時間的隊列中有逾時的請求,則將剛才的請求移動至隊尾,然後在磁碟號排序隊列中從逾時請求開始處理。當處理完一個方向的請求後,在處理另一個方向的請求。(讀請求的逾時時間是500ms,寫請求的逾時時間是5s)

 

Anticipatory:它是最複雜的IO調度演算法。和deadline演算法一樣有四個隊列。還附帶了一些啟發學習法策略。它會從當前的磁頭位置後的磁碟號中選擇請求。在調度了一個由P進程的IO請求後,會檢查下一個請求,如果還是P進程的請求,則立即調度,如果不是,同時預測P進程很快會發出請求,則還延長大約7ms的時間等待P進程的IO請求。

 

 

 

Write/Read函數

以ext3的write為例:

系統調用write()的作用就是修改頁快取內的一些頁的內容,如果頁快取內沒有所要的頁則分配並追加這些頁。

當髒頁達到一定數量或者逾時後,將髒頁刷回硬碟。也可以執行相關係統調用。

 

為什麼要達到一定數量,是因為延遲寫能在一定層度上提高系統的效能,這也使得塊裝置的平均讀請求會多於寫請求。

 

在程式中調用write函數,將進入系統調用f_op->write。這個函數將調用ext3的do_sync_write。這個函數將參數封裝後調用generic_file_aio_write。由參數名可以看出同步寫變成了非同步寫。如果沒有標記O_DIRECT,將調用函數generic_file_buffered_write將寫的內容寫進kernel的高速頁緩衝中。Buffer是以page為單位即4k。之後當調用cond_resched()進行進程的調度,DMA會將buffer中的內容寫進硬碟。

所以當每次以4k為單位寫入硬碟時效率會達到最高。下面是UNIX環境進階編程的實驗結果:

是linux 的塊裝置的資料操作層次:

Sector扇區:是裝置驅動和IO發送器處理資料粒度。

Block塊:是VFS和檔案系統處理資料的粒度。其大小不唯一,可以是512,1024,2048,4096位元組。核心操作的塊大小是4096位元組。

Segment段:是DMA傳送的單位。每一個段包含了相鄰的扇區,它能使DMA傳送不相鄰的扇區。

 

四.使用者程式

根據以上的分析,我們的write buffer一般設定為4K的倍數。

 

在程式中有意識的延遲寫。這個是os的策略,當然也可以應用到程式的設計中。當然也會有缺點:1.如果硬體錯誤或掉電,則會丟失內容(做額外的備份)2.需要額外的記憶體空間。(犧牲記憶體來提高IO的效率)

 

我們還需根據系統的IO調度器的調度策略,設計出不同的IO策略。盡量降低磁碟的平均訪問時間,降低請求隊列,提高資料轉送的速率。

 

 

 

五.監控硬碟的工具和指標

Iostat–x –k 1

 -x顯示更多的訊息 -k資料以KB為單位 1每秒顯示一次

輸出顯示的資訊

Iowait:cpu等待未完成的IO請求而閒置時間的比例。

Idle:cpu空閑且無IO請求的比例。

rrqm/s:每秒這個裝置相關的讀取請求有多少被Merge了。

wrqm/s:每秒這個裝置相關的寫入請求有多少被Merge了。

rsec/s:每秒讀取的扇區數;

wsec/:每秒寫入的扇區數。

r/s:每秒完成的讀 I/O 裝置次數。即 delta(rio)/s

w/s:每秒完成的寫 I/O 裝置次數。即 delta(wio)/s

await:每一個IO請求的處理的平均時間(單位是毫秒)。包括加入請求隊列和服務的時間。

svctm:   平均每次裝置I/O操作的服務時間。

avgrq-sz: 平均每次裝置I/O操作的資料大小 (扇區)。即 delta(rsect+wsect)/delta(rio+wio)
avgqu-sz: 平均I/O隊列長度。即 delta(aveq)/s/1000 (因為aveq的單位為毫秒)。

%util:在統計時間內所有處理IO時間,除以總共統計時間。例如,如果統計間隔1秒,該裝置有0.8秒在處理IO,而0.2秒閑置,那麼該裝置的%util = 0.8/1 = 80%,所以該參數暗示了裝置的繁忙程度。一般地,如果該參數是100%表示裝置已經接近滿負荷運行了(當然如果是多磁碟,即使%util是100%,因為磁碟的並發能力,所以磁碟使用未必就到了瓶頸)。

 

下面我們做一個實驗來分析一下

我們使用命令

time dd if=/dev/zero of=/home/zhouyuan/mytest bs=1M count=3000

向mytest寫入資料,寫入3G。

截取部分的狀態監控:

 

2,當兩條資料 iowait 達到了 99% 以上,寫入的資料是0,這是因為DMA將記憶體的中的資料轉送給裝置。結合圖1的前兩條資料,利用率達到了99%+卻沒有寫入的磁碟塊。

3,iowait下降,說明cpu開始執行相關程式,而此時塊裝置開始寫入的資料。這兩個操作是非同步進行的。

 

Vmstat–k –n 1

Swap

  si: 從磁碟交換到記憶體的交換頁數量,單位:KB/秒

  so: 從記憶體交換到磁碟的交換頁數量,單位:KB/秒

IO

  bi: 從塊裝置接受的塊數,單位:塊/秒

  bo: 發送到塊裝置的塊數,單位:塊/秒

我們可以看出系統的延遲寫。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.