iostat的核心描述

#define DISKSTATS  "/proc/diskstats"

通过访问DISKSTATS虚拟文件,获取当期的IO读写的数据,然后统计

void read_diskstats_stat(int curr)
{
 FILE *fp;
 char line[256], dev_name[MAX_NAME_LEN];
 char *dm_name;
 struct io_stats sdev;
 int i;
 unsigned int ios_pgr, tot_ticks, rq_ticks, wr_ticks;
 unsigned long rd_ios, rd_merges_or_rd_sec, rd_ticks_or_wr_sec, wr_ios;
 unsigned long wr_merges, rd_sec_or_wr_ios, wr_sec;
 char *ioc_dname;
 unsigned int major, minor;

/* Every I/O device entry is potentially unregistered */
 set_entries_unregistered(iodev_nr, st_hdr_iodev);

if ((fp = fopen(DISKSTATS, "r")) == NULL)
  return;

while (fgets(line, sizeof(line), fp) != NULL) {

/* major minor name rio rmerge rsect ruse wio wmerge wsect wuse running use aveq */
  i = sscanf(line, "%u %u %s %lu %lu %lu %lu %lu %lu %lu %u %u %u %u",
      &major, &minor, dev_name,
      &rd_ios, &rd_merges_or_rd_sec, &rd_sec_or_wr_ios, &rd_ticks_or_wr_sec,
      &wr_ios, &wr_merges, &wr_sec, &wr_ticks, &ios_pgr, &tot_ticks, &rq_ticks);

if (i == 14) {
   /* Device or partition */
   if (!dlist_idx && !DISPLAY_PARTITIONS(flags) &&
       !is_device(dev_name, ACCEPT_VIRTUAL_DEVICES))
    continue;
   sdev.rd_ios     = rd_ios;
   sdev.rd_merges  = rd_merges_or_rd_sec;
   sdev.rd_sectors = rd_sec_or_wr_ios;
   sdev.rd_ticks   = (unsigned int) rd_ticks_or_wr_sec;
   sdev.wr_ios     = wr_ios;
   sdev.wr_merges  = wr_merges;
   sdev.wr_sectors = wr_sec;
   sdev.wr_ticks   = wr_ticks;
   sdev.ios_pgr    = ios_pgr;
   sdev.tot_ticks  = tot_ticks;
   sdev.rq_ticks   = rq_ticks;
  }
  else if (i == 7) {
   /* Partition without extended statistics */
   if (DISPLAY_EXTENDED(flags) ||
       (!dlist_idx && !DISPLAY_PARTITIONS(flags)))
    continue;

sdev.rd_ios     = rd_ios;
   sdev.rd_sectors = rd_merges_or_rd_sec;
   sdev.wr_ios     = rd_sec_or_wr_ios;
   sdev.wr_sectors = rd_ticks_or_wr_sec;
  }
  else
   /* Unknown entry: Ignore it */
   continue;

if ((ioc_dname = ioc_name(major, minor)) != NULL) {
   if (strcmp(dev_name, ioc_dname) && strcmp(ioc_dname, K_NODEV)) {
    /*
     * No match: Use name generated from sysstat.ioconf data
     * (if different from "nodev") works around known issues
     * with EMC PowerPath.
     */
    strncpy(dev_name, ioc_dname, MAX_NAME_LEN);
   }
  }

if ((DISPLAY_DEVMAP_NAME(flags)) && (major == dm_major)) {
   /*
    * If the device is a device mapper device, try to get its
    * assigned name of its logical device.
    */
   dm_name = transform_devmapname(major, minor);
   if (dm_name) {
    strncpy(dev_name, dm_name, MAX_NAME_LEN);
   }
  }

save_stats(dev_name, curr, &sdev, iodev_nr, st_hdr_iodev);
 }
 fclose(fp);

/* Free structures corresponding to unregistered devices */
 free_unregistered_entries(iodev_nr, st_hdr_iodev);
}

iostat的核心描述

时间: 2024-10-11 12:15:42

iostat的核心描述的相关文章

cloudevents 通用eevent 描述指南

cloudevents 是由cncf 组织管理的一个通用event描述指南 特性: 一致性 可理解性 可移植性 说明 cloudevents 不仅提供了核心描述,同时也包含了不同协议的指南说明(http,json,kafka,amqp...),当前也包含了一些语言的 实现(golang,python,csharp,javascript),很值得在项目中试用下 参考资料 https://cloudevents.io/ https://github.com/cloudevents/spec 原文地址

CANopen协议介绍

1.CANopen协议简介 从OSI 网络模型的角度来看,CAN总线只定义了OSI网络模型的第一层(物理层) 和第二层(数据链路层),而在实际设计中,这两层完全由硬件实现,设计人员无需再为此开发相关软件或固件. 同时,CAN只定义物理层和数据链路层,没有规定应用层,本身并不完整,因此需要一个高层协议来定义CAN报文中的11/29位标识符和8字节数据的使用.而且,基于CAN总线的工业自动化应用中,越来越需要一个开放的.标准化的高层协议:这个协议支持各种CAN厂商设备的互用性.互换性,能够实现在CA

