Adjust pg_test_timing to show shortest test durations first, place

percentage column before count column.  Docs updated.
This commit is contained in:
Bruce Momjian 2012-08-28 12:57:13 -04:00
parent 65b2ee27ad
commit 0f3351aacf
2 changed files with 60 additions and 48 deletions

View File

@ -14,16 +14,24 @@ static const char *progname;
static int32 test_duration = 3;
static void handle_args(int argc, char *argv[]);
static void test_timing(int32);
static uint64 test_timing(int32);
static void output(uint64 loop_count);
/* record duration in powers of 2 microseconds */
int64 histogram[32];
int
main(int argc, char *argv[])
{
uint64 loop_count;
progname = get_progname(argv[0]);
handle_args(argc, argv);
test_timing(test_duration);
loop_count = test_timing(test_duration);
output(loop_count);
return 0;
}
@ -95,25 +103,14 @@ handle_args(int argc, char *argv[])
}
}
static void
static uint64
test_timing(int32 duration)
{
uint64 total_time;
int64 time_elapsed = 0;
uint64 loop_count = 0;
uint64 prev,
cur;
int32 diff,
i,
bits,
found;
instr_time start_time,
end_time,
temp;
static int64 histogram[32];
char buf[100];
uint64 prev, cur;
instr_time start_time, end_time, temp;
total_time = duration > 0 ? duration * 1000000 : 0;
@ -122,11 +119,14 @@ test_timing(int32 duration)
while (time_elapsed < total_time)
{
int32 diff, bits = 0;
prev = cur;
INSTR_TIME_SET_CURRENT(temp);
cur = INSTR_TIME_GET_MICROSEC(temp);
diff = cur - prev;
/* Did time go backwards? */
if (diff < 0)
{
printf("Detected clock going backwards in time.\n");
@ -134,12 +134,14 @@ test_timing(int32 duration)
exit(1);
}
bits = 0;
/* What is the highest bit in the time diff? */
while (diff)
{
diff >>= 1;
bits++;
}
/* Update appropriate duration bucket */
histogram[bits]++;
loop_count++;
@ -153,19 +155,29 @@ test_timing(int32 duration)
printf("Per loop time including overhead: %0.2f nsec\n",
INSTR_TIME_GET_DOUBLE(end_time) * 1e9 / loop_count);
printf("Histogram of timing durations:\n");
printf("%9s: %10s %9s\n", "< usec", "count", "percent");
found = 0;
for (i = 31; i >= 0; i--)
return loop_count;
}
static void
output(uint64 loop_count)
{
int64 max_bit = 31, i;
/* find highest bit value */
while (max_bit > 0 && histogram[max_bit] == 0)
max_bit--;
printf("Histogram of timing durations:\n");
printf("%6s %10s %10s\n", "< usec", "% of total", "count");
for (i = 0; i <= max_bit; i++)
{
if (found || histogram[i])
{
found = 1;
/* lame hack to work around INT64_FORMAT deficiencies */
snprintf(buf, sizeof(buf), INT64_FORMAT, histogram[i]);
printf("%9ld: %10s %8.5f%%\n", 1l << i, buf,
(double) histogram[i] * 100 / loop_count);
}
char buf[100];
/* lame hack to work around INT64_FORMAT deficiencies */
snprintf(buf, sizeof(buf), INT64_FORMAT, histogram[i]);
printf("%6ld %9.5f %10s\n", 1l << i,
(double) histogram[i] * 100 / loop_count, buf);
}
}

View File

@ -98,12 +98,12 @@
Testing timing overhead for 3 seconds.
Per loop time including overhead: 35.96 nsec
Histogram of timing durations:
< usec: count percent
16: 2 0.00000%
8: 13 0.00002%
4: 126 0.00015%
2: 2999652 3.59518%
1: 80435604 96.40465%
< usec % of total count
1 96.40465 80435604
2 3.59518 2999652
4 0.00015 126
8 0.00002 13
16 0.00000 2
</screen>
</para>
@ -159,12 +159,12 @@ tsc hpet acpi_pm
# pg_test_timing
Per loop time including overhead: 722.92 nsec
Histogram of timing durations:
< usec: count percent
16: 3 0.00007%
8: 563 0.01357%
4: 3241 0.07810%
2: 2990371 72.05956%
1: 1155682 27.84870%
< usec % of total count
1 27.84870 1155682
2 72.05956 2990371
4 0.07810 3241
8 0.01357 563
16 0.00007 3
</screen>
</para>
@ -206,13 +206,13 @@ $ pg_test_timing
Testing timing overhead for 3 seconds.
Per timing duration including loop overhead: 97.75 ns
Histogram of timing durations:
< usec: count percent
32: 1 0.00000%
16: 1 0.00000%
8: 22 0.00007%
4: 3010 0.00981%
2: 2993204 9.75277%
1: 27694571 90.23734%
< usec % of total count
1 90.23734 27694571
2 9.75277 2993204
4 0.00981 3010
8 0.00007 22
16 0.00000 1
32 0.00000 1
</screen></para>
</refsect2>