小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

探秘I/O隊(duì)列對磁盤性能的影響

 曾淼Mark 2018-12-25

介紹

 

信息傳輸過程中數(shù)據(jù)通常暫存于磁盤隊(duì)列。實(shí)驗(yàn)表明,隨著服務(wù)器性能的不斷提高,磁盤I/O隊(duì)列常常成為影響磁盤響應(yīng)速度的首要瓶頸。本文以AIX系統(tǒng)為例,描述了I/O隊(duì)列在磁盤中的工作原理、監(jiān)測命令,以及如何對其進(jìn)行優(yōu)化以提升磁盤性能。

 

使用I/O隊(duì)列的意義:

 

為何要對磁盤I/O進(jìn)行并行處理呢?主要目的是提升應(yīng)用程序的性能。這一點(diǎn)對于多物理磁盤組成的虛擬磁盤(或LUN)顯得尤為重要。如果一次提交一個(gè)I/O,雖然響應(yīng)時(shí)間較短,但系統(tǒng)的吞吐量很小。相比較而言,一次提交多個(gè)I/O既縮短了磁頭移動(dòng)距離(通過電梯算法),同時(shí)也能夠提升IOPS。假如一部電梯一次只能搭乘一人,那么每個(gè)人一但乘上電梯,就能快速達(dá)到目的地(響應(yīng)時(shí)間),但需要耗費(fèi)較長的等待時(shí)間(隊(duì)列長度)。因此一次向磁盤系統(tǒng)提交多個(gè)I/O能夠平衡吞吐量和整體響應(yīng)時(shí)間。


理論上,磁盤的IOPS取決于隊(duì)列長度÷平均IO響應(yīng)時(shí)間。假設(shè)隊(duì)列長度為3,平均IO響應(yīng)時(shí)間是10ms,則最大吞吐量是300 IOPS。

 

 

IO隊(duì)列位于何處:

以AIX系統(tǒng)為例,從應(yīng)用層到磁盤物理層的IO堆棧如下所示,IO按照從上至下的順序遍歷堆棧:

  • 應(yīng)用程序?qū)?/li>
  • 文件系統(tǒng)層(可選)
  • LVM設(shè)備驅(qū)動(dòng)層(可選)
  • SDD或SDDPCM或其他多路徑驅(qū)動(dòng)層(如果使用)
  • hdisk設(shè)備驅(qū)動(dòng)層
  • adapter設(shè)備驅(qū)動(dòng)層
  • 磁盤接口層
  • 磁盤子系統(tǒng)層
  • 磁盤層


AIX在每一層堆棧都會(huì)監(jiān)測IO,因此堆棧的每一層都有IO隊(duì)列。通常,如果當(dāng)前各層執(zhí)行的IO超過了隊(duì)列長度所限制的最大數(shù)量,這些IO將暫存于等待隊(duì)列中,直至獲取申請資源。在文件系統(tǒng)層,文件系統(tǒng)緩存限制了各文件系統(tǒng)的最大可執(zhí)行IO數(shù)量。LVM設(shè)備驅(qū)動(dòng)層,可執(zhí)行的最大IO數(shù)量受hdisk緩存的限制。在SDD層,如果dpo設(shè)備的qdepth_enable屬性設(shè)置成yes,則會(huì)建立IO隊(duì)列,但也有些版本無法設(shè)置隊(duì)列。SDDPCM在將IO發(fā)送至磁盤設(shè)備驅(qū)動(dòng)層之前沒有進(jìn)行隊(duì)列處理。hdisk通過queue_depth參數(shù)設(shè)置最大響應(yīng)IO數(shù)量, 而FC適配層的參數(shù)為num_cmd_elems。磁盤子系統(tǒng)層有IO隊(duì)列,單塊物理磁盤可接收多個(gè)IO請求但一次只能處理一個(gè)IO。

 

IO隊(duì)列監(jiān)測命令:

 

以AIX為例,AIX 5.3及以上版本,可用iostat和sar –d命令監(jiān)測hdisk隊(duì)列,iostat -D命令輸出如下:

hdisk6 xfer: %tm_act bps tps bread bwrtn
4.7 2.2M 19.0 0.0 2.2M
read: rps avgserv minserv maxserv timeouts fails
0.0 0.0 0.0 0.0 0 0
write: wps avgserv minserv maxserv timeouts fails
19.0 38.9 1.1 190.2 0 0
queue: avgtime mintime maxtime avgwqsz avgsqsz sqfull
15.0 0.0 83.7 0.0 0.0 136


這里,avgwqsz是平均等待隊(duì)列長度,avgsqsz是平均響應(yīng)隊(duì)列長度。在等待隊(duì)列中花費(fèi)的平均等待時(shí)間是avgtime。sqfull值代表每秒鐘向已滿隊(duì)列提交的IO數(shù)。對于有cache的磁盤子系統(tǒng),IO響應(yīng)時(shí)間會(huì)有所不同。iostat –D命令顯示的是系統(tǒng)從啟動(dòng)后的統(tǒng)計(jì)數(shù)據(jù)。


從應(yīng)用程序的角度來看,處理IO的總時(shí)間是響應(yīng)時(shí)間加上在hdisk等待隊(duì)列中的時(shí)間。

sar –d命令輸出如下:

16:50:59     device    %busy    avque    r w/s    Kbs/s  avwait   avserv
16:51:00     hdisk1      0      0.0        0        0      0.0      0.0
                    hdisk0      0      0.0        0        0      0.0      0.0

