Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit4a87f30

Browse files
committed
Add --progress option to show progress report
Patch contributed by Fabien COELHO, reviewed by KONDO Mitsumasa.
1 parentcc1965a commit4a87f30

File tree

2 files changed

+94
-2
lines changed

2 files changed

+94
-2
lines changed

‎contrib/pgbench/pgbench.c

Lines changed: 84 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ static intpthread_join(pthread_t th, void **thread_return);
7474
#include<pthread.h>
7575
#else
7676
/* Use emulation with fork. Rename pthread identifiers to avoid conflicts */
77-
77+
#definePTHREAD_FORK_EMULATION
7878
#include<sys/wait.h>
7979

8080
#definepthread_tpg_pthread_t
@@ -164,6 +164,8 @@ booluse_log;/* log transaction latencies to a file */
164164
booluse_quiet;/* quiet logging onto stderr */
165165
intagg_interval;/* log aggregates instead of individual
166166
* transactions */
167+
intprogress=0;/* thread progress report every this seconds */
168+
intprogress_nclients=0;/* number of clients for progress report */
167169
boolis_connect;/* establish connection for each transaction */
168170
boolis_latencies;/* report per-command latencies */
169171
intmain_pid;/* main process id used in log filename */
@@ -352,6 +354,7 @@ usage(void)
352354
"(default: simple)\n"
353355
" -n, --no-vacuum do not run VACUUM before tests\n"
354356
" -N, --skip-some-updates skip updates of pgbench_tellers and pgbench_branches\n"
357+
" -P, --progress NUM show thread progress report every NUM seconds\n"
355358
" -r, --report-latencies report average latency per command\n"
356359
" -s, --scale=NUM report this scale factor in output\n"
357360
" -S, --select-only perform SELECT-only transactions\n"
@@ -2119,6 +2122,7 @@ main(int argc, char **argv)
21192122
{"log",no_argument,NULL,'l'},
21202123
{"no-vacuum",no_argument,NULL,'n'},
21212124
{"port",required_argument,NULL,'p'},
2125+
{"progress",required_argument,NULL,'P'},
21222126
{"protocol",required_argument,NULL,'M'},
21232127
{"quiet",no_argument,NULL,'q'},
21242128
{"report-latencies",no_argument,NULL,'r'},
@@ -2202,7 +2206,7 @@ main(int argc, char **argv)
22022206
state= (CState*)pg_malloc(sizeof(CState));
22032207
memset(state,0,sizeof(CState));
22042208

2205-
while ((c=getopt_long(argc,argv,"ih:nvp:dqSNc:j:Crs:t:T:U:lf:D:F:M:",long_options,&optindex))!=-1)
2209+
while ((c=getopt_long(argc,argv,"ih:nvp:dqSNc:j:Crs:t:T:U:lf:D:F:M:P:",long_options,&optindex))!=-1)
22062210
{
22072211
switch (c)
22082212
{
@@ -2357,6 +2361,16 @@ main(int argc, char **argv)
23572361
exit(1);
23582362
}
23592363
break;
2364+
case'P':
2365+
progress=atoi(optarg);
2366+
if (progress <=0)
2367+
{
2368+
fprintf(stderr,
2369+
"thread progress delay (-P) must be positive (%s)\n",
2370+
optarg);
2371+
exit(1);
2372+
}
2373+
break;
23602374
case0:
23612375
/* This covers long options which take no argument. */
23622376
break;
@@ -2482,6 +2496,7 @@ main(int argc, char **argv)
24822496
* changed after fork.
24832497
*/
24842498
main_pid= (int)getpid();
2499+
progress_nclients=nclients;
24852500

24862501
if (nclients>1)
24872502
{
@@ -2733,6 +2748,11 @@ threadRun(void *arg)
27332748
intnstate=thread->nstate;
27342749
intremains=nstate;/* number of remaining clients */
27352750
inti;
2751+
/* for reporting progress: */
2752+
int64thread_start=INSTR_TIME_GET_MICROSEC(thread->start_time);
2753+
int64last_report=thread_start;
2754+
int64next_report=last_report+progress*1000000;
2755+
int64last_count=0;
27362756

27372757
AggValsaggs;
27382758

@@ -2896,6 +2916,68 @@ threadRun(void *arg)
28962916
st->con=NULL;
28972917
}
28982918
}
2919+
2920+
#ifdefPTHREAD_FORK_EMULATION
2921+
/* each process reports its own progression */
2922+
if (progress)
2923+
{
2924+
instr_timenow_time;
2925+
int64now;
2926+
INSTR_TIME_SET_CURRENT(now_time);
2927+
now=INSTR_TIME_GET_MICROSEC(now_time);
2928+
if (now >=next_report)
2929+
{
2930+
/* generate and show report */
2931+
int64count=0;
2932+
int64run=now-last_report;
2933+
floattps,total_run,latency;
2934+
2935+
for (i=0 ;i<nstate ;i++)
2936+
count+=state[i].cnt;
2937+
2938+
total_run= (now-thread_start) /1000000.0;
2939+
tps=1000000.0* (count-last_count) /run;
2940+
latency=1000.0*nstate /tps;
2941+
2942+
fprintf(stderr,"progress %d: %.1f s, %.1f tps, %.3f ms lat\n",
2943+
thread->tid,total_run,tps,latency);
2944+
2945+
last_count=count;
2946+
last_report=now;
2947+
next_report+=progress*1000000;
2948+
}
2949+
}
2950+
#else
2951+
/* progress report by thread 0 for all threads */
2952+
if (progress&&thread->tid==0)
2953+
{
2954+
instr_timenow_time;
2955+
int64now;
2956+
INSTR_TIME_SET_CURRENT(now_time);
2957+
now=INSTR_TIME_GET_MICROSEC(now_time);
2958+
if (now >=next_report)
2959+
{
2960+
/* generate and show report */
2961+
int64count=0;
2962+
int64run=now-last_report;
2963+
floattps,total_run,latency;
2964+
2965+
for (i=0 ;i<progress_nclients ;i++)
2966+
count+=state[i].cnt;
2967+
2968+
total_run= (now-thread_start) /1000000.0;
2969+
tps=1000000.0* (count-last_count) /run;
2970+
latency=1000.0*progress_nclients /tps;
2971+
2972+
fprintf(stderr,"progress: %.1f s, %.1f tps, %.3f ms lat\n",
2973+
total_run,tps,latency);
2974+
2975+
last_count=count;
2976+
last_report=now;
2977+
next_report+=progress*1000000;
2978+
}
2979+
}
2980+
#endif/* PTHREAD_FORK_EMULATION */
28992981
}
29002982

29012983
done:

‎doc/src/sgml/pgbench.sgml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -407,6 +407,16 @@ pgbench <optional> <replaceable>options</> </optional> <replaceable>dbname</>
407407
</listitem>
408408
</varlistentry>
409409

410+
<varlistentry>
411+
<term><option>-P</option> <replaceable>sec</></term>
412+
<term><option>--progress</option> <replaceable>sec</></term>
413+
<listitem>
414+
<para>
415+
Show progress report about every <literal>sec</> seconds.
416+
</para>
417+
</listitem>
418+
</varlistentry>
419+
410420
<varlistentry>
411421
<term><option>-s</option> <replaceable>scale_factor</></term>
412422
<term><option>--scale=</option><replaceable>scale_factor</></term>

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp