Able to dump lock()/unlock() timing data
This commit is contained in:
parent
66dab193f3
commit
bd12703b76
@ -15,6 +15,7 @@
|
|||||||
#include <timers.h>
|
#include <timers.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <ibm/interrupt.h>
|
#include <ibm/interrupt.h>
|
||||||
|
#include <minix/config.h>
|
||||||
#include "../../kernel/const.h"
|
#include "../../kernel/const.h"
|
||||||
#include "../../kernel/type.h"
|
#include "../../kernel/type.h"
|
||||||
#include "../../kernel/proc.h"
|
#include "../../kernel/proc.h"
|
||||||
@ -37,6 +38,9 @@ FORWARD _PROTOTYPE( void sched_dmp, (void) );
|
|||||||
FORWARD _PROTOTYPE( void monparams_dmp, (void) );
|
FORWARD _PROTOTYPE( void monparams_dmp, (void) );
|
||||||
FORWARD _PROTOTYPE( void kenv_dmp, (void) );
|
FORWARD _PROTOTYPE( void kenv_dmp, (void) );
|
||||||
FORWARD _PROTOTYPE( void memchunks_dmp, (void) );
|
FORWARD _PROTOTYPE( void memchunks_dmp, (void) );
|
||||||
|
#if ENABLE_LOCK_TIMING
|
||||||
|
FORWARD _PROTOTYPE( void timing_dmp, (void) );
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Some global data that is shared among several dumping procedures.
|
/* Some global data that is shared among several dumping procedures.
|
||||||
* Note that the process table copy has the same name as in the kernel
|
* Note that the process table copy has the same name as in the kernel
|
||||||
@ -65,6 +69,9 @@ PUBLIC int do_fkey_pressed(message *m)
|
|||||||
case F5: monparams_dmp(); break;
|
case F5: monparams_dmp(); break;
|
||||||
case F6: irqtab_dmp(); break;
|
case F6: irqtab_dmp(); break;
|
||||||
case F7: kmessages_dmp(); break;
|
case F7: kmessages_dmp(); break;
|
||||||
|
#if ENABLE_LOCK_TIMING
|
||||||
|
case F8: timing_dmp(); break;
|
||||||
|
#endif
|
||||||
case F9: diagnostics_dmp(); break;
|
case F9: diagnostics_dmp(); break;
|
||||||
case F10: kenv_dmp(); break;
|
case F10: kenv_dmp(); break;
|
||||||
case F11: memchunks_dmp(); break;
|
case F11: memchunks_dmp(); break;
|
||||||
@ -108,6 +115,43 @@ PRIVATE void diagnostics_dmp()
|
|||||||
printf(print_buf); /* print the messages */
|
printf(print_buf); /* print the messages */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if ENABLE_LOCK_TIMING
|
||||||
|
/*===========================================================================*
|
||||||
|
* timing_dmp *
|
||||||
|
*===========================================================================*/
|
||||||
|
PRIVATE void timing_dmp()
|
||||||
|
{
|
||||||
|
static struct lock_timedata timingdata[TIMING_CATEGORIES];
|
||||||
|
int r, c, f, skipped = 0, printed = 0, maxlines = 23, x = 0;
|
||||||
|
static int offsetlines = 0;
|
||||||
|
|
||||||
|
if ((r = sys_getlocktimings(timingdata)) != OK) {
|
||||||
|
report("warning: couldn't get copy of lock timings", r);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(c = 0; c < TIMING_CATEGORIES; c++) {
|
||||||
|
int b;
|
||||||
|
if(!timingdata[c].lock_timings_range[0] || !timingdata[c].binsize)
|
||||||
|
continue;
|
||||||
|
x = printf("%-*s: misses %lu, resets %lu, measurements %lu: ",
|
||||||
|
TIMING_NAME, timingdata[c].names,
|
||||||
|
timingdata[c].misses,
|
||||||
|
timingdata[c].resets,
|
||||||
|
timingdata[c].measurements);
|
||||||
|
for(b = 0; b < TIMING_POINTS; b++) {
|
||||||
|
int w;
|
||||||
|
if(!timingdata[c].lock_timings[b])
|
||||||
|
continue;
|
||||||
|
x += (w = printf(" %5d: %5d", timingdata[c].lock_timings_range[0] +
|
||||||
|
b*timingdata[c].binsize,
|
||||||
|
timingdata[c].lock_timings[b]));
|
||||||
|
if(x + w >= 80) { printf("\n"); x = 0; }
|
||||||
|
}
|
||||||
|
if(x > 0) printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*===========================================================================*
|
/*===========================================================================*
|
||||||
* kmessages_dmp *
|
* kmessages_dmp *
|
||||||
@ -139,7 +183,7 @@ PRIVATE void kmessages_dmp()
|
|||||||
}
|
}
|
||||||
print_buf[r] = 0; /* make sure it terminates */
|
print_buf[r] = 0; /* make sure it terminates */
|
||||||
printf("Dump of all messages generated by the kernel.\n\n");
|
printf("Dump of all messages generated by the kernel.\n\n");
|
||||||
printf(print_buf); /* print the messages */
|
printf("%s", print_buf); /* print the messages */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user