9 #include <sys/resource.h>
17 extern int end
, etext
, edata
;
22 util_print_cpu_stats(FILE *fp
)
27 long text
, data
, vm_limit
, vm_soft_limit
;
28 double user
, system
, scale
;
30 long vm_text
, vm_init_data
, vm_uninit_data
, vm_sbrk_data
;
32 /* Get the hostname */
33 (void) gethostname(hostname
, 256);
34 hostname
[256] = '\0'; /* just in case */
36 /* Get the virtual memory sizes */
37 vm_text
= (long) (((long) (&etext
)) / 1024.0 + 0.5);
38 vm_init_data
= (long) (((long) (&edata
) - (long) (&etext
)) / 1024.0 + 0.5);
39 vm_uninit_data
= (long) (((long) (&end
) - (long) (&edata
)) / 1024.0 + 0.5);
40 vm_sbrk_data
= (long) (((long) sbrk(0) - (long) (&end
)) / 1024.0 + 0.5);
42 /* Get virtual memory limits */
43 (void) getrlimit(RLIMIT_DATA
, &rlp
);
44 vm_limit
= (long) (rlp
.rlim_max
/ 1024.0 + 0.5);
45 vm_soft_limit
= (long) (rlp
.rlim_cur
/ 1024.0 + 0.5);
48 (void) getrusage(RUSAGE_SELF
, &rusage
);
49 user
= rusage
.ru_utime
.tv_sec
+ rusage
.ru_utime
.tv_usec
/1.0e6
;
50 system
= rusage
.ru_stime
.tv_sec
+ rusage
.ru_stime
.tv_usec
/1.0e6
;
51 scale
= (user
+ system
)*100.0;
52 if (scale
== 0.0) scale
= 0.001;
54 (void) fprintf(fp
, "Runtime Statistics\n");
55 (void) fprintf(fp
, "------------------\n");
56 (void) fprintf(fp
, "Machine name: %s\n", hostname
);
57 (void) fprintf(fp
, "User time %6.1f seconds\n", user
);
58 (void) fprintf(fp
, "System time %6.1f seconds\n\n", system
);
60 text
= (int) (rusage
.ru_ixrss
/ scale
+ 0.5);
61 data
= (int) ((rusage
.ru_idrss
+ rusage
.ru_isrss
) / scale
+ 0.5);
62 (void) fprintf(fp
, "Average resident text size = %5ldK\n", text
);
63 (void) fprintf(fp
, "Average resident data+stack size = %5ldK\n", data
);
64 (void) fprintf(fp
, "Maximum resident size = %5ldK\n\n",
66 (void) fprintf(fp
, "Virtual text size = %5ldK\n",
68 (void) fprintf(fp
, "Virtual data size = %5ldK\n",
69 vm_init_data
+ vm_uninit_data
+ vm_sbrk_data
);
70 (void) fprintf(fp
, " data size initialized = %5ldK\n",
72 (void) fprintf(fp
, " data size uninitialized = %5ldK\n",
74 (void) fprintf(fp
, " data size sbrk = %5ldK\n",
76 (void) fprintf(fp
, "Virtual memory limit = %5ldK (%ldK)\n\n",
77 vm_soft_limit
, vm_limit
);
79 (void) fprintf(fp
, "Major page faults = %ld\n", rusage
.ru_majflt
);
80 (void) fprintf(fp
, "Minor page faults = %ld\n", rusage
.ru_minflt
);
81 (void) fprintf(fp
, "Swaps = %ld\n", rusage
.ru_nswap
);
82 (void) fprintf(fp
, "Input blocks = %ld\n", rusage
.ru_inblock
);
83 (void) fprintf(fp
, "Output blocks = %ld\n", rusage
.ru_oublock
);
84 (void) fprintf(fp
, "Context switch (voluntary) = %ld\n", rusage
.ru_nvcsw
);
85 (void) fprintf(fp
, "Context switch (involuntary) = %ld\n", rusage
.ru_nivcsw
);
87 (void) fprintf(fp
, "Usage statistics not available\n");