]> granicus.if.org Git - sysstat/blob - iostat.h
Start version 10.0.0.
[sysstat] / iostat.h
1 /*
2  * iostat: report CPU and I/O statistics
3  * (C) 1999-2011 by Sebastien Godard (sysstat <at> orange.fr)
4  */
5
6 #ifndef _IOSTAT_H
7 #define _IOSTAT_H
8
9 #include "common.h"
10
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 /* Unused                       0x01000 */
25 /* Unused                       0x02000 */
26 /* Unused                       0x04000 */
27 /* Unused                       0x08000 */
28 #define I_D_DEVMAP_NAME         0x10000
29 #define I_D_ISO                 0x20000
30 /* Unused                       0x40000 */
31 #define I_D_ZERO_OMIT           0x80000
32
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_DEVMAP_NAME(m)  (((m) & I_D_DEVMAP_NAME)   == I_D_DEVMAP_NAME)
46 #define DISPLAY_ISO(m)          (((m) & I_D_ISO)           == I_D_ISO)
47 #define DISPLAY_ZERO_OMIT(m)    (((m) & I_D_ZERO_OMIT)     == I_D_ZERO_OMIT)
48
49 /* Preallocation constats */
50 #define NR_DEV_PREALLOC         4
51 #define NR_DISK_PREALLOC        3
52
53 /* Environment variable */
54 #define ENV_POSIXLY_CORRECT     "POSIXLY_CORRECT"
55
56 /*
57  * Structures for I/O stats.
58  * The number of structures allocated corresponds to the number of devices
59  * present in the system, plus a preallocation number to handle those
60  * that can be registered dynamically.
61  * The number of devices is found by using /sys filesystem (if mounted),
62  * or the number of "disk_io:" entries in /proc/stat (2.4 kernels),
63  * else the default value is 4 (for old kernels, which maintained stats
64  * for the first four devices in /proc/stat).
65  * For each io_stats structure allocated corresponds a io_hdr_stats structure.
66  * A io_stats structure is considered as unused or "free" (containing no stats
67  * for a particular device) if the 'major' field of the io_hdr_stats
68  * structure is set to 0.
69  */
70 struct io_stats {
71         /* # of sectors read */
72         unsigned long long rd_sectors   __attribute__ ((aligned (8)));
73         /* # of sectors written */
74         unsigned long long wr_sectors   __attribute__ ((packed));
75         /* # of read operations issued to the device */
76         unsigned long rd_ios            __attribute__ ((packed));
77         /* # of read requests merged */
78         unsigned long rd_merges         __attribute__ ((packed));
79         /* Time of read requests in queue */
80         unsigned long rd_ticks          __attribute__ ((packed));
81         /* # of write operations issued to the device */
82         unsigned long wr_ios            __attribute__ ((packed));
83         /* # of write requests merged */
84         unsigned long wr_merges         __attribute__ ((packed));
85         /* Time of write requests in queue */
86         unsigned long wr_ticks          __attribute__ ((packed));
87         /* # of I/Os in progress */
88         unsigned long ios_pgr           __attribute__ ((packed));
89         /* # of ticks total (for this device) for I/O */
90         unsigned long tot_ticks         __attribute__ ((packed));
91         /* # of ticks requests spent in queue */
92         unsigned long rq_ticks          __attribute__ ((packed));
93         /* # of I/O done since last reboot */
94         unsigned long dk_drive          __attribute__ ((packed));
95         /* # of blocks read */
96         unsigned long dk_drive_rblk     __attribute__ ((packed));
97         /* # of blocks written */
98         unsigned long dk_drive_wblk     __attribute__ ((packed));
99 };
100
101 #define IO_STATS_SIZE   (sizeof(struct io_stats))
102
103 struct io_hdr_stats {
104         unsigned int active             __attribute__ ((aligned (4)));
105         unsigned int used               __attribute__ ((packed));
106         char name[MAX_NAME_LEN];
107 };
108
109 #define IO_HDR_STATS_SIZE       (sizeof(struct io_hdr_stats))
110
111 /* List of devices entered on the command line */
112 struct io_dlist {
113         /* Indicate whether its partitions are to be displayed or not */
114         int disp_part                   __attribute__ ((aligned (4)));
115         /* Device name */
116         char dev_name[MAX_NAME_LEN];
117 };
118
119 #define IO_DLIST_SIZE   (sizeof(struct io_dlist))
120
121 #endif  /* _IOSTAT_H */