初探diskstats

来源:https://www.cnblogs.com/qianyuliang/archive/2019/01/11/10255460.html
-Advertisement-
Play Games

內核很多重要子系統均通過proc文件的方式,將自身的一些統計信息輸出,方便最終用戶查看各子系統的運行狀態,這些統計信息被稱為metrics。 直接查看metrics並不能獲取到有用的信息,一般都是由特定的應用程式(htop/sar/iostat等)每隔一段時間讀取相關metrics,併進行相應計算, ...


內核很多重要子系統均通過proc文件的方式,將自身的一些統計信息輸出,方便最終用戶查看各子系統的運行狀態,這些統計信息被稱為metrics。 直接查看metrics並不能獲取到有用的信息,一般都是由特定的應用程式(htop/sar/iostat等)每隔一段時間讀取相關metrics,併進行相應計算,給出更具用戶可讀性的輸出。 常見的metrics文件有:
• cpu調度統計信息的/proc/stat
• cpu負載統計信息的/proc/loadavg
通用塊設備層也有一個重要的統計信息
• /proc/diskstats內核通過diskstats文件,將通用塊設備層的一些重要指標以文件的形式呈現給用戶

首先來看下diskstats裡面都有些什麼,下麵截取的是一個diskstats文件內容:

雖然如上面提到的,這些數字看上去完全沒有規律。不過若想研究內核通用塊設備層的統計實現方式,還是得一個一個欄位的分析。

 

# cat /proc/diskstats 
   2       0 fd0 0 0 0 0 0 0 0 0 0 0 0
  11       0 sr0 18 0 2056 98 0 0 0 0 0 90 98
   8       0 sda 5941 81 508270 54421 2051 3068 49868 15639 0 13973 69944
   8       1 sda1 159 0 9916 304 11 2 68 28 0 292 332
   8       2 sda2 5751 81 495010 54034 2040 3066 49800 15611 0 13834 69529
 253       0 dm-0 5662 0 485850 54998 5106 0 49800 31524 0 13807 86522
 253       1 dm-1 90 0 4920 156 0 0 0 0 0 123 156

  

