forked from sysstat/sysstat
-
Notifications
You must be signed in to change notification settings - Fork 0
/
iostat.h
125 lines (111 loc) · 4.8 KB
/
iostat.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/*
* iostat: report CPU and I/O statistics
* (C) 1999-2014 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 0x00001
#define I_D_DISK 0x00002
#define I_D_TIMESTAMP 0x00004
#define I_D_EXTENDED 0x00008
#define I_D_PART_ALL 0x00010
#define I_D_KILOBYTES 0x00020
#define I_F_HAS_SYSFS 0x00040
#define I_D_DEBUG 0x00080
#define I_D_UNFILTERED 0x00100
#define I_D_MEGABYTES 0x00200
#define I_D_PARTITIONS 0x00400
#define I_F_HAS_DISKSTATS 0x00800
#define I_D_HUMAN_READ 0x01000
#define I_D_PERSIST_NAME 0x02000
#define I_D_OMIT_SINCE_BOOT 0x04000
/* Unused 0x08000 */
#define I_D_DEVMAP_NAME 0x10000
#define I_D_ISO 0x20000
#define I_D_GROUP_TOTAL_ONLY 0x40000
#define I_D_ZERO_OMIT 0x80000
#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_PART_ALL(m) (((m) & I_D_PART_ALL) == I_D_PART_ALL)
#define DISPLAY_KILOBYTES(m) (((m) & I_D_KILOBYTES) == I_D_KILOBYTES)
#define DISPLAY_MEGABYTES(m) (((m) & I_D_MEGABYTES) == I_D_MEGABYTES)
#define HAS_SYSFS(m) (((m) & I_F_HAS_SYSFS) == I_F_HAS_SYSFS)
#define DISPLAY_DEBUG(m) (((m) & I_D_DEBUG) == I_D_DEBUG)
#define DISPLAY_UNFILTERED(m) (((m) & I_D_UNFILTERED) == I_D_UNFILTERED)
#define DISPLAY_PARTITIONS(m) (((m) & I_D_PARTITIONS) == I_D_PARTITIONS)
#define HAS_DISKSTATS(m) (((m) & I_F_HAS_DISKSTATS) == I_F_HAS_DISKSTATS)
#define DISPLAY_HUMAN_READ(m) (((m) & I_D_HUMAN_READ) == I_D_HUMAN_READ)
#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)
/* Preallocation constants */
#define NR_DEV_PREALLOC 4
/* Environment variable */
#define ENV_POSIXLY_CORRECT "POSIXLY_CORRECT"
/*
* Structures for I/O stats.
* The number of structures allocated corresponds to the number of devices
* present in the system, plus a preallocation number to handle those
* that can be registered dynamically.
* The number of devices is found by using /sys filesystem (if mounted).
* For each io_stats structure allocated corresponds a io_hdr_stats structure.
* A io_stats structure is considered as unused or "free" (containing no stats
* for a particular device) if the 'major' field of the io_hdr_stats
* structure is set to 0.
*/
struct io_stats {
/* # of sectors read */
unsigned long rd_sectors __attribute__ ((aligned (8)));
/* # of sectors written */
unsigned long wr_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));
/* Time of read requests in queue */
unsigned int rd_ticks __attribute__ ((packed));
/* Time of write requests in queue */
unsigned int wr_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))
/* Possible values for field "status" in io_hdr_stats structure */
#define DISK_UNREGISTERED 0
#define DISK_REGISTERED 1
#define DISK_GROUP 2
/*
* Each io_stats structure has an associated io_hdr_stats structure.
* An io_hdr_stats structure tells if the corresponding device has been
* unregistered or not (status field) and also indicates the device name.
*/
struct io_hdr_stats {
unsigned int status __attribute__ ((aligned (4)));
unsigned int used __attribute__ ((packed));
char name[MAX_NAME_LEN];
};
#define IO_HDR_STATS_SIZE (sizeof(struct io_hdr_stats))
/* List of devices entered on the command line */
struct io_dlist {
/* Indicate whether its partitions are to be displayed or not */
int disp_part __attribute__ ((aligned (4)));
/* Device name */
char dev_name[MAX_NAME_LEN];
};
#define IO_DLIST_SIZE (sizeof(struct io_dlist))
#endif /* _IOSTAT_H */