1 /* 2 * Copyright (c) 2000-2005, 2015 Apple Computer, Inc. All rights reserved. 3 * 4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. The rights granted to you under the License 10 * may not be used to create, or enable the creation or redistribution of, 11 * unlawful or unlicensed copies of an Apple operating system, or to 12 * circumvent, violate, or enable the circumvention or violation of, any 13 * terms of an Apple operating system software license agreement. 14 * 15 * Please obtain a copy of the License at 16 * http://www.opensource.apple.com/apsl/ and read it before using this file. 17 * 18 * The Original Code and all software distributed under the License are 19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 23 * Please see the License for the specific language governing rights and 24 * limitations under the License. 25 * 26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 27 */ 28 /* 29 * @OSF_COPYRIGHT@ 30 */ 31 /* 32 * Mach Operating System 33 * Copyright (c) 1991,1990,1989,1988,1987 Carnegie Mellon University 34 * All Rights Reserved. 35 * 36 * Permission to use, copy, modify and distribute this software and its 37 * documentation is hereby granted, provided that both the copyright 38 * notice and this permission notice appear in all copies of the 39 * software, derivative works or modified versions, and any portions 40 * thereof, and that both notices appear in supporting documentation. 41 * 42 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 43 * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR 44 * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. 45 * 46 * Carnegie Mellon requests users of this software to return to 47 * 48 * Software Distribution Coordinator or [email protected] 49 * School of Computer Science 50 * Carnegie Mellon University 51 * Pittsburgh PA 15213-3890 52 * 53 * any improvements or extensions that they make and grant Carnegie Mellon 54 * the rights to redistribute these changes. 55 */ 56 /* 57 */ 58 /* 59 * File: mach/thread_info 60 * 61 * Thread information structure and definitions. 62 * 63 * The defintions in this file are exported to the user. The kernel 64 * will translate its internal data structures to these structures 65 * as appropriate. 66 * 67 */ 68 69 #ifndef _MACH_THREAD_INFO_H_ 70 #define _MACH_THREAD_INFO_H_ 71 72 #include <mach/boolean.h> 73 #include <mach/policy.h> 74 #include <mach/time_value.h> 75 #include <mach/message.h> 76 #include <mach/machine/vm_types.h> 77 /* 78 * Generic information structure to allow for expansion. 79 */ 80 typedef natural_t thread_flavor_t; 81 typedef integer_t *thread_info_t; /* varying array of int */ 82 83 #define THREAD_INFO_MAX (32) /* maximum array size */ 84 typedef integer_t thread_info_data_t[THREAD_INFO_MAX]; 85 86 /* 87 * Currently defined information. 88 */ 89 #define THREAD_BASIC_INFO 3 /* basic information */ 90 91 struct thread_basic_info { 92 time_value_t user_time; /* user run time */ 93 time_value_t system_time; /* system run time */ 94 integer_t cpu_usage; /* scaled cpu usage percentage */ 95 policy_t policy; /* scheduling policy in effect */ 96 integer_t run_state; /* run state (see below) */ 97 integer_t flags; /* various flags (see below) */ 98 integer_t suspend_count; /* suspend count for thread */ 99 integer_t sleep_time; /* number of seconds that thread 100 * has been sleeping */ 101 }; 102 103 typedef struct thread_basic_info thread_basic_info_data_t; 104 typedef struct thread_basic_info *thread_basic_info_t; 105 #define THREAD_BASIC_INFO_COUNT ((mach_msg_type_number_t) \ 106 (sizeof(thread_basic_info_data_t) / sizeof(natural_t))) 107 108 #define THREAD_IDENTIFIER_INFO 4 /* thread id and other information */ 109 110 struct thread_identifier_info { 111 uint64_t thread_id; /* system-wide unique 64-bit thread id */ 112 uint64_t thread_handle; /* handle to be used by libproc */ 113 uint64_t dispatch_qaddr; /* libdispatch queue address */ 114 }; 115 116 typedef struct thread_identifier_info thread_identifier_info_data_t; 117 typedef struct thread_identifier_info *thread_identifier_info_t; 118 #define THREAD_IDENTIFIER_INFO_COUNT ((mach_msg_type_number_t) \ 119 (sizeof(thread_identifier_info_data_t) / sizeof(natural_t))) 120 121 /* 122 * Scale factor for usage field. 123 */ 124 125 #define TH_USAGE_SCALE 1000 126 127 /* 128 * Thread run states (state field). 129 */ 130 131 #define TH_STATE_RUNNING 1 /* thread is running normally */ 132 #define TH_STATE_STOPPED 2 /* thread is stopped */ 133 #define TH_STATE_WAITING 3 /* thread is waiting normally */ 134 #define TH_STATE_UNINTERRUPTIBLE 4 /* thread is in an uninterruptible 135 * wait */ 136 #define TH_STATE_HALTED 5 /* thread is halted at a 137 * clean point */ 138 139 /* 140 * Thread flags (flags field). 141 */ 142 #define TH_FLAGS_SWAPPED 0x1 /* thread is swapped out */ 143 #define TH_FLAGS_IDLE 0x2 /* thread is an idle thread */ 144 #define TH_FLAGS_GLOBAL_FORCED_IDLE 0x4 /* thread performs global forced idle */ 145 146 /* 147 * Thread extended info (returns same info as proc_pidinfo(...,PROC_PIDTHREADINFO,...) 148 */ 149 #define THREAD_EXTENDED_INFO 5 150 #define MAXTHREADNAMESIZE 64 151 struct thread_extended_info { // same as proc_threadinfo (from proc_info.h) & proc_threadinfo_internal (from bsd_taskinfo.h) 152 uint64_t pth_user_time; /* user run time */ 153 uint64_t pth_system_time; /* system run time */ 154 int32_t pth_cpu_usage; /* scaled cpu usage percentage */ 155 int32_t pth_policy; /* scheduling policy in effect */ 156 int32_t pth_run_state; /* run state (see below) */ 157 int32_t pth_flags; /* various flags (see below) */ 158 int32_t pth_sleep_time; /* number of seconds that thread */ 159 int32_t pth_curpri; /* cur priority*/ 160 int32_t pth_priority; /* priority*/ 161 int32_t pth_maxpriority; /* max priority*/ 162 char pth_name[MAXTHREADNAMESIZE]; /* thread name, if any */ 163 }; 164 typedef struct thread_extended_info thread_extended_info_data_t; 165 typedef struct thread_extended_info * thread_extended_info_t; 166 #define THREAD_EXTENDED_INFO_COUNT ((mach_msg_type_number_t) \ 167 (sizeof(thread_extended_info_data_t) / sizeof (natural_t))) 168 169 #define THREAD_DEBUG_INFO_INTERNAL 6 /* for kernel development internal info */ 170 171 #if PRIVATE 172 struct thread_debug_info_internal { 173 uint64_t page_creation_count; 174 }; 175 176 typedef struct thread_debug_info_internal *thread_debug_info_internal_t; 177 typedef struct thread_debug_info_internal thread_debug_info_internal_data_t; 178 179 #define THREAD_DEBUG_INFO_INTERNAL_COUNT ((mach_msg_type_number_t) \ 180 (sizeof (thread_debug_info_internal_data_t) / sizeof (natural_t))) 181 182 #endif /* PRIVATE */ 183 184 #define IO_NUM_PRIORITIES 4 185 186 #define UPDATE_IO_STATS(info, size) \ 187 { \ 188 info.count++; \ 189 info.size += size; \ 190 } 191 192 #define UPDATE_IO_STATS_ATOMIC(info, io_size) \ 193 { \ 194 OSIncrementAtomic64((SInt64 *)&(info.count)); \ 195 OSAddAtomic64(io_size, (SInt64 *)&(info.size)); \ 196 } 197 198 struct io_stat_entry { 199 uint64_t count; 200 uint64_t size; 201 }; 202 203 struct io_stat_info { 204 struct io_stat_entry disk_reads; 205 struct io_stat_entry io_priority[IO_NUM_PRIORITIES]; 206 struct io_stat_entry paging; 207 struct io_stat_entry metadata; 208 struct io_stat_entry total_io; 209 }; 210 211 typedef struct io_stat_info *io_stat_info_t; 212 213 #if KERNEL_PRIVATE 214 __BEGIN_DECLS 215 void thread_group_join_io_storage(void); 216 void thread_group_join_perf_controller(void); 217 void thread_group_join_cellular(void); 218 __END_DECLS 219 #endif 220 221 /* 222 * Obsolete interfaces. 223 */ 224 225 #define THREAD_SCHED_TIMESHARE_INFO 10 226 #define THREAD_SCHED_RR_INFO 11 227 #define THREAD_SCHED_FIFO_INFO 12 228 229 #endif /* _MACH_THREAD_INFO_H_ */ 230