/* latency.h */ /* * Copyright (c) 1999 Apple Computer, Inc. All rights reserved. * * @APPLE_LICENSE_HEADER_START@ * * "Portions Copyright (c) 1999 Apple Computer, Inc. All Rights * Reserved. This file contains Original Code and/or Modifications of * Original Code as defined in and that are subject to the Apple Public * Source License Version 1.0 (the 'License'). You may not use this file * except in compliance with the License. Please obtain a copy of the * License at http://www.apple.com/publicsource and read it before using * this file. * * The Original Code and all software distributed under the License are * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the * License for the specific language governing rights and limitations * under the License." * * @APPLE_LICENSE_HEADER_END@ */ /* cc -I. -DKERNEL_PRIVATE -O -o latency latency.c */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifndef KERNEL_PRIVATE #define KERNEL_PRIVATE #include "kdebug.h" #undef KERNEL_PRIVATE #else #include "kdebug.h" #endif /*KERNEL_PRIVATE*/ #include #include #include #include #include #include #include #include #include #include #include extern mach_port_t clock_port; #define KERN_KDPIDEX 14 int s_too_slow; int s_max_latency; int s_min_latency = 0; long long s_total_latency = 0; int s_total_samples; int s_exceeded_threshold = 0; int i_too_slow; int i_max_latency; int i_min_latency = 0; long long i_total_latency = 0; int i_total_samples; int i_exceeded_threshold = 0; long start_time; long curr_time; long refresh_time; char *policy_name; int my_pri = -1; char *kernelpath = (char *)0; char *code_file = (char *)0; typedef struct { u_long k_sym_addr; /* kernel symbol address from nm */ u_int k_sym_len; /* length of kernel symbol string */ char *k_sym_name; /* kernel symbol string from nm */ } kern_sym_t; kern_sym_t *kern_sym_tbl; /* pointer to the nm table */ int kern_sym_count; /* number of entries in nm table */ char pcstring[128]; #define UNKNOWN "Can't find symbol name" double divisor; int gotSIGWINCH = 0; int trace_enabled = 0; #define SAMPLE_SIZE 300000 int mib[6]; size_t needed; char *my_buffer; kbufinfo_t bufinfo = {0, 0, 0}; FILE *log_fp = (FILE *)0; int num_of_codes = 0; int need_new_map = 0; int total_threads = 0; kd_threadmap *mapptr = 0; #define MAX_ENTRIES 1024 struct ct { int type; char name[32]; } codes_tab[MAX_ENTRIES]; /* If NUMPARMS changes from the kernel, then PATHLENGTH will also reflect the change */ #define NUMPARMS 23 #define PATHLENGTH (NUMPARMS*sizeof(long)) struct th_info { int thread; int type; int child_thread; int arg1; double stime; long *pathptr; char pathname[PATHLENGTH + 1]; }; #define MAX_THREADS 512 struct th_info th_state[MAX_THREADS]; int cur_max = 0; #define TRACE_DATA_NEWTHREAD 0x07000004 #define TRACE_STRING_NEWTHREAD 0x07010004 #define TRACE_STRING_EXEC 0x07010008 #define INTERRUPT 0x01050000 #define DECR_TRAP 0x01090000 #define DECR_SET 0x01090004 #define MACH_vmfault 0x01300000 #define MACH_sched 0x01400000 #define MACH_stkhandoff 0x01400008 #define VFS_LOOKUP 0x03010090 #define BSC_exit 0x040C0004 #define IES_action 0x050b0018 #define IES_filter 0x050b001c #define TES_action 0x050c0010 #define CQ_action 0x050d0018 #define DBG_FUNC_ALL (DBG_FUNC_START | DBG_FUNC_END) #define DBG_FUNC_MASK 0xfffffffc #define DBG_ZERO_FILL_FAULT 1 #define DBG_PAGEIN_FAULT 2 #define DBG_COW_FAULT 3 #define DBG_CACHE_HIT_FAULT 4 char *fault_name[5] = { "", "ZeroFill", "PageIn", "COW", "CacheHit", }; char *pc_to_string(); int decrementer_val = 0; /* Value used to reset decrementer */ int set_remove_flag = 1; /* By default, remove trace buffer */ Boolean _isTraceingCPU = FALSE; /* *$Log: latency.h,v $ *Revision 1.1 2004/12/12 22:06:54 jcm10 *moved here for safe keeping * *Revision 1.3 2003/02/18 00:26:24 jcm10 *fix compiler warning caused by check-in comment for preceding change * *Revision 1.2 2003/02/17 19:39:28 jcm10 * has gone away * *Revision 1.1 2002/07/11 23:36:21 jcm10 *first checked in * *Revision 1.5 2002/05/14 08:09:02 bills *fix cvs log comment * * Revision 1.4 2002/04/24 22:12:43 luke * updates for sample code release * * Revision 1.3 2002/02/07 22:07:26 luke * + removed code not needed by MillionMonkeys * + Also turned tracing back on for app's PID. * * Revision 1.2 2002/02/01 04:08:48 luke * Corrected Data collection bug (gave zeros for low data-collection frequencies) * * Revision 1.1 2002/01/31 02:09:43 luke * first checked in * */