avwait和avserv分別是花費(fèi)在等待隊(duì)列和響應(yīng)隊(duì)列的時(shí)間,avque在AIX 5.3以上版本中,代表等待隊(duì)列中的平均IO數(shù)量。

 

優(yōu)化方法:

 

首先,不應(yīng)盲目增加以上隊(duì)列參數(shù)值。這樣有可能造成磁盤子系統(tǒng)過載或在啟動(dòng)時(shí)引起設(shè)備配置報(bào)錯(cuò)。因此,僅增加hdisk的queue_depths值并不是最好的方法,而應(yīng)該同時(shí)調(diào)整可提交最大IO數(shù)量。當(dāng)queue_depths和發(fā)送至磁盤子系統(tǒng)的IO數(shù)量同時(shí)增加時(shí),IO響應(yīng)時(shí)間可能會(huì)增加,但同時(shí)吞吐量也得到了提升。當(dāng)IO響應(yīng)時(shí)間接近磁盤超時(shí)時(shí)間,則說明所提交IO超過了磁盤能夠處理的界限。如果看到IO超時(shí)并在錯(cuò)誤日志中報(bào)出IO無法完成,說明可能有硬件問題,或需要縮短隊(duì)列。


調(diào)整queue_depths的一條法則是:對于隨機(jī)讀寫或隊(duì)列未滿的情況,如果IO響應(yīng)時(shí)間超過15ms,就不能再增加queue_depths值。一旦IO響應(yīng)時(shí)間增加,瓶頸就從磁盤和adapter隊(duì)列轉(zhuǎn)移至磁盤子系統(tǒng)。調(diào)整隊(duì)列長度應(yīng)依據(jù):1)實(shí)際應(yīng)用程序產(chǎn)生的IO請求數(shù),2)使用測試工具以觀察磁盤子系統(tǒng)的處理能力。其中,1)為主要依據(jù)。


IO隊(duì)列有以下四種狀態(tài):

  1. 隊(duì)列已滿,IO等在hdisk或adapter驅(qū)動(dòng)層
  2. 隊(duì)列未滿,IO響應(yīng)時(shí)間短
  3. 隊(duì)列未滿,IO響應(yīng)時(shí)間長
  4. 隊(duì)列未滿,IO提交速度快于存儲處理速度并導(dǎo)致IO丟失


我們需要把隊(duì)列調(diào)整為2或3的狀態(tài)。情況3表明瓶頸不在hdisk驅(qū)動(dòng)層,而很有可能在磁盤子系統(tǒng)自身,也有可能位于adapter驅(qū)動(dòng)層或SAN。


第4種情況是應(yīng)該避免的。受限于存儲IO請求和數(shù)據(jù)的內(nèi)存大小,所有磁盤和磁盤子系統(tǒng)都有IO執(zhí)行數(shù)量的限制。當(dāng)存儲丟失IO時(shí),主機(jī)端超時(shí),IO將被重新提交,同時(shí)等待該IO的事件將被暫停。CPU為了處理IO多做了很多事情,這種情況應(yīng)該避免。如果IO最終失敗,將會(huì)導(dǎo)致應(yīng)用程序崩潰或更嚴(yán)重的結(jié)果。所以必須仔細(xì)確認(rèn)存儲的處理極限。

 

 

合理的平均IO響應(yīng)時(shí)間:

 

假設(shè)隊(duì)列中沒有IO,一次讀操作將會(huì)占據(jù)0至15ms,取決于尋址時(shí)間,磁盤轉(zhuǎn)速,以及數(shù)據(jù)傳輸時(shí)間。之后數(shù)據(jù)從存儲移動(dòng)至主機(jī)。有時(shí)數(shù)據(jù)位于磁盤讀緩存,這種情況下IO響應(yīng)時(shí)間約為1ms。對于大型磁盤系統(tǒng)在正常工作狀態(tài)下,平均IO響應(yīng)時(shí)間約為5-10ms。當(dāng)隨機(jī)讀取小數(shù)據(jù)耗時(shí)超過15ms時(shí),表明存儲較為繁忙。


寫操作通常將數(shù)據(jù)寫入cache中,平均耗時(shí)不到2.5ms。但是也有例外:如果存儲同步將數(shù)據(jù)鏡像至遠(yuǎn)端,寫操作將耗費(fèi)更長時(shí)間。如果寫入數(shù)據(jù)量較大(多于64KB)則數(shù)據(jù)傳輸時(shí)間會(huì)顯著增加。沒有cache的情況下,寫時(shí)間的讀時(shí)間差不多。


如果IO是大塊順序讀寫,除了傳輸時(shí)間較長,IO會(huì)暫存于磁盤物理層隊(duì)列,IO響應(yīng)時(shí)間遠(yuǎn)高于平均值。例如:應(yīng)用提交50個(gè)IO(50個(gè)64KB順序讀),最初幾個(gè)IO會(huì)獲得較快的響應(yīng)時(shí)間,而最后一個(gè)IO必須等待其他49個(gè)完成,從而耗費(fèi)很長的響應(yīng)時(shí)間。

 

參考

 

https://community./docs/DOC-18970

https://community./thread/129131

https://community./thread/145929

應(yīng)用于

 

UNIX系統(tǒng)

AIX系統(tǒng)

 

 

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多