]> granicus.if.org Git - sysstat/blobdiff - iostat.h
sadf: Display timezone for all output formats
[sysstat] / iostat.h
index ad04fff520640c117651eaab9d6c9f0b291268a9..380263c2eba33df85e602916015a0c6e210cc4b2 100644 (file)
--- a/iostat.h
+++ b/iostat.h
@@ -1,6 +1,6 @@
 /*
  * iostat: report CPU and I/O statistics
- * (C) 1999-2018 by Sebastien Godard (sysstat <at> orange.fr)
+ * (C) 1999-2022 by Sebastien Godard (sysstat <at> orange.fr)
  */
 
 #ifndef _IOSTAT_H
 #define I_D_DISK               0x000002
 #define I_D_TIMESTAMP          0x000004
 #define I_D_EXTENDED           0x000008
-#define I_D_PART_ALL           0x000010
+#define I_D_EVERYTHING         0x000010
 #define I_D_KILOBYTES          0x000020
-#define I_F_HAS_SYSFS          0x000040
+#define I_D_ALL_DIR            0x000040
 #define I_D_DEBUG              0x000080
 #define I_D_UNFILTERED         0x000100
 #define I_D_MEGABYTES          0x000200
-#define I_D_PARTITIONS         0x000400
-#define I_F_HAS_DISKSTATS      0x000800
-#define I_D_HUMAN_READ         0x001000
+#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_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_PART_ALL(m)            (((m) & I_D_PART_ALL)         == I_D_PART_ALL)
+#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 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_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_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)
 
-/* Preallocation constants */
-#define NR_DEV_PREALLOC                4
+#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.
- * 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.
+ * 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 */
@@ -85,10 +86,20 @@ struct io_stats {
        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 */
@@ -99,53 +110,53 @@ struct io_stats {
 
 #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;
 };
 
-/* 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 */