在我之前的文章:《探討 Linux 的磁盤 I/O》中,我談到了 Linux 磁盤 I/O 的工作原理,我們了解到 Linux 存儲(chǔ)系統(tǒng) I/O 棧由文件系統(tǒng)層(file system layer)、通用塊層( general block layer)和設(shè)備層(device layer)構(gòu)成。
其中,通用塊層是 Linux 磁盤 I/O 的核心。向上,它為訪問(wèn)文件系統(tǒng)和應(yīng)用程序的塊設(shè)備提供了標(biāo)準(zhǔn)接口;向下,它將各種異構(gòu)磁盤設(shè)備抽象為一個(gè)統(tǒng)一的塊設(shè)備,并響應(yīng)文件系統(tǒng)和應(yīng)用程序發(fā)送的 I/O。
在本文中,我們來(lái)看看磁盤的性能指標(biāo)以及如何查看這些指標(biāo)。
Linux 磁盤性能指標(biāo)
在衡量磁盤性能時(shí),我們經(jīng)常提到五個(gè)常見(jiàn)指標(biāo):利用率、飽和度、IOPS、吞吐量和響應(yīng)時(shí)間。這五個(gè)指標(biāo)是衡量磁盤性能的基本指標(biāo)。
-
利用率(Utilization):磁盤處理 I/O 的時(shí)間百分比。過(guò)度使用(如超過(guò) 80%)通常意味著磁盤 I/O 存在性能瓶頸。
-
飽和度(Saturation):指磁盤處理 I/O 的繁忙程度。過(guò)度飽和意味著磁盤存在嚴(yán)重的性能瓶頸。當(dāng)飽和度為 100% 時(shí),磁盤無(wú)法接受新的 I/O 請(qǐng)求。
-
IOPS(Input/Output Per Second):指每秒 I/O 請(qǐng)求的數(shù)量。
-
吞吐量(Throughput):每秒 I/O 請(qǐng)求的大小。
-
響應(yīng)時(shí)間(Response time):指發(fā)送 I/O 請(qǐng)求和接收響應(yīng)之間的間隔時(shí)間。
這里需要注意的是,關(guān)于利用率,我們只考慮有無(wú) I/O,而不考慮 I/O 的大小。也就是說(shuō),當(dāng)利用率為 100% 時(shí),磁盤仍有可能接受新的 I/O 請(qǐng)求。
一般來(lái)說(shuō),在為應(yīng)用選擇服務(wù)器時(shí),首先要對(duì)磁盤的 I/O 性能進(jìn)行基準(zhǔn)測(cè)試,這樣才能準(zhǔn)確評(píng)估磁盤性能,以判斷是否能夠滿足應(yīng)用的需求。
當(dāng)然,這需要你在隨機(jī)讀、順序讀、隨機(jī)寫、順序?qū)?/strong>等各種應(yīng)用場(chǎng)景下測(cè)試不同 I/O 大小(通常是 512B ~ 1MB 之間)的性能。
磁盤 I/O 觀察
首先要觀察的是每個(gè)磁盤的使用情況。iostat 是最常用的磁盤 I/O 性能觀察工具。它提供了各種常用性能指標(biāo),例如每個(gè)磁盤的利用率、IOPS 和吞吐量。當(dāng)然,這些指標(biāo)實(shí)際上來(lái)自 /proc/diskstats
。
以下是 iostat
的輸出示例:
#-d-xmeansdisplayalldiskI/Operformance
$iostat-d-x1
Devicer/sw/srkB/swkB/srrqm/swrqm/s%rrqm%wrqmr_awaitw_awaitaqu-szrareq-szwareq-szsvctm%util
loop00.000.000.000.000.000.000.000.000.000.000.000.000.000.000.00
loop10.000.000.000.000.000.000.000.000.000.000.000.000.000.000.00
sda0.000.000.000.000.000.000.000.000.000.000.000.000.000.000.00
sdb0.000.000.000.000.000.000.000.000.000.000.000.000.000.000.00
在上述指標(biāo)中,您需要注意的是:
-
%util
是我們前面提到的磁盤 I/O 使用情況 -
r/s
和w/s
是 IOPS -
rkB/s
和wkB/s
是吞吐量 -
r_await
和w_await
是響應(yīng)時(shí)間
您可能已經(jīng)注意到 iostat
不能直接獲取磁盤的飽和度。事實(shí)上,通常沒(méi)有什么簡(jiǎn)單的方法可以測(cè)量飽和度。但是,您可以將觀察到的平均請(qǐng)求隊(duì)列長(zhǎng)度或完成讀寫請(qǐng)求的等待時(shí)間與基準(zhǔn)測(cè)試(例如通過(guò) fio)的結(jié)果進(jìn)行比較,以綜合評(píng)估磁盤飽和度。
進(jìn)程 I/O 觀察
除了每個(gè)磁盤的 I/O 情況,每個(gè)進(jìn)程的 I/O 情況也是大家關(guān)注的重點(diǎn)。
上面提到的 iostat
只提供了觀察磁盤的整體 I/O 性能數(shù)據(jù)。缺點(diǎn)是無(wú)法知道哪些進(jìn)程正在讀寫磁盤。要觀察進(jìn)程的 I/O,還可以使用 pidstat
和 iotop
工具。
例如,要使用 pidstat
$pidstat-d1
1351UIDPIDkB_rd/skB_wr/skB_ccwr/siodelayCommand
13521029160.004.000.000rsyslogd
從 pidstat
的輸出可以看出,它可以實(shí)時(shí)查看每個(gè)進(jìn)程的 I/O 情況,這包括以下內(nèi)容:
-
用戶 ID (
UID
) 和進(jìn)程 ID (PID
)。 -
每秒讀取的數(shù)據(jù)大小 (
kB_rd/s
),以 KB 為單位。 -
每秒發(fā)出的寫請(qǐng)求數(shù)據(jù)的大小(
kB_wr/s
),單位為KB。 -
每秒取消寫入請(qǐng)求的數(shù)據(jù)大小 (
kB_ccwr/s
),以 KB 為單位。 -
塊 I/O 延遲 (
iodelay
),包括等待同步塊(synchronized block)I/O 和換入塊(swap-in block)I/O 完成的時(shí)間,以時(shí)鐘周期為單位。
除了使用 pidstat
實(shí)時(shí)查看進(jìn)程磁盤 I/O 外,還有一個(gè)磁盤性能分析的常用方法是根據(jù) I/O 大小對(duì)進(jìn)程進(jìn)行排序。為此,我推薦 iotop
工具。它是一個(gè)類似于 top
的工具,您可以按 I/O 大小對(duì)進(jìn)程進(jìn)行排序,并找到具有更大 I/O 的進(jìn)程。
$iotop
TotalDISKREAD:0.00B/s|TotalDISKWRITE:7.85K/s
ActualDISKREAD:0.00B/s|ActualDISKWRITE:0.00B/s
TIDPRIOUSERDISKREADDISKWRITESWAPINIO>COMMAND
15055be/3root0.00B/s7.85K/s0.00%0.00%systemd-journald
從該輸出可以看到,前兩行分別代表進(jìn)程的磁盤讀寫總大小和磁盤的實(shí)際讀寫總大小。由于緩存、緩沖區(qū)、I/O 合并等因素,它們可能不相等。
剩下的部分從各個(gè)角度代表了進(jìn)程的 I/O 情況,包括 線程 ID、I/O 優(yōu)先級(jí)、每秒磁盤讀取大小、每秒磁盤寫入大小、換入百分比和等待 I/O 時(shí)鐘百分比。
結(jié)論
在本文中,我介紹了 Linux 磁盤 I/O 的性能指標(biāo)和查看性能工具。我們通常使用 IOPS、吞吐量、利用率、飽和度和響應(yīng)時(shí)間等幾個(gè)指標(biāo)來(lái)評(píng)估磁盤的 I/O 性能。
可以使用 iostat
獲取磁盤的 I/O 情況,也可以使用 pidstat
、iotop
等觀察進(jìn)程的 I/O 情況。但在分析這些性能指標(biāo)時(shí),要注意結(jié)合讀寫比率、I/O 類型、I/O 大小等綜合分析。
原文標(biāo)題:如何監(jiān)測(cè) Linux 的磁盤 I/O 性能
文章出處:【微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
Linux
+關(guān)注
關(guān)注
87文章
11304瀏覽量
209524 -
磁盤
+關(guān)注
關(guān)注
1文章
379瀏覽量
25209 -
性能指標(biāo)
+關(guān)注
關(guān)注
0文章
14瀏覽量
7902
原文標(biāo)題:如何監(jiān)測(cè) Linux 的磁盤 I/O 性能
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論