linux-headers (unknown)

(root)/
include/
linux/
taskstats.h
       1  /* SPDX-License-Identifier: LGPL-2.1 WITH Linux-syscall-note */
       2  /* taskstats.h - exporting per-task statistics
       3   *
       4   * Copyright (C) Shailabh Nagar, IBM Corp. 2006
       5   *           (C) Balbir Singh,   IBM Corp. 2006
       6   *           (C) Jay Lan,        SGI, 2006
       7   *
       8   * This program is free software; you can redistribute it and/or modify it
       9   * under the terms of version 2.1 of the GNU Lesser General Public License
      10   * as published by the Free Software Foundation.
      11   *
      12   * This program is distributed in the hope that it would be useful, but
      13   * WITHOUT ANY WARRANTY; without even the implied warranty of
      14   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
      15   */
      16  
      17  #ifndef _LINUX_TASKSTATS_H
      18  #define _LINUX_TASKSTATS_H
      19  
      20  #include <linux/types.h>
      21  
      22  /* Format for per-task data returned to userland when
      23   *	- a task exits
      24   *	- listener requests stats for a task
      25   *
      26   * The struct is versioned. Newer versions should only add fields to
      27   * the bottom of the struct to maintain backward compatibility.
      28   *
      29   *
      30   * To add new fields
      31   *	a) bump up TASKSTATS_VERSION
      32   *	b) add comment indicating new version number at end of struct
      33   *	c) add new fields after version comment; maintain 64-bit alignment
      34   */
      35  
      36  
      37  #define TASKSTATS_VERSION	14
      38  #define TS_COMM_LEN		32	/* should be >= TASK_COMM_LEN
      39  					 * in linux/sched.h */
      40  
      41  struct taskstats {
      42  
      43  	/* The version number of this struct. This field is always set to
      44  	 * TAKSTATS_VERSION, which is defined in <linux/taskstats.h>.
      45  	 * Each time the struct is changed, the value should be incremented.
      46  	 */
      47  	__u16	version;
      48  	__u32	ac_exitcode;		/* Exit status */
      49  
      50  	/* The accounting flags of a task as defined in <linux/acct.h>
      51  	 * Defined values are AFORK, ASU, ACOMPAT, ACORE, AXSIG, and AGROUP.
      52  	 * (AGROUP since version 12).
      53  	 */
      54  	__u8	ac_flag;		/* Record flags */
      55  	__u8	ac_nice;		/* task_nice */
      56  
      57  	/* Delay accounting fields start
      58  	 *
      59  	 * All values, until comment "Delay accounting fields end" are
      60  	 * available only if delay accounting is enabled, even though the last
      61  	 * few fields are not delays
      62  	 *
      63  	 * xxx_count is the number of delay values recorded
      64  	 * xxx_delay_total is the corresponding cumulative delay in nanoseconds
      65  	 *
      66  	 * xxx_delay_total wraps around to zero on overflow
      67  	 * xxx_count incremented regardless of overflow
      68  	 */
      69  
      70  	/* Delay waiting for cpu, while runnable
      71  	 * count, delay_total NOT updated atomically
      72  	 */
      73  	__u64	cpu_count __attribute__((aligned(8)));
      74  	__u64	cpu_delay_total;
      75  
      76  	/* Following four fields atomically updated using task->delays->lock */
      77  
      78  	/* Delay waiting for synchronous block I/O to complete
      79  	 * does not account for delays in I/O submission
      80  	 */
      81  	__u64	blkio_count;
      82  	__u64	blkio_delay_total;
      83  
      84  	/* Delay waiting for page fault I/O (swap in only) */
      85  	__u64	swapin_count;
      86  	__u64	swapin_delay_total;
      87  
      88  	/* cpu "wall-clock" running time
      89  	 * On some architectures, value will adjust for cpu time stolen
      90  	 * from the kernel in involuntary waits due to virtualization.
      91  	 * Value is cumulative, in nanoseconds, without a corresponding count
      92  	 * and wraps around to zero silently on overflow
      93  	 */
      94  	__u64	cpu_run_real_total;
      95  
      96  	/* cpu "virtual" running time
      97  	 * Uses time intervals seen by the kernel i.e. no adjustment
      98  	 * for kernel's involuntary waits due to virtualization.
      99  	 * Value is cumulative, in nanoseconds, without a corresponding count
     100  	 * and wraps around to zero silently on overflow
     101  	 */
     102  	__u64	cpu_run_virtual_total;
     103  	/* Delay accounting fields end */
     104  	/* version 1 ends here */
     105  
     106  	/* Basic Accounting Fields start */
     107  	char	ac_comm[TS_COMM_LEN];	/* Command name */
     108  	__u8	ac_sched __attribute__((aligned(8)));
     109  					/* Scheduling discipline */
     110  	__u8	ac_pad[3];
     111  	__u32	ac_uid __attribute__((aligned(8)));
     112  					/* User ID */
     113  	__u32	ac_gid;			/* Group ID */
     114  	__u32	ac_pid;			/* Process ID */
     115  	__u32	ac_ppid;		/* Parent process ID */
     116  	/* __u32 range means times from 1970 to 2106 */
     117  	__u32	ac_btime;		/* Begin time [sec since 1970] */
     118  	__u64	ac_etime __attribute__((aligned(8)));
     119  					/* Elapsed time [usec] */
     120  	__u64	ac_utime;		/* User CPU time [usec] */
     121  	__u64	ac_stime;		/* SYstem CPU time [usec] */
     122  	__u64	ac_minflt;		/* Minor Page Fault Count */
     123  	__u64	ac_majflt;		/* Major Page Fault Count */
     124  	/* Basic Accounting Fields end */
     125  
     126  	/* Extended accounting fields start */
     127  	/* Accumulated RSS usage in duration of a task, in MBytes-usecs.
     128  	 * The current rss usage is added to this counter every time
     129  	 * a tick is charged to a task's system time. So, at the end we
     130  	 * will have memory usage multiplied by system time. Thus an
     131  	 * average usage per system time unit can be calculated.
     132  	 */
     133  	__u64	coremem;		/* accumulated RSS usage in MB-usec */
     134  	/* Accumulated virtual memory usage in duration of a task.
     135  	 * Same as acct_rss_mem1 above except that we keep track of VM usage.
     136  	 */
     137  	__u64	virtmem;		/* accumulated VM  usage in MB-usec */
     138  
     139  	/* High watermark of RSS and virtual memory usage in duration of
     140  	 * a task, in KBytes.
     141  	 */
     142  	__u64	hiwater_rss;		/* High-watermark of RSS usage, in KB */
     143  	__u64	hiwater_vm;		/* High-water VM usage, in KB */
     144  
     145  	/* The following four fields are I/O statistics of a task. */
     146  	__u64	read_char;		/* bytes read */
     147  	__u64	write_char;		/* bytes written */
     148  	__u64	read_syscalls;		/* read syscalls */
     149  	__u64	write_syscalls;		/* write syscalls */
     150  	/* Extended accounting fields end */
     151  
     152  #define TASKSTATS_HAS_IO_ACCOUNTING
     153  	/* Per-task storage I/O accounting starts */
     154  	__u64	read_bytes;		/* bytes of read I/O */
     155  	__u64	write_bytes;		/* bytes of write I/O */
     156  	__u64	cancelled_write_bytes;	/* bytes of cancelled write I/O */
     157  
     158  	__u64  nvcsw;			/* voluntary_ctxt_switches */
     159  	__u64  nivcsw;			/* nonvoluntary_ctxt_switches */
     160  
     161  	/* time accounting for SMT machines */
     162  	__u64	ac_utimescaled;		/* utime scaled on frequency etc */
     163  	__u64	ac_stimescaled;		/* stime scaled on frequency etc */
     164  	__u64	cpu_scaled_run_real_total; /* scaled cpu_run_real_total */
     165  
     166  	/* Delay waiting for memory reclaim */
     167  	__u64	freepages_count;
     168  	__u64	freepages_delay_total;
     169  
     170  	/* Delay waiting for thrashing page */
     171  	__u64	thrashing_count;
     172  	__u64	thrashing_delay_total;
     173  
     174  	/* v10: 64-bit btime to avoid overflow */
     175  	__u64	ac_btime64;		/* 64-bit begin time */
     176  
     177  	/* v11: Delay waiting for memory compact */
     178  	__u64	compact_count;
     179  	__u64	compact_delay_total;
     180  
     181  	/* v12 begin */
     182  	__u32   ac_tgid;	/* thread group ID */
     183  	/* Thread group walltime up to now. This is total process walltime if
     184  	 * AGROUP flag is set.
     185  	 */
     186  	__u64	ac_tgetime __attribute__((aligned(8)));
     187  	/* Lightweight information to identify process binary files.
     188  	 * This leaves userspace to match this to a file system path, using
     189  	 * MAJOR() and MINOR() macros to identify a device and mount point,
     190  	 * the inode to identify the executable file. This is /proc/self/exe
     191  	 * at the end, so matching the most recent exec(). Values are zero
     192  	 * for kernel threads.
     193  	 */
     194  	__u64   ac_exe_dev;     /* program binary device ID */
     195  	__u64   ac_exe_inode;   /* program binary inode number */
     196  	/* v12 end */
     197  
     198  	/* v13: Delay waiting for write-protect copy */
     199  	__u64    wpcopy_count;
     200  	__u64    wpcopy_delay_total;
     201  
     202  	/* v14: Delay waiting for IRQ/SOFTIRQ */
     203  	__u64    irq_count;
     204  	__u64    irq_delay_total;
     205  };
     206  
     207  
     208  /*
     209   * Commands sent from userspace
     210   * Not versioned. New commands should only be inserted at the enum's end
     211   * prior to __TASKSTATS_CMD_MAX
     212   */
     213  
     214  enum {
     215  	TASKSTATS_CMD_UNSPEC = 0,	/* Reserved */
     216  	TASKSTATS_CMD_GET,		/* user->kernel request/get-response */
     217  	TASKSTATS_CMD_NEW,		/* kernel->user event */
     218  	__TASKSTATS_CMD_MAX,
     219  };
     220  
     221  #define TASKSTATS_CMD_MAX (__TASKSTATS_CMD_MAX - 1)
     222  
     223  enum {
     224  	TASKSTATS_TYPE_UNSPEC = 0,	/* Reserved */
     225  	TASKSTATS_TYPE_PID,		/* Process id */
     226  	TASKSTATS_TYPE_TGID,		/* Thread group id */
     227  	TASKSTATS_TYPE_STATS,		/* taskstats structure */
     228  	TASKSTATS_TYPE_AGGR_PID,	/* contains pid + stats */
     229  	TASKSTATS_TYPE_AGGR_TGID,	/* contains tgid + stats */
     230  	TASKSTATS_TYPE_NULL,		/* contains nothing */
     231  	__TASKSTATS_TYPE_MAX,
     232  };
     233  
     234  #define TASKSTATS_TYPE_MAX (__TASKSTATS_TYPE_MAX - 1)
     235  
     236  enum {
     237  	TASKSTATS_CMD_ATTR_UNSPEC = 0,
     238  	TASKSTATS_CMD_ATTR_PID,
     239  	TASKSTATS_CMD_ATTR_TGID,
     240  	TASKSTATS_CMD_ATTR_REGISTER_CPUMASK,
     241  	TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK,
     242  	__TASKSTATS_CMD_ATTR_MAX,
     243  };
     244  
     245  #define TASKSTATS_CMD_ATTR_MAX (__TASKSTATS_CMD_ATTR_MAX - 1)
     246  
     247  /* NETLINK_GENERIC related info */
     248  
     249  #define TASKSTATS_GENL_NAME	"TASKSTATS"
     250  #define TASKSTATS_GENL_VERSION	0x1
     251  
     252  #endif /* _LINUX_TASKSTATS_H */