初探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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...