]> granicus.if.org Git - sysstat/blobdiff - pidstat.h
Merge branch 'scop-grep-E'
[sysstat] / pidstat.h
index 03208ef5c4988b4613e695c68aba576d017758d8..b4f9758561ff1c4d7791069768f3fc445bd702c2 100644 (file)
--- a/pidstat.h
+++ b/pidstat.h
@@ -1,11 +1,16 @@
 /*
  * pidstat: Display per-process statistics.
- * (C) 2007-2014 by Sebastien Godard (sysstat <at> orange.fr)
+ * (C) 2007-2021 by Sebastien Godard (sysstat <at> orange.fr)
  */
-
 #ifndef _PIDSTAT_H
 #define _PIDSTAT_H
 
+#ifdef HAVE_SYS_PARAM_H
+#include <sys/param.h>
+/* sys/param.h defines HZ but needed for _POSIX_ARG_MAX and LOGIN_NAME_MAX */
+#undef HZ
+#endif
+#include "common.h"
 
 #define K_SELF         "SELF"
 
 #define K_P_CHILD      "CHILD"
 #define K_P_ALL                "ALL"
 
-#define NR_PID_PREALLOC        10
+#ifdef _POSIX_ARG_MAX
+#define MAX_COMM_LEN    _POSIX_ARG_MAX
+#define MAX_CMDLINE_LEN _POSIX_ARG_MAX
+#else
+#define MAX_COMM_LEN    128
+#define MAX_CMDLINE_LEN 128
+#endif
 
-#define MAX_COMM_LEN   128
-#define MAX_CMDLINE_LEN        128
-#define MAX_USER_LEN   32
+#ifdef LOGIN_NAME_MAX
+#define MAX_USER_LEN    LOGIN_NAME_MAX
+#else
+#define MAX_USER_LEN    32
+#endif
 
 /* Activities */
 #define P_A_CPU                0x01
 #define DISPLAY_TASK_STATS(m)  (((m) & P_TASK) == P_TASK)
 #define DISPLAY_CHILD_STATS(m) (((m) & P_CHILD) == P_CHILD)
 
-#define P_D_PID                0x001
-#define P_D_ALL_PID    0x002
-#define P_F_IRIX_MODE  0x004
-#define P_F_COMMSTR    0x008
-#define P_D_ACTIVE_PID 0x010
-#define P_D_TID                0x020
-#define P_D_ONELINE    0x040
-#define P_D_CMDLINE    0x080
-#define P_D_USERNAME   0x100
-#define P_F_USERSTR    0x200
-#define P_F_PROCSTR    0x400
+#define P_D_PID                0x0001
+#define P_D_ALL_PID    0x0002
+#define P_F_IRIX_MODE  0x0004
+#define P_F_COMMSTR    0x0008
+#define P_D_ACTIVE_PID 0x0010
+#define P_D_TID                0x0020
+#define P_D_ONELINE    0x0040
+#define P_D_CMDLINE    0x0080
+#define P_D_USERNAME   0x0100
+#define P_F_USERSTR    0x0200
+#define P_F_PROCSTR    0x0400
+#define P_D_UNIT       0x0800
+#define P_D_SEC_EPOCH  0x1000
+#define P_F_EXEC_PGM   0x2000
 
 #define DISPLAY_PID(m)         (((m) & P_D_PID) == P_D_PID)
 #define DISPLAY_ALL_PID(m)     (((m) & P_D_ALL_PID) == P_D_ALL_PID)
 #define DISPLAY_USERNAME(m)    (((m) & P_D_USERNAME) == P_D_USERNAME)
 #define USER_STRING(m)         (((m) & P_F_USERSTR) == P_F_USERSTR)
 #define PROCESS_STRING(m)      (((m) & P_F_PROCSTR) == P_F_PROCSTR)
