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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Linux服务器I/O性能分析-2

發布時間:2023/10/11 综合教程 276 老码农
生活随笔 收集整理的這篇文章主要介紹了 Linux服务器I/O性能分析-2 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、如何正確分析IO性能

1.1 BLKTRACE分析IO性能

之前的文章已經說明,要是系統發生I/O性能問題,我們常用的命令是無法精確定位問題(內核I/O調度器消耗的時間和硬件消耗的時間,這個不能作為性能指標),這時候blktrace就可以用來分析,它記錄了I/O整個過程,從中可以分析是I/O調度器慢還是硬件響應慢。

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. # 大概意思就是說:
# blktrace是一個塊層(block layer)IO跟蹤機制,將請求隊列的詳細信息發送到用戶空間
# 主要有三個組件:
# 1. 內核組件
# 2. 記錄內核到用戶空間的I/O追蹤信息的程序
# 3. 分析、展示I/O追蹤信息的程序

1.2.1 執行過程分析

  • 可能會被Device Mapper映射到其它設備 Remap
  • 可能會因為I/O請求size太大而被拆分成多個I/O請求  Split
  • 可能因為與其它I/O請求的物理位置相鄰而合并  Merge
  • 然后通過Device driver交給硬件;如:分布式存儲經過HBA、光纖、SAN交換機(網絡)等最后到達存儲設備,設備完成I/O請求之后再把結果返回給用戶空間。如下圖:

1.3 執行過程解析

通過blktrace將結果輸出到屏幕,然后用blkparse將屏幕中的結果作為輸入,最后將分析結果輸出到屏幕,需要注意的是blktrace不具備分析功能,需要借助blkparse進行分析!!!

# 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 字段解釋

  • 第一列:主次設備號
  • 第二列:CPU
  • 第三列:序列號
  • 第四列:時間戳
  • 第五列:PID進程號
  • 第六列:具體事件 后續詳解
  • 第七列:具體的動作(讀、寫等)
  • 第八列:磁盤起始塊 + 操作的塊的數量
  • 第九列:進程名和具體的命令

1.3.2 第六列解釋

  • A:IO被重新映射到不同的設備
  • C:IO請求執行完畢
  • D:IO請求進入Driver
  • G:IO請求生成
  • I:IO請求進入IO調度器隊列
  • M:IO返回與隊列中的請求合并
  • P: 當一個I/O入隊一個空隊列時,Linux會鎖住這個隊列,不處理該I/O,這樣做是為了等待一會,看有沒有新的I/O進來,可以合并
  • Q:即將生成IO請求
  • S:沒有可用的request結構體,也就是I/O滿了,只能等待有request結構體完成釋放
  • T:超時斷開
  • U:當隊列中已經有I/O request時,會放開這個隊列,準備向磁盤驅動發送該I/O。
  • X: 對于做了Raid或進行了device mapper(dm)的設備,進來的IO可能需要切割,然后發送給不同的設備

1.3.3 第六列代表了IO經過的各階段

1.3.4 IO的生命周期以及計算方法

  • Q2G:生成IO請求所消耗的時間,包括remap和split的時間
  • G2I:IO請求進入IO調度器所消耗的時間,包括了merge的時間
  • I2D:IO請求在IO調度器中等待的時間
  • D2C:IO請求在Driver上和硬件上所消耗的時間
  • Q2C:整個IO請求所消耗的時間即:Q2I + I2D + D2C = Q2C
  • 以上指標有助于進一步定位緩慢發生的地方
  • D2C:可以作為硬件性能的指標
  • I2D:可以作為IO調度器的性能指標

   后續通過寫腳本可以非常值觀的統計IO讀寫數量、延遲、塊大小等信息!

總結

以上是生活随笔為你收集整理的Linux服务器I/O性能分析-2的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。