]> granicus.if.org Git - postgresql/blob - src/backend/utils/misc/pg_rusage.c
Make autovacuum behavior more agressive, per discussion on hackers list
[postgresql] / src / backend / utils / misc / pg_rusage.c
1 /*-------------------------------------------------------------------------
2  *
3  * pg_rusage.c
4  *        Resource usage measurement support routines.
5  *
6  *
7  * Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
8  * Portions Copyright (c) 1994, Regents of the University of California
9  *
10  *
11  * IDENTIFICATION
12  *        $PostgreSQL: pgsql/src/backend/utils/misc/pg_rusage.c,v 1.4 2006/03/05 15:58:49 momjian Exp $
13  *
14  *-------------------------------------------------------------------------
15  */
16 #include "postgres.h"
17
18 #include <unistd.h>
19
20 #include "utils/pg_rusage.h"
21
22
23 /*
24  * Initialize usage snapshot.
25  */
26 void
27 pg_rusage_init(PGRUsage *ru0)
28 {
29         getrusage(RUSAGE_SELF, &ru0->ru);
30         gettimeofday(&ru0->tv, NULL);
31 }
32
33 /*
34  * Compute elapsed time since ru0 usage snapshot, and format into
35  * a displayable string.  Result is in a static string, which is
36  * tacky, but no one ever claimed that the Postgres backend is
37  * threadable...
38  */
39 const char *
40 pg_rusage_show(const PGRUsage *ru0)
41 {
42         static char result[100];
43         PGRUsage        ru1;
44
45         pg_rusage_init(&ru1);
46
47         if (ru1.tv.tv_usec < ru0->tv.tv_usec)
48         {
49                 ru1.tv.tv_sec--;
50                 ru1.tv.tv_usec += 1000000;
51         }
52         if (ru1.ru.ru_stime.tv_usec < ru0->ru.ru_stime.tv_usec)
53         {
54                 ru1.ru.ru_stime.tv_sec--;
55                 ru1.ru.ru_stime.tv_usec += 1000000;
56         }
57         if (ru1.ru.ru_utime.tv_usec < ru0->ru.ru_utime.tv_usec)
58         {
59                 ru1.ru.ru_utime.tv_sec--;
60                 ru1.ru.ru_utime.tv_usec += 1000000;
61         }
62
63         snprintf(result, sizeof(result),
64                          "CPU %d.%02ds/%d.%02du sec elapsed %d.%02d sec",
65                          (int) (ru1.ru.ru_stime.tv_sec - ru0->ru.ru_stime.tv_sec),
66                   (int) (ru1.ru.ru_stime.tv_usec - ru0->ru.ru_stime.tv_usec) / 10000,
67                          (int) (ru1.ru.ru_utime.tv_sec - ru0->ru.ru_utime.tv_sec),
68                   (int) (ru1.ru.ru_utime.tv_usec - ru0->ru.ru_utime.tv_usec) / 10000,
69                          (int) (ru1.tv.tv_sec - ru0->tv.tv_sec),
70                          (int) (ru1.tv.tv_usec - ru0->tv.tv_usec) / 10000);
71
72         return result;
73 }