+#define DISPLAY_UNIT(m)                (((m) & P_D_UNIT) == P_D_UNIT)
+#define PRINT_SEC_EPOCH(m)     (((m) & P_D_SEC_EPOCH) == P_D_SEC_EPOCH)
+#define EXEC_PGM(m)            (((m) & P_F_EXEC_PGM) == P_F_EXEC_PGM)
 
 /* Per-process flags */
 #define F_NO_PID_IO    0x01
 #define F_NO_PID_FD    0x02
+#define F_PID_DISPLAYED        0x04
 
 #define NO_PID_IO(m)           (((m) & F_NO_PID_IO) == F_NO_PID_IO)
 #define NO_PID_FD(m)           (((m) & F_NO_PID_FD) == F_NO_PID_FD)
+#define IS_PID_DISPLAYED(m)    (((m) & F_PID_DISPLAYED) == F_PID_DISPLAYED)
 
 
-#define PROC           "/proc"
+#define PROC           PRE "/proc"
 
-#define PID_STAT       "/proc/%u/stat"
-#define PID_STATUS     "/proc/%u/status"
-#define PID_IO         "/proc/%u/io"
-#define PID_CMDLINE    "/proc/%u/cmdline"
-#define PID_SMAP       "/proc/%u/smaps"
-#define PID_FD         "/proc/%u/fd"
+#define PID_STAT       PRE "/proc/%u/stat"
+#define PID_STATUS     PRE "/proc/%u/status"
+#define PID_IO         PRE "/proc/%u/io"
+#define PID_CMDLINE    PRE "/proc/%u/cmdline"
+#define PID_SMAP       PRE "/proc/%u/smaps"
+#define PID_FD         PRE "/proc/%u/fd"
+#define PID_SCHED      PRE "/proc/%u/schedstat"
 
-#define PROC_TASK      "/proc/%u/task"
-#define TASK_STAT      "/proc/%u/task/%u/stat"
-#define TASK_STATUS    "/proc/%u/task/%u/status"
-#define TASK_IO                "/proc/%u/task/%u/io"
-#define TASK_CMDLINE   "/proc/%u/task/%u/cmdline"
-#define TASK_SMAP      "/proc/%u/task/%u/smaps"
-#define TASK_FD                "/proc/%u/task/%u/fd"
+#define PROC_TASK      PRE "/proc/%u/task"
+#define TASK_STAT      PRE "/proc/%u/task/%u/stat"
+#define TASK_SCHED     PRE "/proc/%u/task/%u/schedstat"
+#define TASK_STATUS    PRE "/proc/%u/task/%u/status"
+#define TASK_IO                PRE "/proc/%u/task/%u/io"
+#define TASK_CMDLINE   PRE "/proc/%u/task/%u/cmdline"
+#define TASK_SMAP      PRE "/proc/%u/task/%u/smaps"
+#define TASK_FD                PRE "/proc/%u/task/%u/fd"
 
 #define PRINT_ID_HDR(_timestamp_, _flag_)      do {                                            \
                                                        printf("\n%-11s", _timestamp_); \
 #ifndef SCHED_IDLE
 #define SCHED_IDLE     5
 #endif
+#ifndef SCHED_DEADLINE
+#define SCHED_DEADLINE 6
+#endif
 
 #define GET_POLICY(p) \
