日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

25 | 基础篇:Linux 磁盘I/O是怎么工作的(下)

發(fā)布時(shí)間:2024/9/3 linux 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 25 | 基础篇:Linux 磁盘I/O是怎么工作的(下) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
上一節(jié)我們學(xué)習(xí)了 Linux 磁盤(pán) I/O 的工作原理,并了解了由文件系統(tǒng)層、通用塊層和設(shè)備層構(gòu)成的 Linux 存儲(chǔ)系統(tǒng) I/O 棧。其中,通用塊層是 Linux 磁盤(pán) I/O 的核心。向上,它為文件系統(tǒng)和應(yīng)用程序,提供訪問(wèn)了塊設(shè)備的標(biāo)準(zhǔn)接口;向下,把各種異構(gòu)的磁盤(pán)設(shè)備,抽象為統(tǒng)一的塊設(shè)備,并會(huì)對(duì)文件系統(tǒng)和應(yīng)用程序發(fā)來(lái)的 I/O 請(qǐng)求,進(jìn)行重新排序、請(qǐng)求合并等,提高了磁盤(pán)訪問(wèn)的效率。掌握了磁盤(pán) I/O 的工作原理,你估計(jì)迫不及待想知道,怎么才能衡量磁盤(pán)的 I/O 性能。接下來(lái),我們就來(lái)看看,磁盤(pán)的性能指標(biāo),以及觀測(cè)這些指標(biāo)的方法。

磁盤(pán)性能指標(biāo)

說(shuō)到磁盤(pán)性能的衡量標(biāo)準(zhǔn),必須要提到五個(gè)常見(jiàn)指標(biāo),也就是我們經(jīng)常用到的,使用率、飽和度、IOPS、吞吐量以及響應(yīng)時(shí)間等。這五個(gè)指標(biāo),是衡量磁盤(pán)性能的基本指標(biāo)。
  • 使用率,是指磁盤(pán)處理 I/O 的時(shí)間百分比。過(guò)高的使用率(比如超過(guò) 80%),通常意味著磁盤(pán) I/O 存在性能瓶頸。
  • 飽和度,是指磁盤(pán)處理 I/O 的繁忙程度。過(guò)高的飽和度,意味著磁盤(pán)存在嚴(yán)重的性能瓶頸。當(dāng)飽和度為 100% 時(shí),磁盤(pán)無(wú)法接受新的 I/O 請(qǐng)求。
  • IOPS(Input/Output Per Second),是指每秒的 I/O 請(qǐng)求數(shù)。
  • 吞吐量,是指每秒的 I/O 請(qǐng)求大小。
  • 響應(yīng)時(shí)間,是指 I/O 請(qǐng)求從發(fā)出到收到響應(yīng)的間隔時(shí)間。
這里要注意的是,使用率只考慮有沒(méi)有 I/O,而不考慮 I/O 的大小。換句話說(shuō),當(dāng)使用率是 100% 的時(shí)候,磁盤(pán)依然有可能接受新的 I/O 請(qǐng)求。這些指標(biāo),很可能是你經(jīng)常掛在嘴邊的,一討論磁盤(pán)性能必定提起的對(duì)象。不過(guò)我還是要強(qiáng)調(diào)一點(diǎn),不要孤立地去比較某一指標(biāo),而要結(jié)合讀寫(xiě)比例、I/O 類(lèi)型(隨機(jī)還是連續(xù))以及 I/O 的大小,綜合來(lái)分析。舉個(gè)例子,在數(shù)據(jù)庫(kù)、大量小文件等這類(lèi)隨機(jī)讀寫(xiě)比較多的場(chǎng)景中,IOPS 更能反映系統(tǒng)的整體性能;而在多媒體等順序讀寫(xiě)較多的場(chǎng)景中,吞吐量才更能反映系統(tǒng)的整體性能。一般來(lái)說(shuō),我們?cè)跒閼?yīng)用程序的服務(wù)器選型時(shí),要先對(duì)磁盤(pán)的 I/O 性能進(jìn)行基準(zhǔn)測(cè)試,以便可以準(zhǔn)確評(píng)估,磁盤(pán)性能是否可以滿足應(yīng)用程序的需求。

