Age Owner Branch data TLA Line data Source code
1 : : /*-------------------------------------------------------------------------
2 : : *
3 : : * pg_rusage.c
4 : : * Resource usage measurement support routines.
5 : : *
6 : : *
7 : : * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
8 : : * Portions Copyright (c) 1994, Regents of the University of California
9 : : *
10 : : *
11 : : * IDENTIFICATION
12 : : * src/backend/utils/misc/pg_rusage.c
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
6768 tgl@sss.pgh.pa.us 27 :CBC 153110 : pg_rusage_init(PGRUsage *ru0)
28 : : {
29 : 153110 : getrusage(RUSAGE_SELF, &ru0->ru);
6749 andrew@dunslane.net 30 : 153110 : gettimeofday(&ru0->tv, NULL);
6768 tgl@sss.pgh.pa.us 31 : 153110 : }
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 : 74443 : pg_rusage_show(const PGRUsage *ru0)
41 : : {
42 : : static char result[100];
43 : : PGRUsage ru1;
44 : :
45 : 74443 : pg_rusage_init(&ru1);
46 : :
47 [ + + ]: 74443 : if (ru1.tv.tv_usec < ru0->tv.tv_usec)
48 : : {
49 : 73 : ru1.tv.tv_sec--;
50 : 73 : ru1.tv.tv_usec += 1000000;
51 : : }
52 [ - + ]: 74443 : if (ru1.ru.ru_stime.tv_usec < ru0->ru.ru_stime.tv_usec)
53 : : {
6768 tgl@sss.pgh.pa.us 54 :UBC 0 : ru1.ru.ru_stime.tv_sec--;
55 : 0 : ru1.ru.ru_stime.tv_usec += 1000000;
56 : : }
6768 tgl@sss.pgh.pa.us 57 [ + + ]:CBC 74443 : if (ru1.ru.ru_utime.tv_usec < ru0->ru.ru_utime.tv_usec)
58 : : {
59 : 5 : ru1.ru.ru_utime.tv_sec--;
60 : 5 : ru1.ru.ru_utime.tv_usec += 1000000;
61 : : }
62 : :
63 : 74443 : snprintf(result, sizeof(result),
2506 alvherre@alvh.no-ip. 64 : 74443 : _("CPU: user: %d.%02d s, system: %d.%02d s, elapsed: %d.%02d s"),
6768 tgl@sss.pgh.pa.us 65 : 74443 : (int) (ru1.ru.ru_utime.tv_sec - ru0->ru.ru_utime.tv_sec),
2489 66 : 74443 : (int) (ru1.ru.ru_utime.tv_usec - ru0->ru.ru_utime.tv_usec) / 10000,
2734 peter_e@gmx.net 67 : 74443 : (int) (ru1.ru.ru_stime.tv_sec - ru0->ru.ru_stime.tv_sec),
2489 tgl@sss.pgh.pa.us 68 : 74443 : (int) (ru1.ru.ru_stime.tv_usec - ru0->ru.ru_stime.tv_usec) / 10000,
6768 69 : 74443 : (int) (ru1.tv.tv_sec - ru0->tv.tv_sec),
70 : 74443 : (int) (ru1.tv.tv_usec - ru0->tv.tv_usec) / 10000);
71 : :
72 : 74443 : return result;
73 : : }
|