-       (p == SCHED_NORMAL ? "NORMAL" : \
-       (p == SCHED_FIFO   ? "FIFO" : \
-       (p == SCHED_RR     ? "RR" : \
-       (p == SCHED_BATCH  ? "BATCH" : \
-       (p == SCHED_IDLE   ? "IDLE" : \
-       "?")))))
+       (p == SCHED_NORMAL   ? "NORMAL" : \
+       (p == SCHED_FIFO     ? "FIFO" : \
+       (p == SCHED_RR       ? "RR" : \
+       (p == SCHED_BATCH    ? "BATCH" : \
+       (p == SCHED_IDLE     ? "IDLE" : \
+       (p == SCHED_DEADLINE ? "DEADLN" : \
+       "?"))))))
 
 struct pid_stats {
-       unsigned long long read_bytes                   __attribute__ ((aligned (16)));
+       unsigned long long read_bytes                   __attribute__ ((aligned (8)));
        unsigned long long write_bytes                  __attribute__ ((packed));
        unsigned long long cancelled_write_bytes        __attribute__ ((packed));
-       unsigned long long total_vsz                    __attribute__ ((packed));
-       unsigned long long total_rss                    __attribute__ ((packed));
-       unsigned long long total_stack_size             __attribute__ ((packed));
-       unsigned long long total_stack_ref              __attribute__ ((packed));
-       unsigned long long total_threads                __attribute__ ((packed));
-       unsigned long long total_fd_nr                  __attribute__ ((packed));
        unsigned long long blkio_swapin_delays          __attribute__ ((packed));
        unsigned long long minflt                       __attribute__ ((packed));
        unsigned long long cminflt                      __attribute__ ((packed));
@@ -156,33 +177,44 @@ struct pid_stats {
        long long          cstime                       __attribute__ ((packed));
        unsigned long long gtime                        __attribute__ ((packed));
        long long          cgtime                       __attribute__ ((packed));
+       unsigned long long wtime                        __attribute__ ((packed));
        unsigned long long vsz                          __attribute__ ((packed));
        unsigned long long rss                          __attribute__ ((packed));
        unsigned long      nvcsw                        __attribute__ ((packed));
        unsigned long      nivcsw                       __attribute__ ((packed));
        unsigned long      stack_size                   __attribute__ ((packed));
        unsigned long      stack_ref                    __attribute__ ((packed));
-       /* If pid is null, the process has terminated */
-       unsigned int       pid                          __attribute__ ((packed));
-       /* If tgid is not null, then this PID is in fact a TID */
-       unsigned int       tgid                         __attribute__ ((packed));
-       unsigned int       rt_asum_count                __attribute__ ((packed));
-       unsigned int       rc_asum_count                __attribute__ ((packed));
-       unsigned int       uc_asum_count                __attribute__ ((packed));
-       unsigned int       tf_asum_count                __attribute__ ((packed));
-       unsigned int       sk_asum_count                __attribute__ ((packed));
-       unsigned int       delay_asum_count             __attribute__ ((packed));
        unsigned int       processor                    __attribute__ ((packed));
        unsigned int       priority                     __attribute__ ((packed));
        unsigned int       policy                       __attribute__ ((packed));
-       unsigned int       flags                        __attribute__ ((packed));
-       unsigned int       uid                          __attribute__ ((packed));
        unsigned int       threads                      __attribute__ ((packed));
        unsigned int       fd_nr                        __attribute__ ((packed));
-       char               comm[MAX_COMM_LEN];
-       char               cmdline[MAX_CMDLINE_LEN];
 };
 
 #define PID_STATS_SIZE (sizeof(struct pid_stats))
 
+struct st_pid {
+       unsigned long long total_vsz;
+       unsigned long long total_rss;
+       unsigned long long total_stack_size;
+       unsigned long long total_stack_ref;
+       unsigned long long total_threads;
+       unsigned long long total_fd_nr;
+       pid_t              pid;
+       uid_t              uid;
+       int                exist;       /* TRUE if PID exists */
+       unsigned int       flags;
+       unsigned int       rt_asum_count;
+       unsigned int       rc_asum_count;
+       unsigned int       uc_asum_count;
+       unsigned int       tf_asum_count;
+       unsigned int       sk_asum_count;
+       unsigned int       delay_asum_count;
+       struct pid_stats  *pstats[3];
+       struct st_pid     *tgid;        /* If current task is a TID, pointer to its TGID. NULL otherwise. */
+       struct st_pid     *next;
+       char               comm[MAX_COMM_LEN];
+       char               cmdline[MAX_CMDLINE_LEN];
+};
+
 #endif  /* _PIDSTAT_H */