1 /* $OpenBSD: rf_acctrace.h,v 1.3 2002/12/16 07:01:03 tdeval Exp $ */ 2 /* $NetBSD: rf_acctrace.h,v 1.3 1999/02/05 00:06:06 oster Exp $ */ 3 4 /* 5 * Copyright (c) 1995 Carnegie-Mellon University. 6 * All rights reserved. 7 * 8 * Author: Mark Holland 9 * 10 * Permission to use, copy, modify and distribute this software and 11 * its documentation is hereby granted, provided that both the copyright 12 * notice and this permission notice appear in all copies of the 13 * software, derivative works or modified versions, and any portions 14 * thereof, and that both notices appear in supporting documentation. 15 * 16 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 17 * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND 18 * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. 19 * 20 * Carnegie Mellon requests users of this software to return to 21 * 22 * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU 23 * School of Computer Science 24 * Carnegie Mellon University 25 * Pittsburgh PA 15213-3890 26 * 27 * any improvements or extensions that they make and grant Carnegie the 28 * rights to redistribute these changes. 29 */ 30 31 /***************************************************************************** 32 * 33 * acctrace.h -- Header file for acctrace.c 34 * 35 *****************************************************************************/ 36 37 38 #ifndef _RF__RF_ACCTRACE_H_ 39 #define _RF__RF_ACCTRACE_H_ 40 41 #include "rf_types.h" 42 #include "rf_hist.h" 43 #include "rf_etimer.h" 44 45 typedef struct RF_user_acc_stats_s { 46 RF_uint64 suspend_ovhd_us;/* 47 * usec spent mucking in the 48 * access-suspension code. 49 */ 50 RF_uint64 map_us; /* usec spent mapping the access. */ 51 RF_uint64 lock_us; /* 52 * usec spent locking & unlocking 53 * stripes, including time spent 54 * blocked. 55 */ 56 RF_uint64 dag_create_us; /* usec spent creating the DAGs. */ 57 RF_uint64 dag_retry_us; /* 58 * _total_ usec spent retrying the op 59 * -- not broken down into components. 60 */ 61 RF_uint64 exec_us; /* usec spent in DispatchDAG. */ 62 RF_uint64 exec_engine_us; /* 63 * usec spent in engine, not including 64 * blocking time. 65 */ 66 RF_uint64 cleanup_us; /* 67 * usec spent tearing down the dag & 68 * maps, and generally cleaning up. 69 */ 70 } RF_user_acc_stats_t; 71 72 typedef struct RF_recon_acc_stats_s { 73 RF_uint32 recon_start_to_fetch_us; 74 RF_uint32 recon_fetch_to_return_us; 75 RF_uint32 recon_return_to_submit_us; 76 } RF_recon_acc_stats_t; 77 78 typedef struct RF_acctrace_entry_s { 79 union { 80 RF_user_acc_stats_t user; 81 RF_recon_acc_stats_t recon; 82 } specific; 83 RF_uint8 reconacc; /* 84 * Whether this is a tracerec for a 85 * user acc or a recon acc. 86 */ 87 RF_uint64 xor_us; /* usec spent doing XORs. */ 88 RF_uint64 q_us; /* usec spent doing XORs. */ 89 RF_uint64 plog_us; /* 90 * usec spent waiting to stuff parity 91 * into log. 92 */ 93 RF_uint64 diskqueue_us; /* 94 * _total_ usec spent in disk queue(s), 95 * incl concurrent ops. 96 */ 97 RF_uint64 diskwait_us; /* 98 * _total_ usec spent actually waiting 99 * on the disk, incl concurrent ops. 100 */ 101 RF_uint64 total_us; /* Total usec spent on this access. */ 102 RF_uint64 num_phys_ios; /* Number of physical I/Os invoked. */ 103 RF_uint64 phys_io_us; /* Time of physical I/O. */ 104 RF_Etimer_t tot_timer; /* 105 * A timer used to compute total 106 * access time. 107 */ 108 RF_Etimer_t timer; /* 109 * A generic timer val for timing 110 * events that live across procedure 111 * boundaries. 112 */ 113 RF_Etimer_t recon_timer; /* Generic timer for recon stuff. */ 114 RF_uint64 index; 115 } RF_AccTraceEntry_t; 116 117 typedef struct RF_AccTotals_s { 118 /* User acc stats. */ 119 RF_uint64 suspend_ovhd_us; 120 RF_uint64 map_us; 121 RF_uint64 lock_us; 122 RF_uint64 dag_create_us; 123 RF_uint64 dag_retry_us; 124 RF_uint64 exec_us; 125 RF_uint64 exec_engine_us; 126 RF_uint64 cleanup_us; 127 RF_uint64 user_reccount; 128 /* Recon acc stats. */ 129 RF_uint64 recon_start_to_fetch_us; 130 RF_uint64 recon_fetch_to_return_us; 131 RF_uint64 recon_return_to_submit_us; 132 RF_uint64 recon_io_overflow_count; 133 RF_uint64 recon_phys_io_us; 134 RF_uint64 recon_num_phys_ios; 135 RF_uint64 recon_diskwait_us; 136 RF_uint64 recon_reccount; 137 /* Trace entry stats. */ 138 RF_uint64 xor_us; 139 RF_uint64 q_us; 140 RF_uint64 plog_us; 141 RF_uint64 diskqueue_us; 142 RF_uint64 diskwait_us; 143 RF_uint64 total_us; 144 RF_uint64 num_log_ents; 145 RF_uint64 phys_io_overflow_count; 146 RF_uint64 num_phys_ios; 147 RF_uint64 phys_io_us; 148 RF_uint64 bigvals; 149 /* Histograms. */ 150 RF_Hist_t dw_hist[RF_HIST_NUM_BUCKETS]; 151 RF_Hist_t tot_hist[RF_HIST_NUM_BUCKETS]; 152 } RF_AccTotals_t; 153 154 #if RF_UTILITY == 0 155 RF_DECLARE_EXTERN_MUTEX(rf_tracing_mutex); 156 #endif /* RF_UTILITY == 0 */ 157 158 int rf_ConfigureAccessTrace(RF_ShutdownList_t **); 159 void rf_LogTraceRec(RF_Raid_t * raid, RF_AccTraceEntry_t *); 160 void rf_FlushAccessTraceBuf(void); 161 162 #endif /* !_RF__RF_ACCTRACE_H_ */ 163