2 * iostat: report CPU and I/O statistics
3 * (C) 1999-2016 by Sebastien Godard (sysstat <at> orange.fr)
11 /* I_: iostat - D_: Display - F_: Flag */
12 #define I_D_CPU 0x00001
13 #define I_D_DISK 0x00002
14 #define I_D_TIMESTAMP 0x00004
15 #define I_D_EXTENDED 0x00008
16 #define I_D_PART_ALL 0x00010
17 #define I_D_KILOBYTES 0x00020
18 #define I_F_HAS_SYSFS 0x00040
19 #define I_D_DEBUG 0x00080
20 #define I_D_UNFILTERED 0x00100
21 #define I_D_MEGABYTES 0x00200
22 #define I_D_PARTITIONS 0x00400
23 #define I_F_HAS_DISKSTATS 0x00800
24 #define I_D_HUMAN_READ 0x01000
25 #define I_D_PERSIST_NAME 0x02000
26 #define I_D_OMIT_SINCE_BOOT 0x04000
27 #define I_D_JSON_OUTPUT 0x08000
28 #define I_D_DEVMAP_NAME 0x10000
29 #define I_D_ISO 0x20000
30 #define I_D_GROUP_TOTAL_ONLY 0x40000
31 #define I_D_ZERO_OMIT 0x80000
33 #define DISPLAY_CPU(m) (((m) & I_D_CPU) == I_D_CPU)
34 #define DISPLAY_DISK(m) (((m) & I_D_DISK) == I_D_DISK)
35 #define DISPLAY_TIMESTAMP(m) (((m) & I_D_TIMESTAMP) == I_D_TIMESTAMP)
36 #define DISPLAY_EXTENDED(m) (((m) & I_D_EXTENDED) == I_D_EXTENDED)
37 #define DISPLAY_PART_ALL(m) (((m) & I_D_PART_ALL) == I_D_PART_ALL)
38 #define DISPLAY_KILOBYTES(m) (((m) & I_D_KILOBYTES) == I_D_KILOBYTES)
39 #define DISPLAY_MEGABYTES(m) (((m) & I_D_MEGABYTES) == I_D_MEGABYTES)
40 #define HAS_SYSFS(m) (((m) & I_F_HAS_SYSFS) == I_F_HAS_SYSFS)
41 #define DISPLAY_DEBUG(m) (((m) & I_D_DEBUG) == I_D_DEBUG)
42 #define DISPLAY_UNFILTERED(m) (((m) & I_D_UNFILTERED) == I_D_UNFILTERED)
43 #define DISPLAY_PARTITIONS(m) (((m) & I_D_PARTITIONS) == I_D_PARTITIONS)
44 #define HAS_DISKSTATS(m) (((m) & I_F_HAS_DISKSTATS) == I_F_HAS_DISKSTATS)
45 #define DISPLAY_HUMAN_READ(m) (((m) & I_D_HUMAN_READ) == I_D_HUMAN_READ)
46 #define DISPLAY_PERSIST_NAME_I(m) (((m) & I_D_PERSIST_NAME) == I_D_PERSIST_NAME)
47 #define DISPLAY_OMIT_SINCE_BOOT(m) (((m) & I_D_OMIT_SINCE_BOOT) == I_D_OMIT_SINCE_BOOT)
48 #define DISPLAY_DEVMAP_NAME(m) (((m) & I_D_DEVMAP_NAME) == I_D_DEVMAP_NAME)
49 #define DISPLAY_ISO(m) (((m) & I_D_ISO) == I_D_ISO)
50 #define DISPLAY_GROUP_TOTAL_ONLY(m) (((m) & I_D_GROUP_TOTAL_ONLY) == I_D_GROUP_TOTAL_ONLY)
51 #define DISPLAY_ZERO_OMIT(m) (((m) & I_D_ZERO_OMIT) == I_D_ZERO_OMIT)
52 #define DISPLAY_JSON_OUTPUT(m) (((m) & I_D_JSON_OUTPUT) == I_D_JSON_OUTPUT)
54 /* Preallocation constants */
55 #define NR_DEV_PREALLOC 4
57 /* Environment variable */
58 #define ENV_POSIXLY_CORRECT "POSIXLY_CORRECT"
61 * Structures for I/O stats.
62 * The number of structures allocated corresponds to the number of devices
63 * present in the system, plus a preallocation number to handle those
64 * that can be registered dynamically.
65 * The number of devices is found by using /sys filesystem (if mounted).
66 * For each io_stats structure allocated corresponds a io_hdr_stats structure.
67 * A io_stats structure is considered as unused or "free" (containing no stats
68 * for a particular device) if the 'major' field of the io_hdr_stats
69 * structure is set to 0.
72 /* # of sectors read */
73 unsigned long rd_sectors __attribute__ ((aligned (8)));
74 /* # of sectors written */
75 unsigned long wr_sectors __attribute__ ((packed));
76 /* # of read operations issued to the device */
77 unsigned long rd_ios __attribute__ ((packed));
78 /* # of read requests merged */
79 unsigned long rd_merges __attribute__ ((packed));
80 /* # of write operations issued to the device */
81 unsigned long wr_ios __attribute__ ((packed));
82 /* # of write requests merged */
83 unsigned long wr_merges __attribute__ ((packed));
84 /* Time of read requests in queue */
85 unsigned int rd_ticks __attribute__ ((packed));
86 /* Time of write requests in queue */
87 unsigned int wr_ticks __attribute__ ((packed));
88 /* # of I/Os in progress */
89 unsigned int ios_pgr __attribute__ ((packed));
90 /* # of ticks total (for this device) for I/O */
91 unsigned int tot_ticks __attribute__ ((packed));
92 /* # of ticks requests spent in queue */
93 unsigned int rq_ticks __attribute__ ((packed));
96 #define IO_STATS_SIZE (sizeof(struct io_stats))
98 /* Possible values for field "status" in io_hdr_stats structure */
99 #define DISK_UNREGISTERED 0
100 #define DISK_REGISTERED 1
104 * Each io_stats structure has an associated io_hdr_stats structure.
105 * An io_hdr_stats structure tells if the corresponding device has been
106 * unregistered or not (status field) and also indicates the device name.
108 struct io_hdr_stats {
109 unsigned int status __attribute__ ((aligned (4)));
110 unsigned int used __attribute__ ((packed));
111 char name[MAX_NAME_LEN];
114 #define IO_HDR_STATS_SIZE (sizeof(struct io_hdr_stats))
116 /* List of devices entered on the command line */
118 /* Indicate whether its partitions are to be displayed or not */
119 int disp_part __attribute__ ((aligned (4)));
121 char dev_name[MAX_NAME_LEN];
124 #define IO_DLIST_SIZE (sizeof(struct io_dlist))
126 #endif /* _IOSTAT_H */