參考資料:
1. Linux I/O模型
2. 判斷磁盤I/O是否飽和與%util指標(biāo)的意義
3. 磁盤利用率和飽和度
4. 辯證看待 I/Ostat
1 簡(jiǎn)介
在上一篇中,大致了解了文件系統(tǒng)的一些知識(shí),了解了不同的文件系統(tǒng)以及VFS的概念,其實(shí)在存儲(chǔ)介質(zhì)上也是有這個(gè)情況,在嵌入式開發(fā)中,會(huì)根據(jù)不同的項(xiàng)目使用不同的存儲(chǔ)介質(zhì):spi flash、emmc flash、nor flash、nand falsh等等,不同的存儲(chǔ)介質(zhì)在系統(tǒng)中則會(huì)有不同的設(shè)備驅(qū)動(dòng)程序。
因此,系統(tǒng)會(huì)類似于VFS的做法,抽象一層(通用塊層)在塊設(shè)備驅(qū)動(dòng)和文件系統(tǒng)之間,這樣用戶直接訪問標(biāo)準(zhǔn)接口即可,不用關(guān)心不同驅(qū)動(dòng)程序的差異。通用塊層也會(huì)將文件系統(tǒng)的I/O請(qǐng)求根據(jù)自身算法進(jìn)行處理,用于提高磁盤的吞吐量以及效率。
2 性能參數(shù)
磁盤的性能主要有3個(gè)參數(shù):IOPS、吞吐量、響應(yīng)時(shí)間。另外還有幾個(gè)其它參數(shù):使用率、飽和度、平均I/O、等待隊(duì)列長(zhǎng)度。
2.1 IOPS
每秒的I/O請(qǐng)求數(shù),即每秒磁盤連續(xù)讀次數(shù)和連續(xù)寫次數(shù)之和。
隨機(jī)讀寫頻繁的應(yīng)用,如傳輸小塊不連續(xù)數(shù)據(jù)等情況,此參數(shù)有重要的參考意義。
2.2 吞吐量
每秒的I/O請(qǐng)求大小,即每秒讀出數(shù)據(jù)和寫入數(shù)據(jù)之和。
順序讀寫頻繁的應(yīng)用,如傳輸大量連續(xù)數(shù)據(jù)等情況,此參數(shù)有重要的參考意義。
2.3 響應(yīng)時(shí)間
指I/O請(qǐng)求從發(fā)出到收到響應(yīng)的間隔時(shí)間。
2.4 使用率
即磁盤處理I/O的時(shí)間百分比,或者說是磁盤處于活動(dòng)時(shí)間的百分比。
2.5 飽和度
磁盤處理I/O的繁忙程度。如果飽和度為100%,則無法接受新的I/O請(qǐng)求。
2.6 平均I/O
吞吐量除以IOPS,用于表示磁盤的使用模式。一般情況下,如果平均I/O小于32K,可以認(rèn)為磁盤以隨機(jī)存取為主,否則則是以順序存取為主。
2.7 等待隊(duì)列長(zhǎng)度
指待處理的I/O請(qǐng)求數(shù)目,如果I/O請(qǐng)求壓力超出磁盤的處理能力,該值將增加。
3 磁盤I/O命令查看
可以使用指令# cat /proc/diskstats或iostat來查看磁盤I/O相關(guān)參數(shù):文章來源:http://www.zghlxwxcb.cn/news/detail-479547.html
# cat /proc/diskstats
7 0 loop0 10 0 32 0 0 0 0 0 0 0 0
7 1 loop1 0 0 0 0 0 0 0 0 0 0 0
7 2 loop2 0 0 0 0 0 0 0 0 0 0 0
7 3 loop3 0 0 0 0 0 0 0 0 0 0 0
7 4 loop4 0 0 0 0 0 0 0 0 0 0 0
7 5 loop5 0 0 0 0 0 0 0 0 0 0 0
7 6 loop6 0 0 0 0 0 0 0 0 0 0 0
7 7 loop7 0 0 0 0 0 0 0 0 0 0 0
11 0 sr0 0 0 0 0 0 0 0 0 0 0 0
2 0 fd0 1 0 8 76 0 0 0 0 0 76 76
8 0 sda 190663 87763 5283924 2983996 40694 92425 4478994 3434064 0 880296 6422176
8 1 sda1 134 27 10514 1744 10 5 42 948 0 1924 2692
8 2 sda2 81 7 6664 956 208 1636 14752 3476 0 4304 4432
8 3 sda3 190369 87729 5262610 2981088 40476 90784 4464200 3429640 0 876900 6414852
#iostat -d -x
Linux 4.15.0-142-generic (st) 2022年12月06日 _x86_64_ (2 CPU)
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
loop0 0.00 0.00 0.00 0.00 0.00 0.00 3.20 0.00 0.00 0.00 0.00 0.00 0.00
fd0 0.00 0.00 0.00 0.00 0.00 0.00 8.00 0.00 76.00 76.00 0.00 76.00 0.00
sda 0.42 0.45 0.92 0.20 12.74 10.80 42.20 0.03 27.74 15.65 84.36 3.81 0.42
rrqm/s:每秒合并的讀請(qǐng)求數(shù);
wrqm/s:每秒合并的寫請(qǐng)求數(shù);
r/s:每秒發(fā)送給磁盤的讀請(qǐng)求數(shù);
w/s:每秒發(fā)送給磁盤的寫請(qǐng)求數(shù);
rkB/s:每秒從磁盤讀取的數(shù)據(jù)量;
wkB/s:每秒向磁盤寫入的數(shù)據(jù)量;
avgrq-sz:I/O請(qǐng)求的平均大?。ㄒ陨葏^(qū)為單位);
avgqu-sz:I/O請(qǐng)求的平均隊(duì)列長(zhǎng)度;
await:響應(yīng)時(shí)間
r_await:讀請(qǐng)求響應(yīng)時(shí)間;
w_await:寫請(qǐng)求響應(yīng)時(shí)間;
svctm:處理I/O請(qǐng)求的平均時(shí)間;
%uti:使用率。
4 進(jìn)程I/O命令查看
使用pidstat指令可以查看每個(gè)進(jìn)程I/O的使用情況:文章來源地址http://www.zghlxwxcb.cn/news/detail-479547.html
# pidstat -d
24時(shí)32分17秒 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
24時(shí)32分17秒 0 1 8.78 8.84 0.12 813 systemd
kB_rd/s:表示每秒讀取的數(shù)據(jù)大??;
kB_wr/s:表示每秒寫請(qǐng)求大??;
kB_ccwr/s:表示每秒取消的寫請(qǐng)求數(shù)據(jù)大小;
iodelay :塊I/O延遲,包括等待同步塊I/O和換入塊I/O結(jié)束的時(shí)間,單位是時(shí)鐘周期。
到了這里,關(guān)于Linux性能學(xué)習(xí)(3.2):IO_磁盤IO的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!