Linux服务器I/O性能分析-2
生活随笔
收集整理的這篇文章主要介紹了
Linux服务器I/O性能分析-2
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一、如何正確分析IO性能
1.1 BLKTRACE分析IO性能
之前的文章已經(jīng)說(shuō)明,要是系統(tǒng)發(fā)生I/O性能問(wèn)題,我們常用的命令是無(wú)法精確定位問(wèn)題(內(nèi)核I/O調(diào)度器消耗的時(shí)間和硬件消耗的時(shí)間,這個(gè)不能作為性能指標(biāo)),這時(shí)候blktrace就可以用來(lái)分析,它記錄了I/O整個(gè)過(guò)程,從中可以分析是I/O調(diào)度器慢還是硬件響應(yīng)慢。
1.2 BLKTRACE原理
# man blktrace DESCRIPTION:
blktrace is a block layer IO tracing mechanism which provides detailed information about request queue operations up to user space.
There are three major components: a kernel component, a utility to record the i/o trace information for the kernel to user space,
andutilities to analyse and view the trace information. # 大概意思就是說(shuō):
# blktrace是一個(gè)塊層(block layer)IO跟蹤機(jī)制,將請(qǐng)求隊(duì)列的詳細(xì)信息發(fā)送到用戶空間
# 主要有三個(gè)組件:
# 1. 內(nèi)核組件
# 2. 記錄內(nèi)核到用戶空間的I/O追蹤信息的程序
# 3. 分析、展示I/O追蹤信息的程序
1.2.1 執(zhí)行過(guò)程分析
- 可能會(huì)被Device Mapper映射到其它設(shè)備 Remap
- 可能會(huì)因?yàn)镮/O請(qǐng)求size太大而被拆分成多個(gè)I/O請(qǐng)求 Split
- 可能因?yàn)榕c其它I/O請(qǐng)求的物理位置相鄰而合并 Merge
- 然后通過(guò)Device driver交給硬件;如:分布式存儲(chǔ)經(jīng)過(guò)HBA、光纖、SAN交換機(jī)(網(wǎng)絡(luò))等最后到達(dá)存儲(chǔ)設(shè)備,設(shè)備完成I/O請(qǐng)求之后再把結(jié)果返回給用戶空間。如下圖:
1.3 執(zhí)行過(guò)程解析
通過(guò)blktrace將結(jié)果輸出到屏幕,然后用blkparse將屏幕中的結(jié)果作為輸入,最后將分析結(jié)果輸出到屏幕,需要注意的是blktrace不具備分析功能,需要借助blkparse進(jìn)行分析!!!
# blktrace -d /dev/sda -o - | blkparse -i -
8,0 0 1 0.000000000 8702 A WS 13104216 + 8 <- (8,3) 11258968
8,0 0 2 0.000001717 8702 Q WS 13104216 + 8 [mysqld]
8,0 0 3 0.000003721 8702 G WS 13104216 + 8 [mysqld]
8,0 0 4 0.000004734 8702 I WS 13104216 + 8 [mysqld]
8,0 0 5 0.000006124 8702 D WS 13104216 + 8 [mysqld]
8,0 0 6 0.000035396 0 C WS 13104216 + 8 [0]
8,0 0 7 1.000409841 8702 A WS 13104216 + 8 <- (8,3) 11258968
8,0 0 8 1.000410566 8702 Q WS 13104216 + 8 [mysqld]
8,0 0 9 1.000412044 8702 G WS 13104216 + 8 [mysqld]
8,0 0 10 1.000412785 8702 I WS 13104216 + 8 [mysqld]
8,0 0 11 1.000413498 8702 D WS 13104216 + 8 [mysqld]
8,0 0 12 1.000438822 0 C WS 13104216 + 8 [0]
8,0 0 13 1.018085707 20501 A W 96409432 + 8 <- (8,3) 94564184
8,0 0 14 1.018085964 20501 Q W 96409432 + 8 [kworker/u32:0]
8,0 0 15 1.018086720 20501 G W 96409432 + 8 [kworker/u32:0]
8,0 0 16 1.018087010 20501 I W 96409432 + 8 [kworker/u32:0]
8,0 0 17 1.018087394 20501 D W 96409432 + 8 [kworker/u32:0]
8,0 0 18 1.018093866 20501 A W 96411880 + 8 <- (8,3) 94566632
8,0 0 19 1.018094103 20501 Q W 96411880 + 8 [kworker/u32:0]
8,0 0 20 1.018094495 20501 G W 96411880 + 8 [kworker/u32:0]
8,0 0 21 1.018094639 20501 I W 96411880 + 8 [kworker/u32:0]
8,0 0 22 1.018094963 20501 D W 96411880 + 8 [kworker/u32:0]
8,0 0 23 1.018106915 0 C W 96409432 + 8 [0]
1.3.1 字段解釋
- 第一列:主次設(shè)備號(hào)
- 第二列:CPU
- 第三列:序列號(hào)
- 第四列:時(shí)間戳
- 第五列:PID進(jìn)程號(hào)
- 第六列:具體事件 后續(xù)詳解
- 第七列:具體的動(dòng)作(讀、寫(xiě)等)
- 第八列:磁盤(pán)起始?jí)K + 操作的塊的數(shù)量
- 第九列:進(jìn)程名和具體的命令
1.3.2 第六列解釋
- A:IO被重新映射到不同的設(shè)備
- C:IO請(qǐng)求執(zhí)行完畢
- D:IO請(qǐng)求進(jìn)入Driver
- G:IO請(qǐng)求生成
- I:IO請(qǐng)求進(jìn)入IO調(diào)度器隊(duì)列
- M:IO返回與隊(duì)列中的請(qǐng)求合并
- P: 當(dāng)一個(gè)I/O入隊(duì)一個(gè)空隊(duì)列時(shí),Linux會(huì)鎖住這個(gè)隊(duì)列,不處理該I/O,這樣做是為了等待一會(huì),看有沒(méi)有新的I/O進(jìn)來(lái),可以合并
- Q:即將生成IO請(qǐng)求
- S:沒(méi)有可用的request結(jié)構(gòu)體,也就是I/O滿了,只能等待有request結(jié)構(gòu)體完成釋放
- T:超時(shí)斷開(kāi)
- U:當(dāng)隊(duì)列中已經(jīng)有I/O request時(shí),會(huì)放開(kāi)這個(gè)隊(duì)列,準(zhǔn)備向磁盤(pán)驅(qū)動(dòng)發(fā)送該I/O。
- X: 對(duì)于做了Raid或進(jìn)行了device mapper(dm)的設(shè)備,進(jìn)來(lái)的IO可能需要切割,然后發(fā)送給不同的設(shè)備
1.3.3 第六列代表了IO經(jīng)過(guò)的各階段
1.3.4 IO的生命周期以及計(jì)算方法
- Q2G:生成IO請(qǐng)求所消耗的時(shí)間,包括remap和split的時(shí)間
- G2I:IO請(qǐng)求進(jìn)入IO調(diào)度器所消耗的時(shí)間,包括了merge的時(shí)間
- I2D:IO請(qǐng)求在IO調(diào)度器中等待的時(shí)間
- D2C:IO請(qǐng)求在Driver上和硬件上所消耗的時(shí)間
- Q2C:整個(gè)IO請(qǐng)求所消耗的時(shí)間即:Q2I + I2D + D2C = Q2C
- 以上指標(biāo)有助于進(jìn)一步定位緩慢發(fā)生的地方
- D2C:可以作為硬件性能的指標(biāo)
- I2D:可以作為IO調(diào)度器的性能指標(biāo)
后續(xù)通過(guò)寫(xiě)腳本可以非常值觀的統(tǒng)計(jì)IO讀寫(xiě)數(shù)量、延遲、塊大小等信息!
總結(jié)
以上是生活随笔為你收集整理的Linux服务器I/O性能分析-2的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 有哪些值得一读的优秀开源 JS 代码
- 下一篇: Tomcat源码分析 (九)-----