[转载]拜占庭问题深入讨论 from http://bitkan.com/news/topic/14011

拜占庭将军问题深入探讨 了解过比特币和区块链的人,多少都听说过拜占庭将军问题,或听说过比特币(或区块链)的一个重要成就正是解决了拜占庭将军问题.但真正明白这个问题的人并不多,甚至知道这个问题实质的人都很罕见.本文是一篇技术科普,将重点提供了拜占庭将军问题本身对本质及经典算法的解析,并探讨与之相关的一些问题.笔者参考了不少文献,夹杂了大量私货,但并没有提出解决该问题的新算法,这也不是本文的目的. Part1:拜占庭将军问题是什么 拜占庭将军问题是一个共识问题: 首先由Leslie Lamport与

【转载文章】拜占庭将军问题深入探讨

原文地址:http://www.8btc.com/baizhantingjiangjun part1: 拜占庭将军问题是什么? 1.1 拜占庭将军问题场景 1.2 与拜占庭将军相关问题:两军问题 part2:问题实质及形式化 2.1 拜占庭将军问题实质 2.2 形式化条件的推演  1)一致性 2)正确性 Part3:口头协议 满足以下三个条件的方式称为口头协议: A1:每个被发送的消息都能够被正确的投递 A2:信息接收者知道是谁发送的消息 A3:能够知道缺少的消息 3.1 口头协议算法OM(m)

STL容器 -- Map

核心描述: map 就是从键(key) 到 值(value) 的一个映射.且键值不可重复,内部按照键值排序. 头文件: #include <map> 拓展: multimap 是一个多重映照容器,键值可以重复.unordered_set 是一个内部不排序的映射容器,需包含头文件<unordered_map> 构造方法: map<int, string> kvm; //构造一个键为 int 型, 值为 string 型的 map 元素的插入: kvm[1] = "

Php的框架有哪些

框架就是通过提供一个开发Web程序的基本架构,PHP开发框架把PHPWeb程序开发摆到了流水线上.换句话说,PHP开发框架有助于促进快速软件开发(RAD),这节约了你的时间,有助于创建更为稳定的程序,并减少开发者的重复编写代码的劳动.这些框架还通过确保正确的数据库操作以及只在表现层编程的方式帮助初学者创建稳定的程序.PHP开发框架使得你可以花更多的时间去创造真正的Web程序,而不是编写重复性的代码. 编辑本段PHP开发框架有哪些 最近一直以来php框架被广泛利用,多半都是基于mvc架构模式的,还

迷宫最短路径-货郎担问题的解决思路

要解决的问题: 给定一个迷宫,此迷宫中有且仅有一个入口和出口,其中设有若干检查点,要求从入口开始,经过所有检查点后到达出口所需的最短路径.其中路径中允许多次经过入口或出口或某检查点,但路径的开始和结尾必须分别是入口和出口.更形象一点就是要把图中所有的宝藏找出来带出去的问题.    连设计算法+写算法实现的论文+编写代码和制作演示动画,花费了四天时间,还是小有收获的赶脚.算法的核心描述就是先假设已经有一个最优路径,然后插入一个新的检查点时,如何使插入导致的路径增量最小.这种先假设存在最优路径然后再

如何搞定界面设计之构图篇(转)

人家设计得真好!”可是好在什么地方呢,却说不出来.这是阻挡你成为优秀设计师的一大障碍.设计是我们的本行,不会用设计语言来解构画面,是说不过去的. 移动互联网设计发展到今天,有很多传统的设计规律可以遵循,也提出了新的挑战.因为手持设备屏幕较小,如何在有限的页面内呈现或引导有效信息,又不显得杂乱臃肿,考验着设计师的能力. 为什么有的主题或App界面就那么舒服,那么清新,那么有情怀?里面蕴含着哪些最基础的版式设计理念,让我们一块梳理梳理,给初入ui设计的同学做个参考. 想成为一个合格的ui设计师,光会

UI设计教程-界面设计构图

九宫格构图,圆心点放射形构图,三角形构图,SF字形构图.       1.九宫格网格构图     这种版式主要运用在分类为主的一级页面,起到功能分类的作用. 通常在界面设计中,我们会利用网格在界面进行布局,根据水平方向和垂直方向划分所构成的辅助线,设计会进行得非常顺利.在界面设计中,九宫格这种类型的构图更为规范和常用,用户在使用过程中非常的方便,应用功能会显得格外的明确和突出. 九宫格给用户一目了然的感觉,操作便捷是这种构图方式最重要的优势. 九宫格看似简单随意,用好了同样能呈现出奇妙的效果.