能測(cè)試工具 fio

這一方面,我推薦用性能測(cè)試工具 fio ,來(lái)測(cè)試磁盤(pán)的 IOPS、吞吐量以及響應(yīng)時(shí)間等核心指標(biāo)。但還是那句話,因地制宜,靈活選取。在基準(zhǔn)測(cè)試時(shí),一定要注意根據(jù)應(yīng)用程序 I/O 的特點(diǎn),來(lái)具體評(píng)估指標(biāo)。當(dāng)然,這就需要你測(cè)試出,不同 I/O 大小(一般是 512B 至 1MB 中間的若干值)分別在隨機(jī)讀、順序讀、隨機(jī)寫(xiě)、順序?qū)懙雀鞣N場(chǎng)景下的性能情況。用性能工具得到的這些指標(biāo),可以作為后續(xù)分析應(yīng)用程序性能的依據(jù)。一旦發(fā)生性能問(wèn)題,你就可以把它們作為磁盤(pán)性能的極限值,進(jìn)而評(píng)估磁盤(pán) I/O 的使用情況。了解磁盤(pán)的性能指標(biāo),只是我們 I/O 性能測(cè)試的第一步。接下來(lái),又該用什么方法來(lái)觀測(cè)它們呢?這里,我給你介紹幾個(gè)常用的 I/O 性能觀測(cè)方法。

磁盤(pán) I/O 觀測(cè)

第一個(gè)要觀測(cè)的,是每塊磁盤(pán)的使用情況。

iostat?

iostat 是最常用的磁盤(pán) I/O 性能觀測(cè)工具,它提供了每個(gè)磁盤(pán)的使用率、IOPS、吞吐量等各種常見(jiàn)的性能指標(biāo),當(dāng)然,這些指標(biāo)實(shí)際上來(lái)自 /proc/diskstats。iostat 的輸出界面如下。# -d -x 表示顯示所有磁盤(pán) I/O 的指標(biāo) $ iostat -d -x 1 Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util loop0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 loop1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00從這里你可以看到,iostat 提供了非常豐富的性能指標(biāo)。第一列的 Device 表示磁盤(pán)設(shè)備的名字,其他各列指標(biāo),雖然數(shù)量較多,但是每個(gè)指標(biāo)的含義都很重要。為了方便你理解,我把它們總結(jié)成了一個(gè)表格。這些指標(biāo)中,你要注意:
  • %util ,就是我們前面提到的磁盤(pán) I/O 使用率;
  • r/s+ w/s ,就是 IOPS;
  • rkB/s+wkB/s ,就是吞吐量;
  • r_await+w_await ,就是響應(yīng)時(shí)間。
在觀測(cè)指標(biāo)時(shí),也別忘了結(jié)合請(qǐng)求的大小( rareq-sz 和 wareq-sz)一起分析。你可能注意到,從 iostat 并不能直接得到磁盤(pán)飽和度。事實(shí)上,飽和度通常也沒(méi)有其他簡(jiǎn)單的觀測(cè)方法,不過(guò),你可以把觀測(cè)到的,平均請(qǐng)求隊(duì)列長(zhǎng)度或者讀寫(xiě)請(qǐng)求完成的等待時(shí)間,跟基準(zhǔn)測(cè)試的結(jié)果(比如通過(guò) fio)進(jìn)行對(duì)比,綜合評(píng)估磁盤(pán)的飽和情況。

進(jìn)程 I/O 觀測(cè)

除了每塊磁盤(pán)的 I/O 情況,每個(gè)進(jìn)程的 I/O 情況也是我們需要關(guān)注的重點(diǎn)。

pidstat?

