diff options
| author | oster <oster@NetBSD.org> | 2004-02-29 21:38:41 +0000 |
|---|---|---|
| committer | oster <oster@NetBSD.org> | 2004-02-29 21:38:41 +0000 |
| commit | 0d2f3606aaae20585e25b71694f406afb655900b (patch) | |
| tree | 6482f3a4e94d408ebfea9aae90e63ab14656e552 /sys/dev/raidframe | |
| parent | 6c57d297ac64a31086a12f1e80ffeee417a19427 (diff) | |
Add "RF_ACC_TRACE" as a new #define to rf_archs.h.
Use it to conditionalize some of the access tracing and tracerec bits.
Chops about 4 K off of an i386 GENERIC kernel.
Diffstat (limited to 'sys/dev/raidframe')
| -rw-r--r-- | sys/dev/raidframe/rf_acctrace.c | 14 | ||||
| -rw-r--r-- | sys/dev/raidframe/rf_archs.h | 6 | ||||
| -rw-r--r-- | sys/dev/raidframe/rf_states.c | 55 |
3 files changed, 65 insertions, 10 deletions
diff --git a/sys/dev/raidframe/rf_acctrace.c b/sys/dev/raidframe/rf_acctrace.c index 66467c789f5..8e098206b79 100644 --- a/sys/dev/raidframe/rf_acctrace.c +++ b/sys/dev/raidframe/rf_acctrace.c @@ -1,4 +1,4 @@ -/* $NetBSD: rf_acctrace.c,v 1.15 2004/02/29 20:47:37 oster Exp $ */ +/* $NetBSD: rf_acctrace.c,v 1.16 2004/02/29 21:38:41 oster Exp $ */ /* * Copyright (c) 1995 Carnegie-Mellon University. * All rights reserved. @@ -34,7 +34,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rf_acctrace.c,v 1.15 2004/02/29 20:47:37 oster Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rf_acctrace.c,v 1.16 2004/02/29 21:38:41 oster Exp $"); #include <sys/stat.h> #include <sys/types.h> @@ -49,25 +49,29 @@ __KERNEL_RCSID(0, "$NetBSD: rf_acctrace.c,v 1.15 2004/02/29 20:47:37 oster Exp $ #include "rf_hist.h" #include "rf_shutdown.h" +#if RF_ACC_TRACE > 0 static long numTracesSoFar; RF_DECLARE_MUTEX(rf_tracing_mutex) +#endif int rf_ConfigureAccessTrace(RF_ShutdownList_t **listp) { - +#if RF_ACC_TRACE > 0 numTracesSoFar = 0; rf_mutex_init(&rf_tracing_mutex); - +#endif return (0); } + /* install a trace record. cause a flush to disk or to the trace * collector daemon if the trace buffer is at least 1/2 full. */ void rf_LogTraceRec(RF_Raid_t *raid, RF_AccTraceEntry_t *rec) { +#if RF_ACC_TRACE > 0 RF_AccTotals_t *acc = &raid->acc_totals; if (((rf_maxNumTraces >= 0) && (numTracesSoFar >= rf_maxNumTraces))) @@ -111,4 +115,6 @@ rf_LogTraceRec(RF_Raid_t *raid, RF_AccTraceEntry_t *rec) acc->phys_io_us = rec->phys_io_us; acc->user_reccount++; } +#endif /* RF_ACC_TRACE > 0 */ } + diff --git a/sys/dev/raidframe/rf_archs.h b/sys/dev/raidframe/rf_archs.h index a9cf9cba2c8..a000ee44732 100644 --- a/sys/dev/raidframe/rf_archs.h +++ b/sys/dev/raidframe/rf_archs.h @@ -1,4 +1,4 @@ -/* $NetBSD: rf_archs.h,v 1.20 2002/09/19 23:23:19 oster Exp $ */ +/* $NetBSD: rf_archs.h,v 1.21 2004/02/29 21:38:41 oster Exp $ */ /* * Copyright (c) 1995 Carnegie-Mellon University. * All rights reserved. @@ -140,6 +140,10 @@ #define RF_DEBUG_MAP 0 #endif +#ifndef RF_ACC_TRACE +#define RF_ACC_TRACE 0 +#endif + #include "rf_options.h" #endif /* !_RF__RF_ARCHS_H_ */ diff --git a/sys/dev/raidframe/rf_states.c b/sys/dev/raidframe/rf_states.c index 01814a26e48..b8a90f9037c 100644 --- a/sys/dev/raidframe/rf_states.c +++ b/sys/dev/raidframe/rf_states.c @@ -1,4 +1,4 @@ -/* $NetBSD: rf_states.c,v 1.26 2004/02/27 02:55:18 oster Exp $ */ +/* $NetBSD: rf_states.c,v 1.27 2004/02/29 21:38:41 oster Exp $ */ /* * Copyright (c) 1995 Carnegie-Mellon University. * All rights reserved. @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rf_states.c,v 1.26 2004/02/27 02:55:18 oster Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rf_states.c,v 1.27 2004/02/29 21:38:41 oster Exp $"); #include <sys/errno.h> @@ -163,19 +163,25 @@ rf_ContinueRaidAccess(RF_RaidAccessDesc_t *desc) void rf_ContinueDagAccess(RF_DagList_t *dagList) { +#if RF_ACC_TRACE > 0 RF_AccTraceEntry_t *tracerec = &(dagList->desc->tracerec); +#endif RF_RaidAccessDesc_t *desc; RF_DagHeader_t *dag_h; +#if RF_ACC_TRACE > 0 RF_Etimer_t timer; +#endif int i; desc = dagList->desc; +#if RF_ACC_TRACE > 0 timer = tracerec->timer; RF_ETIMER_STOP(timer); RF_ETIMER_EVAL(timer); tracerec->specific.user.exec_us = RF_ETIMER_VAL_US(timer); RF_ETIMER_START(tracerec->timer); +#endif /* skip to dag which just finished */ dag_h = dagList->dags; @@ -282,15 +288,19 @@ rf_State_DecrAccessCount(RF_RaidAccessDesc_t *desc) int rf_State_Quiesce(RF_RaidAccessDesc_t *desc) { +#if RF_ACC_TRACE > 0 RF_AccTraceEntry_t *tracerec = &desc->tracerec; RF_Etimer_t timer; +#endif int suspended = RF_FALSE; RF_Raid_t *raidPtr; raidPtr = desc->raidPtr; +#if RF_ACC_TRACE > 0 RF_ETIMER_START(timer); RF_ETIMER_START(desc->timer); +#endif RF_LOCK_MUTEX(raidPtr->access_suspend_mutex); if (raidPtr->accesses_suspended) { @@ -305,9 +315,11 @@ rf_State_Quiesce(RF_RaidAccessDesc_t *desc) } RF_UNLOCK_MUTEX(raidPtr->access_suspend_mutex); +#if RF_ACC_TRACE > 0 RF_ETIMER_STOP(timer); RF_ETIMER_EVAL(timer); tracerec->specific.user.suspend_ovhd_us += RF_ETIMER_VAL_US(timer); +#endif #if RF_DEBUG_QUIESCE if (suspended && rf_quiesceDebug) @@ -321,18 +333,22 @@ int rf_State_Map(RF_RaidAccessDesc_t *desc) { RF_Raid_t *raidPtr = desc->raidPtr; +#if RF_ACC_TRACE > 0 RF_AccTraceEntry_t *tracerec = &desc->tracerec; RF_Etimer_t timer; RF_ETIMER_START(timer); +#endif if (!(desc->asmap = rf_MapAccess(raidPtr, desc->raidAddress, desc->numBlocks, desc->bufPtr, RF_DONT_REMAP))) RF_PANIC(); +#if RF_ACC_TRACE > 0 RF_ETIMER_STOP(timer); RF_ETIMER_EVAL(timer); tracerec->specific.user.map_us = RF_ETIMER_VAL_US(timer); +#endif desc->state++; return RF_FALSE; @@ -341,14 +357,20 @@ rf_State_Map(RF_RaidAccessDesc_t *desc) int rf_State_Lock(RF_RaidAccessDesc_t *desc) { +#if RF_ACC_TRACE > 0 RF_AccTraceEntry_t *tracerec = &desc->tracerec; +#endif RF_Raid_t *raidPtr = desc->raidPtr; RF_AccessStripeMapHeader_t *asmh = desc->asmap; RF_AccessStripeMap_t *asm_p; +#if RF_ACC_TRACE > 0 RF_Etimer_t timer; +#endif int suspended = RF_FALSE; +#if RF_ACC_TRACE > 0 RF_ETIMER_START(timer); +#endif if (!(raidPtr->Layout.map->flags & RF_NO_STRIPE_LOCKS)) { RF_StripeNum_t lastStripeID = -1; @@ -402,11 +424,11 @@ rf_State_Lock(RF_RaidAccessDesc_t *desc) } } } - +#if RF_ACC_TRACE > 0 RF_ETIMER_STOP(timer); RF_ETIMER_EVAL(timer); tracerec->specific.user.lock_us += RF_ETIMER_VAL_US(timer); - +#endif if (suspended) return (RF_TRUE); } @@ -437,8 +459,10 @@ rf_State_Lock(RF_RaidAccessDesc_t *desc) int rf_State_CreateDAG(RF_RaidAccessDesc_t *desc) { +#if RF_ACC_TRACE > 0 RF_AccTraceEntry_t *tracerec = &desc->tracerec; RF_Etimer_t timer; +#endif RF_DagHeader_t *dag_h; RF_DagList_t *dagList; struct buf *bp; @@ -446,7 +470,9 @@ rf_State_CreateDAG(RF_RaidAccessDesc_t *desc) /* generate a dag for the access, and fire it off. When the dag * completes, we'll get re-invoked in the next state. */ +#if RF_ACC_TRACE > 0 RF_ETIMER_START(timer); +#endif /* SelectAlgorithm returns one or more dags */ selectStatus = rf_SelectAlgorithm(desc, desc->flags | RF_DAG_SUPPRESS_LOCKS); #if RF_DEBUG_VALIDATE_DAG @@ -458,10 +484,12 @@ rf_State_CreateDAG(RF_RaidAccessDesc_t *desc) } } #endif /* RF_DEBUG_VALIDATE_DAG */ +#if RF_ACC_TRACE > 0 RF_ETIMER_STOP(timer); RF_ETIMER_EVAL(timer); /* update time to create all dags */ tracerec->specific.user.dag_create_us = RF_ETIMER_VAL_US(timer); +#endif desc->status = 0; /* good status */ @@ -486,7 +514,9 @@ rf_State_CreateDAG(RF_RaidAccessDesc_t *desc) dag_h = dagList->dags; while (dag_h) { dag_h->bp = (struct buf *) desc->bp; +#if RF_ACC_TRACE > 0 dag_h->tracerec = tracerec; +#endif dag_h = dag_h->next; } dagList = dagList->next; @@ -524,7 +554,9 @@ rf_State_ExecuteDAG(RF_RaidAccessDesc_t *desc) RF_ASSERT(dagList->numDags > 0); RF_ASSERT(dagList->numDagsDone == 0); RF_ASSERT(dagList->numDagsFired == 0); +#if RF_ACC_TRACE > 0 RF_ETIMER_START(dagList->tracerec.timer); +#endif /* fire first dag in this stripe */ dag_h = dagList->dags; RF_ASSERT(dag_h); @@ -592,7 +624,9 @@ rf_State_ProcessDAG(RF_RaidAccessDesc_t *desc) if ((dagList->numDagsDone < dagList->numDags) && (dagList->numDagsDone == dagList->numDagsFired) && (dagList->numDagsFired > 0)) { +#if RF_ACC_TRACE > 0 RF_ETIMER_START(dagList->tracerec.timer); +#endif /* fire next dag in this stripe */ /* first, skip to next dag awaiting execution */ dag_h = dagList->dags; @@ -611,16 +645,21 @@ rf_State_ProcessDAG(RF_RaidAccessDesc_t *desc) int rf_State_Cleanup(RF_RaidAccessDesc_t *desc) { +#if RF_ACC_TRACE > 0 RF_AccTraceEntry_t *tracerec = &desc->tracerec; +#endif RF_AccessStripeMapHeader_t *asmh = desc->asmap; RF_Raid_t *raidPtr = desc->raidPtr; RF_AccessStripeMap_t *asm_p; RF_DagList_t *dagList; +#if RF_ACC_TRACE > 0 RF_Etimer_t timer; +#endif int i; desc->state++; +#if RF_ACC_TRACE > 0 timer = tracerec->timer; RF_ETIMER_STOP(timer); RF_ETIMER_EVAL(timer); @@ -630,17 +669,20 @@ rf_State_Cleanup(RF_RaidAccessDesc_t *desc) tracerec->specific.user.dag_retry_us = 0; RF_ETIMER_START(timer); +#endif /* free all dags */ dagList = desc->dagList; for (i = 0; i < desc->numStripes; i++) { rf_FreeDAG(dagList->dags); dagList = dagList->next; } +#if RF_ACC_TRACE > 0 RF_ETIMER_STOP(timer); RF_ETIMER_EVAL(timer); tracerec->specific.user.cleanup_us = RF_ETIMER_VAL_US(timer); RF_ETIMER_START(timer); +#endif if (!(raidPtr->Layout.map->flags & RF_NO_STRIPE_LOCKS)) { for (asm_p = asmh->stripeMap; asm_p; asm_p = asm_p->next) { if (!rf_suppressLocksAndLargeWrites && @@ -656,12 +698,15 @@ rf_State_Cleanup(RF_RaidAccessDesc_t *desc) } } } +#if RF_ACC_TRACE > 0 RF_ETIMER_STOP(timer); RF_ETIMER_EVAL(timer); tracerec->specific.user.lock_us += RF_ETIMER_VAL_US(timer); RF_ETIMER_START(timer); +#endif rf_FreeAccessStripeMap(asmh); +#if RF_ACC_TRACE > 0 RF_ETIMER_STOP(timer); RF_ETIMER_EVAL(timer); tracerec->specific.user.cleanup_us += RF_ETIMER_VAL_US(timer); @@ -675,7 +720,7 @@ rf_State_Cleanup(RF_RaidAccessDesc_t *desc) desc->tracerec.total_us = RF_ETIMER_VAL_US(timer); rf_LogTraceRec(raidPtr, tracerec); - +#endif desc->flags |= RF_DAG_ACCESS_COMPLETE; return RF_FALSE; |