/proc/diskstats有11(從F4開始)個欄位,以下內核文檔解釋了它們的含義https://www.kernel.org/doc/Documentation/iostats.txt,我重新表述了一下,註意除了欄位#9(F12)之外都是累計值,從系統啟動之後一直累加:
1. (rd_ios)讀操作的次數。
2. (rd_merges)合併讀操作的次數。如果兩個讀操作讀取相鄰的數據塊時,可以被合併成一個,以提高效率。合併的操作通常是I/O scheduler(也叫elevator)負責的。
3. (rd_sectors)讀取的扇區數量。
4. (rd_ticks)讀操作消耗的時間(以毫秒為單位)。每個讀操作從__make_request()開始計時,到end_that_request_last()為止,包括了在隊列中等待的時間。
5. (wr_ios)寫操作的次數。
6. (wr_merges)合併寫操作的次數。
7. (wr_sectors)寫入的扇區數量。
8. (wr_ticks)寫操作消耗的時間(以毫秒為單位)。
9. (in_flight)當前未完成的I/O數量。在I/O請求進入隊列時該值加1,在I/O結束時該值減1。
註意:是I/O請求進入隊列時,而不是提交給硬碟設備時。
10. (io_ticks)該設備用於處理I/O的自然時間(wall-clock time)。
請註意io_ticks與rd_ticks(欄位#4)和wr_ticks(欄位#8)的區別,rd_ticks和wr_ticks是把每一個I/O所消耗的時間累加在一起,因為硬碟設備通常可以並行處理多個I/O,所以rd_ticks和wr_ticks往往會比自然時間大。而io_ticks表示該設備有I/O(即非空閑)的時間,不考慮I/O有多少,只考慮有沒有。在實際計算時,欄位#9(in_flight)不為零的時候io_ticks保持計時,欄位#9(in_flight)為零的時候io_ticks停止計時。
11. (time_in_queue)對欄位#10(io_ticks)的加權值。欄位#10(io_ticks)是自然時間,不考慮當前有幾個I/O,而time_in_queue是用當前的I/O數量(即欄位#9 in-flight)乘以自然時間。雖然該欄位的名稱是time_in_queue,但並不真的只是在隊列中的時間,其中還包含了硬碟處理I/O的時間。iostat在計算avgqu-sz時會用到這個欄位。

以sda磁碟為例:
8 0 sda 5941 81 508270 54421 2051 3068 49868 15639 0 13973 69944

   

Value Quoted 解釋
F1 8 major number 此塊設備的主設備號
F2 0 minor mumber 此塊設備的次設備號
F3 sda device name 此塊設備名字
F4 5941 reads completed successfully 成功完成的讀請求次數
F5 81 reads merged 讀請求的次數
F6 508270 sectors read 讀請求的扇區數總和
F7 54421 time spent reading (ms) 讀請求花費的時間總和
F8 2051 writes completed 成功完成的寫請求次數
F9 3068 writes merged 寫請求合併的次數
F10 49868 sectors written 寫請求的扇區數總和
F11 15639 time spent writing (ms) 寫請求花費的時間總和
F12 0 I/Os currently in progress 次塊設備隊列中的IO請求數
F13 13973 time spent doing I/Os (ms) 塊設備隊列非空時間總和
F14 69944 weighted time spent doing I/Os (ms) 塊設備隊列非空時間加權總和




流程圖
下圖是Linux內核通用塊設備層IO請求處理的完整流程,如圖例所示,所有的統計相關處理均有用不同顏色標註。 在進行深入分析前,請大致瀏覽圖片,對整個流程有一個大致印象。

 更詳細的內容,請閱讀:http://ykrocku.github.io/blog/2014/04/11/diskstats/





您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、C#、Net、C++、JScript、VB語法 獲取或設置一個值,該值指示是否允許來自客戶端的 HTTP GET 請求。 命名空間: System.Web.Mvc程式集: System.Web.Mvc(在 System.Web.Mvc.dll 中) 2、Net Core語法 如果你使用的是Net ...
  • 目前大量數據介面均採用API的方式為各類應用提供數據服務。Nancy是.net下實現webapi的一個輕量級的框架,可以快速搭建一個api服務環境,是一種快速建立api服務的不錯選擇。 本文記錄.net core環境下利用Nancy快速搭建webapi的全過程。 Ⅰ.開發環境 跨平臺的: .net ...
  • Mycat 讀寫分離: 讀寫分離,簡單地說是把對資料庫的讀和寫操作分開,以對應不同的資料庫伺服器。主資料庫提供寫操作,從資料庫提供讀操作,這樣能有效地減輕單台資料庫的壓力。主資料庫進行寫操作後,數據及時同步到所讀的資料庫,儘可能保證讀、寫資料庫的數據一致,比如MySQL的主從複製、Oracle的da ...
  • 最近使用電腦時遇到的問題: 使用spotlight進行搜索時,只要輸入字母超過一定個數(在我的Mac上是3個),spotlight就閃退了。 谷歌搜索得到大部分解決方案是在系統自帶詞典的偏好設置里取消外部字典的勾選(如https://placeless.net/2017/09/28/spotligh ...
  • 本文內容參考《kuberneters進階實戰》/馬哥的新書/推薦 部署前的準備 主機名稱解析 分散式系統環境中的多主機通信通常基於主機名稱進行,這在IP地址存在變化的可能性時為主機提供了固定的訪問入口,因此一般需要有專用的DNS服務負責解決各節點主機名。不過,考慮到此處部署的是測試集群,因此為了降低 ...
  • 今天需要再服務上部署一個.net 方面的項目;當時開啟服務的命令只能在前臺執行;使用nohub CMD &等放在後臺開啟服務都會宕機;所以搜尋了Supervisor 這個解決辦法,為服務創建守護進程。具體操作如下 1、什麼是守護進程 本篇的創建守護進程,是指發佈在Linux上 asp.net cor ...
  • 原文鏈接:http://www.oschina.net/translate/20-advanced-commands-for-middle-level-linux-users?from=20130811 ...
  • iostat(1)是在Linux系統上查看I/O性能最基本的工具,然而對於那些熟悉其它UNIX系統的人來說它是很容易被誤讀的。比如在HP-UX上 avserv(相當於Linux上的 svctm)是最重要的I/O指標,反映了硬碟設備的性能,它是指I/O請求從SCSI層發出、到I/O完成之後返回SCSI ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...