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