1/* taskstats.h - exporting per-task statistics 2 * 3 * Copyright (C) Shailabh Nagar, IBM Corp. 2006 4 * (C) Balbir Singh, IBM Corp. 2006 5 * 6 * This program is free software; you can redistribute it and/or modify it 7 * under the terms of version 2.1 of the GNU Lesser General Public License 8 * as published by the Free Software Foundation. 9 * 10 * This program is distributed in the hope that it would be useful, but 11 * WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 13 */ 14 15#ifndef _LINUX_TASKSTATS_H 16#define _LINUX_TASKSTATS_H 17 18/* Format for per-task data returned to userland when 19 * - a task exits 20 * - listener requests stats for a task 21 * 22 * The struct is versioned. Newer versions should only add fields to 23 * the bottom of the struct to maintain backward compatibility. 24 * 25 * 26 * To add new fields 27 * a) bump up TASKSTATS_VERSION 28 * b) add comment indicating new version number at end of struct 29 * c) add new fields after version comment; maintain 64-bit alignment 30 */ 31 32#define TASKSTATS_VERSION 1 33 34struct taskstats { 35 36 /* Version 1 */ 37 __u16 version; 38 __u16 padding[3]; /* Userspace should not interpret the padding 39 * field which can be replaced by useful 40 * fields if struct taskstats is extended. 41 */ 42 43 /* Delay accounting fields start 44 * 45 * All values, until comment "Delay accounting fields end" are 46 * available only if delay accounting is enabled, even though the last 47 * few fields are not delays 48 * 49 * xxx_count is the number of delay values recorded 50 * xxx_delay_total is the corresponding cumulative delay in nanoseconds 51 * 52 * xxx_delay_total wraps around to zero on overflow 53 * xxx_count incremented regardless of overflow 54 */ 55 56 /* Delay waiting for cpu, while runnable 57 * count, delay_total NOT updated atomically 58 */ 59 __u64 cpu_count; 60 __u64 cpu_delay_total; 61 62 /* Following four fields atomically updated using task->delays->lock */ 63 64 /* Delay waiting for synchronous block I/O to complete 65 * does not account for delays in I/O submission 66 */ 67 __u64 blkio_count; 68 __u64 blkio_delay_total; 69 70 /* Delay waiting for page fault I/O (swap in only) */ 71 __u64 swapin_count; 72 __u64 swapin_delay_total; 73 74 /* cpu "wall-clock" running time 75 * On some architectures, value will adjust for cpu time stolen 76 * from the kernel in involuntary waits due to virtualization. 77 * Value is cumulative, in nanoseconds, without a corresponding count 78 * and wraps around to zero silently on overflow 79 */ 80 __u64 cpu_run_real_total; 81 82 /* cpu "virtual" running time 83 * Uses time intervals seen by the kernel i.e. no adjustment 84 * for kernel's involuntary waits due to virtualization. 85 * Value is cumulative, in nanoseconds, without a corresponding count 86 * and wraps around to zero silently on overflow 87 */ 88 __u64 cpu_run_virtual_total; 89 /* Delay accounting fields end */ 90 /* version 1 ends here */ 91}; 92 93 94/* 95 * Commands sent from userspace 96 * Not versioned. New commands should only be inserted at the enum's end 97 * prior to __TASKSTATS_CMD_MAX 98 */ 99 100enum { 101 TASKSTATS_CMD_UNSPEC = 0, /* Reserved */ 102 TASKSTATS_CMD_GET, /* user->kernel request/get-response */ 103 TASKSTATS_CMD_NEW, /* kernel->user event */ 104 __TASKSTATS_CMD_MAX, 105}; 106 107#define TASKSTATS_CMD_MAX (__TASKSTATS_CMD_MAX - 1) 108 109enum { 110 TASKSTATS_TYPE_UNSPEC = 0, /* Reserved */ 111 TASKSTATS_TYPE_PID, /* Process id */ 112 TASKSTATS_TYPE_TGID, /* Thread group id */ 113 TASKSTATS_TYPE_STATS, /* taskstats structure */ 114 TASKSTATS_TYPE_AGGR_PID, /* contains pid + stats */ 115 TASKSTATS_TYPE_AGGR_TGID, /* contains tgid + stats */ 116 __TASKSTATS_TYPE_MAX, 117}; 118 119#define TASKSTATS_TYPE_MAX (__TASKSTATS_TYPE_MAX - 1) 120 121enum { 122 TASKSTATS_CMD_ATTR_UNSPEC = 0, 123 TASKSTATS_CMD_ATTR_PID, 124 TASKSTATS_CMD_ATTR_TGID, 125 TASKSTATS_CMD_ATTR_REGISTER_CPUMASK, 126 TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK, 127 __TASKSTATS_CMD_ATTR_MAX, 128}; 129 130#define TASKSTATS_CMD_ATTR_MAX (__TASKSTATS_CMD_ATTR_MAX - 1) 131 132/* NETLINK_GENERIC related info */ 133 134#define TASKSTATS_GENL_NAME "TASKSTATS" 135#define TASKSTATS_GENL_VERSION 0x1 136 137#endif /* _LINUX_TASKSTATS_H */ 138