上面提到的 iostat 只提供磁盤(pán)整體的 I/O 性能數(shù)據(jù),缺點(diǎn)在于,并不能知道具體是哪些進(jìn)程在進(jìn)行磁盤(pán)讀寫(xiě)。要觀察進(jìn)程的 I/O 情況,你還可以使用 pidstat 和 iotop 這兩個(gè)工具。pidstat 是我們的老朋友了,這里我就不再啰嗦它的功能了。給它加上 -d 參數(shù),你就可以看到進(jìn)程的 I/O 情況,如下所示:$ pidstat -d 1 13:39:51 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command 13:39:52 102 916 0.00 4.00 0.00 0 rsyslogd從 pidstat 的輸出你能看到,它可以實(shí)時(shí)查看每個(gè)進(jìn)程的 I/O 情況,包括下面這些內(nèi)容。
  • 用戶(hù) ID(UID)和進(jìn)程 ID(PID) 。
  • 每秒讀取的數(shù)據(jù)大小(kB_rd/s) ,單位是 KB。
  • 每秒發(fā)出的寫(xiě)請(qǐng)求數(shù)據(jù)大小(kB_wr/s) ,單位是 KB。
  • 每秒取消的寫(xiě)請(qǐng)求數(shù)據(jù)大小(kB_ccwr/s) ,單位是 KB。
  • 塊 I/O 延遲(iodelay),包括等待同步塊 I/O 和換入塊 I/O 結(jié)束的時(shí)間,單位是時(shí)鐘周期。

iotop

除了可以用 pidstat 實(shí)時(shí)查看,根據(jù) I/O 大小對(duì)進(jìn)程排序,也是性能分析中一個(gè)常用的方法。這一點(diǎn),我推薦另一個(gè)工具, iotop。它是一個(gè)類(lèi)似于 top 的工具,你可以按照 I/O 大小對(duì)進(jìn)程排序,然后找到 I/O 較大的那些進(jìn)程。iotop 的輸出如下所示:$ iotop Total DISK READ : 0.00 B/s | Total DISK WRITE : 7.85 K/s Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/s TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND 15055 be/3 root 0.00 B/s 7.85 K/s 0.00 % 0.00 % systemd-journald從這個(gè)輸出,你可以看到,前兩行分別表示,進(jìn)程的磁盤(pán)讀寫(xiě)大小總數(shù)和磁盤(pán)真實(shí)的讀寫(xiě)大小總數(shù)。因?yàn)榫彺妗⒕彌_區(qū)、I/O 合并等因素的影響,它們可能并不相等。剩下的部分,則是從各個(gè)角度來(lái)分別表示進(jìn)程的 I/O 情況,包括線程 ID、I/O 優(yōu)先級(jí)、每秒讀磁盤(pán)的大小、每秒寫(xiě)磁盤(pán)的大小、換入和等待 I/O 的時(shí)鐘百分比等。這兩個(gè)工具,是我們分析磁盤(pán) I/O 性能時(shí)最常用到的。你先了解它們的功能和指標(biāo)含義,具體的使用方法,接下來(lái)的案例實(shí)戰(zhàn)中我們一起學(xué)習(xí)。

小結(jié)

今天,我們梳理了 Linux 磁盤(pán) I/O 的性能指標(biāo)和性能工具。我們通常用 IOPS、吞吐量、使用率、飽和度以及響應(yīng)時(shí)間等幾個(gè)指標(biāo),來(lái)評(píng)估磁盤(pán)的 I/O 性能。你可以用 iostat 獲得磁盤(pán)的 I/O 情況,也可以用 pidstat、iotop 等觀察進(jìn)程的 I/O 情況。不過(guò)在分析這些性能指標(biāo)時(shí),你要注意結(jié)合讀寫(xiě)比例、I/O 類(lèi)型以及 I/O 大小等,進(jìn)行綜合分析。思考最后,我想請(qǐng)你一起來(lái)聊聊,你碰到過(guò)的磁盤(pán) I/O 問(wèn)題。在碰到磁盤(pán) I/O 性能問(wèn)題時(shí),你是怎么分析和定位的呢?你可以結(jié)合今天學(xué)到的磁盤(pán) I/O 指標(biāo)和工具,以及上一節(jié)學(xué)過(guò)的磁盤(pán) I/O 原理,來(lái)總結(jié)你的思路。

總結(jié)

以上是生活随笔為你收集整理的25 | 基础篇:Linux 磁盘I/O是怎么工作的(下)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。