sysstat/iostat.h

163 lines
5.5 KiB
C
Raw Normal View History

2023-02-28 13:51:48 +08:00
/*
* iostat: report CPU and I/O statistics
* (C) 1999-2022 by Sebastien Godard (sysstat <at> orange.fr)
*/
#ifndef _IOSTAT_H
#define _IOSTAT_H
#include "common.h"
/* I_: iostat - D_: Display - F_: Flag */
#define I_D_CPU 0x000001
#define I_D_DISK 0x000002
#define I_D_TIMESTAMP 0x000004
#define I_D_EXTENDED 0x000008
#define I_D_EVERYTHING 0x000010
#define I_D_KILOBYTES 0x000020
#define I_D_ALL_DIR 0x000040
#define I_D_DEBUG 0x000080
#define I_D_UNFILTERED 0x000100
#define I_D_MEGABYTES 0x000200
#define I_D_ALL_DEVICES 0x000400
#define I_F_GROUP_DEFINED 0x000800
#define I_D_PRETTY 0x001000
#define I_D_PERSIST_NAME 0x002000
#define I_D_OMIT_SINCE_BOOT 0x004000
#define I_D_JSON_OUTPUT 0x008000
#define I_D_DEVMAP_NAME 0x010000
#define I_D_ISO 0x020000
#define I_D_GROUP_TOTAL_ONLY 0x040000
#define I_D_ZERO_OMIT 0x080000
#define I_D_UNIT 0x100000
#define I_D_SHORT_OUTPUT 0x200000
#define I_D_COMPACT 0x400000
#define DISPLAY_CPU(m) (((m) & I_D_CPU) == I_D_CPU)
#define DISPLAY_DISK(m) (((m) & I_D_DISK) == I_D_DISK)
#define DISPLAY_TIMESTAMP(m) (((m) & I_D_TIMESTAMP) == I_D_TIMESTAMP)
#define DISPLAY_EXTENDED(m) (((m) & I_D_EXTENDED) == I_D_EXTENDED)
#define DISPLAY_EVERYTHING(m) (((m) & I_D_EVERYTHING) == I_D_EVERYTHING)
#define DISPLAY_KILOBYTES(m) (((m) & I_D_KILOBYTES) == I_D_KILOBYTES)
#define DISPLAY_MEGABYTES(m) (((m) & I_D_MEGABYTES) == I_D_MEGABYTES)
#define DISPLAY_DEBUG(m) (((m) & I_D_DEBUG) == I_D_DEBUG)
#define DISPLAY_UNFILTERED(m) (((m) & I_D_UNFILTERED) == I_D_UNFILTERED)
#define DISPLAY_ALL_DEVICES(m) (((m) & I_D_ALL_DEVICES) == I_D_ALL_DEVICES)
#define GROUP_DEFINED(m) (((m) & I_F_GROUP_DEFINED) == I_F_GROUP_DEFINED)
#define DISPLAY_PRETTY(m) (((m) & I_D_PRETTY) == I_D_PRETTY)
#define DISPLAY_PERSIST_NAME_I(m) (((m) & I_D_PERSIST_NAME) == I_D_PERSIST_NAME)
#define DISPLAY_OMIT_SINCE_BOOT(m) (((m) & I_D_OMIT_SINCE_BOOT) == I_D_OMIT_SINCE_BOOT)
#define DISPLAY_DEVMAP_NAME(m) (((m) & I_D_DEVMAP_NAME) == I_D_DEVMAP_NAME)
#define DISPLAY_ISO(m) (((m) & I_D_ISO) == I_D_ISO)
#define DISPLAY_GROUP_TOTAL_ONLY(m) (((m) & I_D_GROUP_TOTAL_ONLY) == I_D_GROUP_TOTAL_ONLY)
#define DISPLAY_ZERO_OMIT(m) (((m) & I_D_ZERO_OMIT) == I_D_ZERO_OMIT)
#define DISPLAY_JSON_OUTPUT(m) (((m) & I_D_JSON_OUTPUT) == I_D_JSON_OUTPUT)
#define DISPLAY_UNIT(m) (((m) & I_D_UNIT) == I_D_UNIT)
#define DISPLAY_SHORT_OUTPUT(m) (((m) & I_D_SHORT_OUTPUT) == I_D_SHORT_OUTPUT)
#define USE_ALL_DIR(m) (((m) & I_D_ALL_DIR) == I_D_ALL_DIR)
#define DISPLAY_COMPACT(m) (((m) & I_D_COMPACT) == I_D_COMPACT)
#define T_PART 0
#define T_DEV 1
#define T_PART_DEV 2
#define T_GROUP 3
#define UKWN_MAJ_NR 0
/* Environment variable */
#define ENV_POSIXLY_CORRECT "POSIXLY_CORRECT"
/*
* Structures for I/O stats.
* These are now dynamically allocated.
*/
struct io_stats {
/* # of sectors read */
unsigned long rd_sectors __attribute__ ((aligned (8)));
/* # of sectors written */
unsigned long wr_sectors __attribute__ ((packed));
/* # of sectors discarded */
unsigned long dc_sectors __attribute__ ((packed));
/* # of read operations issued to the device */
unsigned long rd_ios __attribute__ ((packed));
/* # of read requests merged */
unsigned long rd_merges __attribute__ ((packed));
/* # of write operations issued to the device */
unsigned long wr_ios __attribute__ ((packed));
/* # of write requests merged */
unsigned long wr_merges __attribute__ ((packed));
/* # of discard operations issued to the device */
unsigned long dc_ios __attribute__ ((packed));
/* # of discard requests merged */
unsigned long dc_merges __attribute__ ((packed));
/* # of flush requests issued to the device */
unsigned long fl_ios __attribute__ ((packed));
/* Time of read requests in queue */
unsigned int rd_ticks __attribute__ ((packed));
/* Time of write requests in queue */
unsigned int wr_ticks __attribute__ ((packed));
/* Time of discard requests in queue */
unsigned int dc_ticks __attribute__ ((packed));
/* Time of flush requests in queue */
unsigned int fl_ticks __attribute__ ((packed));
/* # of I/Os in progress */
unsigned int ios_pgr __attribute__ ((packed));
/* # of ticks total (for this device) for I/O */
unsigned int tot_ticks __attribute__ ((packed));
/* # of ticks requests spent in queue */
unsigned int rq_ticks __attribute__ ((packed));
};
#define IO_STATS_SIZE (sizeof(struct io_stats))
struct io_device {
char name[MAX_NAME_LEN];
/*
* 0: Not a whole device (T_PART)
* 1: whole device (T_DEV)
* 2: whole device and all its partitions to be read (T_PART_DEV)
* 3+: group name (T_GROUP) (4 means 1 device in the group, 5 means 2 devices in the group, etc.)
*/
int dev_tp;
/* TRUE if device exists in /proc/diskstats or /sys. Don't apply for groups. */
int exist;
/* major and minor numbers (not set for T_GROUP "devices") */
int major;
int minor;
struct io_stats *dev_stats[2];
struct io_device *next;
};
struct ext_io_stats {
/* r_await */
double r_await;
/* w_await */
double w_await;
/* d_await */
double d_await;
/* f_await */
double f_await;
/* rsec/s */
double rsectors;
/* wsec/s */
double wsectors;
/* dsec/s */
double dsectors;
/* sec/s */
double sectors;
/* %rrqm */
double rrqm_pc;
/* %wrqm */
double wrqm_pc;
/* %drqm */
double drqm_pc;
/* rareq-sz */
double rarqsz;
/* wareq-sz */
double warqsz;
/* dareq-sz */
double darqsz;
};
#endif /* _IOSTAT_H */