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