24#define NUM_DIRECT 10000
37main(
int argc,
char *argv[])
56 static struct option long_options[] = {
69 if (strcmp(argv[1],
"--help") == 0 || strcmp(argv[1],
"-?") == 0)
74 if (strcmp(argv[1],
"--version") == 0 || strcmp(argv[1],
"-V") == 0)
76 puts(
"pg_test_timing (PostgreSQL) " PG_VERSION);
82 long_options, &optindex)) != -1)
88 optval = strtoul(
optarg, &endptr, 10);
90 if (endptr ==
optarg || *endptr !=
'\0' ||
91 errno != 0 || optval != (
unsigned int) optval)
93 fprintf(stderr,
_(
"%s: invalid argument for option %s\n"),
102 fprintf(stderr,
_(
"%s: %s must be in range %u..%u\n"),
103 progname,
"--duration", 1, UINT_MAX);
112 if (endptr ==
optarg || *endptr !=
'\0' || errno != 0)
114 fprintf(stderr,
_(
"%s: invalid argument for option %s\n"),
120 if (max_rprct < 0 || max_rprct > 100)
122 fprintf(stderr,
_(
"%s: %s must be in range %u..%u\n"),
129 fprintf(stderr,
_(
"Try \"%s --help\" for more information.\n"),
139 _(
"%s: too many command-line arguments (first is \"%s\")\n"),
141 fprintf(stderr,
_(
"Try \"%s --help\" for more information.\n"),
147 "Testing timing overhead for %u seconds.\n",
156 int64 time_elapsed = 0;
179 while (time_elapsed < total_time)
192 fprintf(stderr,
_(
"Detected clock going backwards in time.\n"));
193 fprintf(stderr,
_(
"Time warp: %d ms\n"), diff);
228 printf(
_(
"Average loop time including overhead: %0.2f ns\n"),
238 const char *header1 =
_(
"<= ns");
239 const char *header1b =
_(
"ns");
240 const char *header2 =
_(
"% of total");
241 const char *header3 =
_(
"running %");
242 const char *header4 =
_(
"count");
243 int len1 = strlen(header1);
244 int len2 = strlen(header2);
245 int len3 = strlen(header3);
246 int len4 = strlen(header4);
248 bool stopped =
false;
251 while (max_bit > 0 &&
histogram[max_bit] == 0)
256 len2 =
Max(10, len2);
257 len3 =
Max(10, len3);
258 len4 =
Max(10, len4);
260 printf(
_(
"Histogram of timing durations:\n"));
261 printf(
"%*s %*s %*s %*s\n",
268 for (
int i = 0;
i <= max_bit;
i++)
270 double prct = (double)
histogram[
i] * 100 / loop_count;
273 printf(
"%*ld %*.4f %*.4f %*lld\n",
281 printf(
"%*s %*s %*s %*s\n",
293 bool print_it = !stopped;
306 printf(
"%*d %*.4f %*.4f %*lld\n",
322 printf(
"%*d %*.4f %*.4f %*lld\n",
#define ngettext(s, p, n)
#define PG_TEXTDOMAIN(domain)
void set_pglocale_pgservice(const char *argv0, const char *app)
#define fprintf(file, fmt, msg)
int getopt_long(int argc, char *const argv[], const char *optstring, const struct option *longopts, int *longindex)
#define required_argument
#define INSTR_TIME_SET_CURRENT(t)
#define INSTR_TIME_GET_NANOSEC(t)
#define INSTR_TIME_GET_DOUBLE(t)
#define INSTR_TIME_SUBTRACT(x, y)
static int pg_leftmost_one_pos32(uint32 word)
PGDLLIMPORT char * optarg
int main(int argc, char *argv[])
static void output(uint64 loop_count)
static long long int histogram[32]
static int32 largest_diff
static void handle_args(int argc, char *argv[])
static long long int largest_diff_count
static uint64 test_timing(unsigned int duration)
static const char * progname
static unsigned int test_duration
static long long int direct_histogram[NUM_DIRECT]
const char * get_progname(const char *argv0)