iostat的核心描述

來源:互聯網
上載者:User

標籤:統計


#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);
}

 

 

 

 


 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.