磁盤 IO 的性能指標(biāo)有哪些?如何獲取及分析?
對于業(yè)務(wù)服務(wù)器的用戶來說,看到的是文件系統(tǒng)或裸設(shè)備,從文件系統(tǒng)到物理磁盤大概是下圖的樣子。
業(yè)務(wù)服務(wù)器的操作系統(tǒng)作為存儲的用戶只能看到disk(存儲層面的LUN),而存儲管理員才知道存儲內(nèi)部的具體RAID方式、條帶化方式等等,在關(guān)注系統(tǒng)性能的活動(性能測試、性能調(diào)優(yōu))中,一般很少直接關(guān)注磁盤IO的指標(biāo),而是遇到性能問題(比如業(yè)務(wù)的響應(yīng)時間非常慢),并且逐步排查到磁盤時,才重點關(guān)注磁盤IO的性能指標(biāo)。這是因為,磁盤IO的性能的確是不好拿一個指標(biāo)說清楚的事。
當(dāng)磁盤IO有性能問題,需要分析IOPS、MBPS、服務(wù)時間、平均每次寫入的block大小、隊列等待時間等指標(biāo),分析IO路徑、驅(qū)動、光纖卡、光纖交換機(jī)、后臺存儲的規(guī)劃、硬盤域和存儲池劃分、thin LUN還是thick LUN、存儲的緩存設(shè)置、IO的Qos、磁盤類型、存儲接口模塊數(shù)量、RAID劃分、是否配置快照、克隆、遠(yuǎn)程復(fù)制等增值功能、存儲控制器的CPU利用率,甚至數(shù)據(jù)在盤片的中心還是邊緣等等。
本節(jié)并不主要從存儲的角度介紹,而是從存儲的用戶(業(yè)務(wù)服務(wù)器的操作系統(tǒng))的角度介紹磁盤IO的性能指標(biāo),以及相關(guān)分析。
主要關(guān)注指標(biāo)
雖然每類物理資源都有N個性能指標(biāo)來體現(xiàn),但CPU、內(nèi)存資源最主要的指標(biāo)只有一個,即利用率,但磁盤IO的主要指標(biāo)卻有三個(IOPS、帶寬、響應(yīng)時間)。這是因為存儲的能力會根據(jù)IO模型的不同而差異較大,IO模型可以理解為讀IO和寫IO的比例、順序的還是隨機(jī)的、每個IO的大小等等。例如:當(dāng)測試IOPS最大能力的時候,采用隨機(jī)小IO進(jìn)行測試,此時占用的帶寬是非常低的,響應(yīng)時間也會比順序的IO要長很多。而測試順序大IO時,此時帶寬占用非常高,但I(xiàn)OPS卻很低。
從業(yè)務(wù)服務(wù)器、存儲控制器、前端主機(jī)端口、磁盤、LUN、存儲池等角度,都有以下三個主要指標(biāo),本文重點從業(yè)務(wù)服務(wù)器角度介紹。
IOPS
I/O per second,即每秒鐘可以處理的I/O個數(shù),用來衡量存儲系統(tǒng)的I/O處理能力。在數(shù)據(jù)庫OLTP(Online Transaction Processing)業(yè)務(wù)場景,通常以IOPS衡量系統(tǒng)的性能。測量存儲的最大IOPS往往是以隨機(jī)讀寫小IO來評估。
1. 獲取來源
總IOPS:Nmon DISK_SUMM Sheet:IO/Sec
每個盤對應(yīng)的讀IOPS :Nmon DISKRIO Sheet
每個盤對應(yīng)的寫IOPS :Nmon DISKWIO Sheet
總IOPS:命令行iostat -Dl:tps
每個盤對應(yīng)的讀IOPS :命令行iostat -Dl:rps
每個盤對應(yīng)的寫IOPS :命令行iostat -Dl:wps
2. 適用場景
對于I/O小于64KB的應(yīng)用場景,存儲性能主要關(guān)注IOPS指標(biāo)。
OLTP(聯(lián)機(jī)事務(wù)處理)系統(tǒng)是大量用戶在線進(jìn)行事務(wù)操作的數(shù)據(jù)庫業(yè)務(wù)的一種應(yīng)用類型。
OLTP應(yīng)用的負(fù)載特征如下:
從數(shù)據(jù)庫角度看:
– 每個事務(wù)的讀、寫、更改涉及的數(shù)據(jù)量非常小。
– 數(shù)據(jù)庫的數(shù)據(jù)必須是最新的,所以對數(shù)據(jù)庫的可用性要求很高。
– 同時有很多用戶訪問。
– 要求數(shù)據(jù)庫快速響應(yīng),通常一個事務(wù)需要在幾秒內(nèi)完成。
從存儲角度看:
– 每個I/O非常小,通常為2KB~8KB。
– 訪問硬盤數(shù)據(jù)的位置非常隨機(jī)。
– 至少30%的數(shù)據(jù)是隨機(jī)寫操作。
– REDO日志(重做日志文件)寫入非常頻繁
帶寬
每秒鐘可以處理的數(shù)據(jù)量,常以KB/S或MB/s或GB/s為單位,表示為KBPS/MBPS/GBPS,用于衡量存儲系統(tǒng)的吞吐量。在數(shù)據(jù)庫OLAP(Online Analytical Processing)業(yè)務(wù)、媒資業(yè)務(wù)、視頻監(jiān)控業(yè)務(wù)等應(yīng)用場景,通常以帶寬衡量系統(tǒng)性能。
1. 獲取來源
總帶寬:Nmon DISK_SUMM Sheet:Disk Read KB/s,Disk Write KB/s
每個盤對應(yīng)的讀帶寬:Nmon DISKREAD Sheet
每個盤對應(yīng)的寫帶寬:Nmon DISKWRITE Sheet
總帶寬:命令行iostat -Dl:bps
每個盤對應(yīng)的讀帶寬:命令行iostat -Dl:bread
每個盤對應(yīng)的寫帶寬:命令行iostat -Dl:bwrtn
2. 適用場景
對于I/O大于等于64KB的應(yīng)用場景,存儲性能主要關(guān)注帶寬指標(biāo)。
OLAP業(yè)務(wù)是用戶長時間在線對數(shù)據(jù)庫執(zhí)行復(fù)雜的統(tǒng)計查詢操作的一種應(yīng)用類型。
OLAP應(yīng)用的負(fù)載特征如下:
從數(shù)據(jù)庫管理員角度看:
– 數(shù)據(jù)修改量小或無數(shù)據(jù)修改。
– 數(shù)據(jù)查詢過程復(fù)雜。
– 數(shù)據(jù)的使用頻率逐漸減小。
– 查詢結(jié)果以統(tǒng)計值呈現(xiàn),方便查看。
從存儲采樣看:
– 單個I/O數(shù)據(jù)量大,通常為64KB~1MB。
– 讀取操作通常順序讀取。
– 當(dāng)進(jìn)行讀取操作進(jìn)行時,寫操作的數(shù)據(jù)存放在臨時表空間內(nèi)。
– 對在線日志寫入少。只有在批量加載數(shù)據(jù)時,寫入操作增多。
響應(yīng)時間
也稱為時延或者服務(wù)時間,發(fā)起I/O請求到I/O處理完成的時間間隔,常以毫秒(ms)為單位。
1. 獲取來源
每個盤對應(yīng)的讀響應(yīng)時間:命令行iostat -Dl:read - avg serv,max serv
每個盤對應(yīng)的寫響應(yīng)時間:命令行iostat -Dl:write - avg serv,max serv
2. 最佳實踐
數(shù)據(jù)庫OLTP業(yè)務(wù)一般時延要求10ms以下,事實上大多數(shù)情況下不足1ms;VDI(Virtual Desktop Infrastructure)場景一般時延要求30ms以下;視頻點播和視頻監(jiān)控的時延要求隨碼率的不同而不同。
從業(yè)務(wù)系統(tǒng)用戶的角度,響應(yīng)時間是這三個指標(biāo)中最重要的指標(biāo)。因為,如果IOPS或帶寬達(dá)到了存儲的瓶頸,那么一定會體現(xiàn)在IO響應(yīng)時間上。
其他關(guān)注指標(biāo)
用戶從業(yè)務(wù)系統(tǒng)經(jīng)常關(guān)注的其他指標(biāo)有:磁盤繁忙程度、隊列滿等等,這里簡單介紹一下。
磁盤繁忙程度
Diskbusy體現(xiàn)了磁盤驅(qū)動的利用率,即磁盤驅(qū)動有百分之多少時間是活動的。
1. 獲取來源
Nmon DISKBUSY Sheet
命令行iostat -Dl:% tm_act
2. 詳細(xì)解釋
但這個指標(biāo)的高低與IOPS、帶寬并不是線性關(guān)系。例如當(dāng)diskbusy=80%的時候IOPS=500,當(dāng)diskbusy=90%的時候IOPS可能可以達(dá)到800。
可以把驅(qū)動理解為道路,每個IO的數(shù)據(jù)塊理解為道路上行使的汽車。當(dāng)?shù)缆飞蠜]有車的時候,認(rèn)為是不活動的;當(dāng)?shù)缆飞嫌熊嚨臅r候,認(rèn)為是活動的,但有1輛車也是活動,有10輛車也是活動。因此diskbusy并不能作為磁盤IO的重要性能指標(biāo)。但在日常情況下,可以從這個值的高低對磁盤使用情況有個大概的判斷。
服務(wù)隊列滿
服務(wù)隊列每秒變滿(磁盤不再接受服務(wù)請求)的次數(shù)。
1. 獲取來源
命令行iostat -Dl:sqfull
2. 詳細(xì)解釋
通常情況下這個sqfull的值為0,如果經(jīng)常不為0,可能是IO隊列深度太小或者磁盤/存儲能力不足。
queue_depth 是IO隊列深度,即AIX 一次可以傳送到磁盤設(shè)備的命令的數(shù)量,把命令放在隊列中再傳送給磁盤可以提高 I/O 性能。這個屬性限制了 AIX 可以傳送到設(shè)備的最大命令的數(shù)量。可以通過命令查看lsattr -El hdiskxxx|grep queue_depth,queue_depth 默認(rèn)數(shù)值為 4,可以調(diào)整。但調(diào)整queue_depth這種方法對于提高磁盤IO能力來說很有限。
文件系統(tǒng)使用率
文件系統(tǒng)和inode的利用率其實已經(jīng)不在磁盤IO的討論范圍,但仍然屬于磁盤的范圍,需要業(yè)務(wù)系統(tǒng)用戶關(guān)注。
1. 獲取來源
NMON:JFSFILE SHEET
命令行df- g
2. 最佳實踐
當(dāng)使用率超過80%的時候,系統(tǒng)的性能可能會被拖慢。
同時,統(tǒng)計業(yè)務(wù)量與文件系統(tǒng)利用率的增長情況,可以推測該文件系統(tǒng)可以支撐的最大業(yè)務(wù)量,管理員可以根據(jù)日常業(yè)務(wù)量和文件系統(tǒng)的空間,設(shè)定備份刪除策略。
Inode使用率
Inode:索引節(jié)點,它用來存放文件及目錄的基本信息,inode數(shù)量即文件系統(tǒng)的節(jié)點的最大數(shù)量。
Inode使用率容易被忽略。對于一些文件大小很小,文件數(shù)量卻很大的系統(tǒng),若采用默認(rèn)參數(shù)生成文件系統(tǒng),可能導(dǎo)致inode數(shù)量不足。當(dāng)inode使用率達(dá)到100%后就不能再創(chuàng)建新的文件或目錄。
1. 獲取來源
NMON:JFSINODE SHEET
命令行df- g:%Iused