The g_up and g_down threads use a local 'mymutex' mutex to allow WITNESS
to warn about attempts to sleep in the I/O path. This change pushes the definition and use of 'mymutex' behind #ifdef WITNESS to avoid the cost in non-debugging cases. This results in a clear .22% performance win for 512 byte and 1k I/O tests on my SMP test box. Not much, but every bit counts.
This commit is contained in:
parent
4c4f36d309
commit
ddb1bad6a3
@ -315,10 +315,12 @@ g_io_schedule_down(struct thread *tp __unused)
|
||||
struct bio *bp;
|
||||
off_t excess;
|
||||
int error;
|
||||
#ifdef WITNESS
|
||||
struct mtx mymutex;
|
||||
|
||||
bzero(&mymutex, sizeof mymutex);
|
||||
mtx_init(&mymutex, "g_xdown", NULL, MTX_DEF);
|
||||
#endif
|
||||
|
||||
for(;;) {
|
||||
g_bioq_lock(&g_bio_run_down);
|
||||
@ -357,9 +359,13 @@ g_io_schedule_down(struct thread *tp __unused)
|
||||
default:
|
||||
break;
|
||||
}
|
||||
#ifdef WITNESS
|
||||
mtx_lock(&mymutex);
|
||||
#endif
|
||||
bp->bio_to->geom->start(bp);
|
||||
#ifdef WITNESS
|
||||
mtx_unlock(&mymutex);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@ -384,26 +390,36 @@ void
|
||||
g_io_schedule_up(struct thread *tp __unused)
|
||||
{
|
||||
struct bio *bp;
|
||||
#ifdef WITNESS
|
||||
struct mtx mymutex;
|
||||
|
||||
bzero(&mymutex, sizeof mymutex);
|
||||
mtx_init(&mymutex, "g_xup", NULL, MTX_DEF);
|
||||
#endif
|
||||
for(;;) {
|
||||
g_bioq_lock(&g_bio_run_up);
|
||||
bp = g_bioq_first(&g_bio_run_task);
|
||||
if (bp != NULL) {
|
||||
g_bioq_unlock(&g_bio_run_up);
|
||||
#ifdef WITNESS
|
||||
mtx_lock(&mymutex);
|
||||
#endif
|
||||
bp->bio_task(bp->bio_task_arg);
|
||||
#ifdef WITNESS
|
||||
mtx_unlock(&mymutex);
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
bp = g_bioq_first(&g_bio_run_up);
|
||||
if (bp != NULL) {
|
||||
g_bioq_unlock(&g_bio_run_up);
|
||||
#ifdef WITNESS
|
||||
mtx_lock(&mymutex);
|
||||
#endif
|
||||
biodone(bp);
|
||||
#ifdef WITNESS
|
||||
mtx_unlock(&mymutex);
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
msleep(&g_wait_up, &g_bio_run_up.bio_queue_lock,
|
||||
|
Loading…
x
Reference in New Issue
Block a user