\r
unsigned long long Hertz = 1;\r
\r
+long processors = 1;\r
long pid_max = 32768;\r
int debug = 0;\r
\r
int i = 1;\r
\r
debug = 0;\r
- if(strcmp(argv[i], "debug") == 0) {\r
+ if(i < argc && strcmp(argv[i], "debug") == 0) {\r
debug = 1;\r
i++;\r
}\r
\r
- update_every = atoi(argv[i++]);\r
- if(update_every == 0) {\r
- i = 1;\r
- update_every = 1;\r
+ if(i < argc) {\r
+ update_every = atoi(argv[i++]);\r
+ if(update_every == 0) {\r
+ i = 1;\r
+ update_every = 1;\r
+ }\r
}\r
\r
for(; i < argc ; i++) {\r
\r
// we have something new to show\r
// update the charts\r
- fprintf(stdout, "CHART apps.cpu '' 'Applications CPU Time' 'cpu time %%' apps apps stacked 20001 %d\n", update_every);\r
+ fprintf(stdout, "CHART apps.cpu '' 'Apps CPU Time (100%% = %ld core%s)' 'cpu time %%' apps apps stacked 20001 %d\n", processors, (processors>1)?"s":"", update_every);\r
for (w = wanted_root; w ; w = w->next) {\r
if(w->target || (!w->processes && !w->exposed)) continue;\r
\r
- fprintf(stdout, "DIMENSION %s '' incremental 100 %llu\n", w->name, Hertz);\r
+ fprintf(stdout, "DIMENSION %s '' incremental 100 %llu\n", w->name, Hertz * processors);\r
}\r
\r
- fprintf(stdout, "CHART apps.rss '' 'Applications Memory' 'MB' apps apps stacked 20002 %d\n", update_every);\r
+ fprintf(stdout, "CHART apps.rss '' 'Apps Memory' 'MB' apps apps stacked 20002 %d\n", update_every);\r
for (w = wanted_root; w ; w = w->next) {\r
if(w->target || (!w->processes && !w->exposed)) continue;\r
\r
fprintf(stdout, "DIMENSION %s '' absolute %ld %ld\n", w->name, sysconf(_SC_PAGESIZE), 1024L*1024L);\r
}\r
\r
- fprintf(stdout, "CHART apps.threads '' 'Applications Threads' 'threads' apps apps stacked 20005 %d\n", update_every);\r
+ fprintf(stdout, "CHART apps.threads '' 'Apps Threads' 'threads' apps apps stacked 20005 %d\n", update_every);\r
for (w = wanted_root; w ; w = w->next) {\r
if(w->target || (!w->processes && !w->exposed)) continue;\r
\r
fprintf(stdout, "DIMENSION %s '' absolute 1 1\n", w->name);\r
}\r
\r
- fprintf(stdout, "CHART apps.processes '' 'Applications Processes' 'processes' apps apps stacked 20004 %d\n", update_every);\r
+ fprintf(stdout, "CHART apps.processes '' 'Apps Processes' 'processes' apps apps stacked 20004 %d\n", update_every);\r
for (w = wanted_root; w ; w = w->next) {\r
if(w->target || (!w->processes && !w->exposed)) continue;\r
\r
fprintf(stdout, "DIMENSION %s '' absolute 1 1\n", w->name);\r
}\r
\r
- fprintf(stdout, "CHART apps.cpu_user '' 'Applications CPU User Time' 'cpu time %%' apps none stacked 20020 %d\n", update_every);\r
+ fprintf(stdout, "CHART apps.cpu_user '' 'Apps CPU User Time (100%% = %ld core%s)' 'cpu time %%' apps none stacked 20020 %d\n", processors, (processors>1)?"s":"", update_every);\r
for (w = wanted_root; w ; w = w->next) {\r
if(w->target || (!w->processes && !w->exposed)) continue;\r
\r
- fprintf(stdout, "DIMENSION %s '' incremental 100 %llu\n", w->name, Hertz);\r
+ fprintf(stdout, "DIMENSION %s '' incremental 100 %llu\n", w->name, Hertz * processors);\r
}\r
\r
- fprintf(stdout, "CHART apps.cpu_system '' 'Applications CPU System Time' 'cpu time %%' apps none stacked 20021 %d\n", update_every);\r
+ fprintf(stdout, "CHART apps.cpu_system '' 'Apps CPU System Time (100%% = %ld core%s)' 'cpu time %%' apps none stacked 20021 %d\n", processors, (processors>1)?"s":"", update_every);\r
for (w = wanted_root; w ; w = w->next) {\r
if(w->target || (!w->processes && !w->exposed)) continue;\r
\r
- fprintf(stdout, "DIMENSION %s '' incremental 100 %llu\n", w->name, Hertz);\r
+ fprintf(stdout, "DIMENSION %s '' incremental 100 %llu\n", w->name, Hertz * processors);\r
}\r
\r
- fprintf(stdout, "CHART apps.major_faults '' 'Applications Major Page Faults' 'page faults/s' apps apps stacked 20010 %d\n", update_every);\r
+ fprintf(stdout, "CHART apps.major_faults '' 'Apps Major Page Faults (swaps in)' 'page faults/s' apps apps stacked 20010 %d\n", update_every);\r
for (w = wanted_root; w ; w = w->next) {\r
if(w->target || (!w->processes && !w->exposed)) continue;\r
\r
fprintf(stdout, "DIMENSION %s '' incremental 1 1\n", w->name);\r
}\r
\r
- fprintf(stdout, "CHART apps.minor_faults '' 'Applications Minor Page Faults' 'page faults/s' apps apps stacked 20011 %d\n", update_every);\r
+ fprintf(stdout, "CHART apps.minor_faults '' 'Apps Minor Page Faults' 'page faults/s' apps apps stacked 20011 %d\n", update_every);\r
for (w = wanted_root; w ; w = w->next) {\r
if(w->target || (!w->processes && !w->exposed)) continue;\r
\r
return hz;\r
}\r
\r
+long get_processors(void)\r
+{\r
+ char buffer[1025], *s;\r
+ int processors = 0;\r
+\r
+ FILE *fp = fopen("/proc/stat", "r");\r
+ if(!fp) return 1;\r
+\r
+ while((s = fgets(buffer, 1024, fp))) {\r
+ if(strncmp(buffer, "cpu", 3) == 0) processors++;\r
+ }\r
+ fclose(fp);\r
+ processors--;\r
+ if(processors < 1) processors = 1;\r
+ return processors;\r
+}\r
\r
long get_pid_max(void)\r
{\r
return ((((now->tv_sec * 1000000ULL) + now->tv_usec) - ((last->tv_sec * 1000000ULL) + last->tv_usec)));\r
}\r
\r
-void mysleep(unsigned long long susec)\r
-{\r
- while(susec) {\r
- struct timeval t1, t2;\r
-\r
- gettimeofday(&t1, NULL);\r
-\r
- if(debug) fprintf(stderr, "Sleeping for %llu microseconds\n", susec);\r
- usleep(susec);\r
-\r
- gettimeofday(&t2, NULL);\r
-\r
- unsigned long long diff = usecdiff(&t2, &t1);\r
- \r
- if(diff < susec) susec -= diff;\r
- else susec = 0;\r
- }\r
-}\r
-\r
int main(int argc, char **argv)\r
{\r
Hertz = get_hertz();\r
pid_max = get_pid_max();\r
+ processors = get_processors();\r
\r
parse_args(argc, argv);\r
\r
if(usec < (update_every * 1000000ULL)) susec = (update_every * 1000000ULL) - usec;\r
else susec = 0;\r
\r
- mysleep(susec);\r
+ usleep(susec);\r
\r
bcopy(&now, &last, sizeof(struct timeval));\r
}\r