nmeter: reinstate and document -d-1
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
41b1e2c392
commit
0d1b71e8e6
@ -21,7 +21,7 @@
|
|||||||
//usage:#define nmeter_full_usage "\n\n"
|
//usage:#define nmeter_full_usage "\n\n"
|
||||||
//usage: "Monitor system in real time"
|
//usage: "Monitor system in real time"
|
||||||
//usage: "\n"
|
//usage: "\n"
|
||||||
//usage: "\n -d MSEC Milliseconds between updates (default:1000)"
|
//usage: "\n -d MSEC Milliseconds between updates, default:1000, none:-1"
|
||||||
//usage: "\n"
|
//usage: "\n"
|
||||||
//usage: "\nFormat specifiers:"
|
//usage: "\nFormat specifiers:"
|
||||||
//usage: "\n %Nc or %[cN] CPU. N - bar size (default:10)"
|
//usage: "\n %Nc or %[cN] CPU. N - bar size (default:10)"
|
||||||
@ -86,7 +86,7 @@ struct globals {
|
|||||||
char final_char;
|
char final_char;
|
||||||
char *cur_outbuf;
|
char *cur_outbuf;
|
||||||
int delta;
|
int delta;
|
||||||
int deltanz;
|
unsigned deltanz;
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
#define first_proc_file proc_stat
|
#define first_proc_file proc_stat
|
||||||
proc_file proc_stat; // Must match the order of proc_name's!
|
proc_file proc_stat; // Must match the order of proc_name's!
|
||||||
@ -101,8 +101,6 @@ struct globals {
|
|||||||
#define is26 (G.is26 )
|
#define is26 (G.is26 )
|
||||||
#define need_seconds (G.need_seconds )
|
#define need_seconds (G.need_seconds )
|
||||||
#define cur_outbuf (G.cur_outbuf )
|
#define cur_outbuf (G.cur_outbuf )
|
||||||
#define delta (G.delta )
|
|
||||||
#define deltanz (G.deltanz )
|
|
||||||
#define tv (G.tv )
|
#define tv (G.tv )
|
||||||
#define proc_stat (G.proc_stat )
|
#define proc_stat (G.proc_stat )
|
||||||
#define proc_loadavg (G.proc_loadavg )
|
#define proc_loadavg (G.proc_loadavg )
|
||||||
@ -114,7 +112,7 @@ struct globals {
|
|||||||
SET_PTR_TO_GLOBALS(xzalloc(sizeof(G))); \
|
SET_PTR_TO_GLOBALS(xzalloc(sizeof(G))); \
|
||||||
cur_outbuf = outbuf; \
|
cur_outbuf = outbuf; \
|
||||||
G.final_char = '\n'; \
|
G.final_char = '\n'; \
|
||||||
deltanz = delta = 1000000; \
|
G.deltanz = G.delta = 1000000; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
// We depend on this being a char[], not char* - we take sizeof() of it
|
// We depend on this being a char[], not char* - we take sizeof() of it
|
||||||
@ -844,9 +842,9 @@ int nmeter_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (getopt32(argv, "d:", &opt_d)) {
|
if (getopt32(argv, "d:", &opt_d)) {
|
||||||
delta = xatou(opt_d) * 1000;
|
G.delta = xatoi(opt_d) * 1000;
|
||||||
deltanz = delta > 0 ? delta : 1;
|
G.deltanz = G.delta > 0 ? G.delta : 1;
|
||||||
need_seconds = (1000000 % deltanz) != 0;
|
need_seconds = (1000000 % G.deltanz) != 0;
|
||||||
}
|
}
|
||||||
argv += optind;
|
argv += optind;
|
||||||
|
|
||||||
@ -902,8 +900,8 @@ int nmeter_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
last->next = s;
|
last->next = s;
|
||||||
last = s;
|
last = s;
|
||||||
} else {
|
} else {
|
||||||
// %NNNNd or %r option. remove it from string
|
// %r option. remove it from string
|
||||||
strcpy(prev + strlen(prev), cur);
|
overlapping_strcpy(prev + strlen(prev), cur);
|
||||||
cur = prev;
|
cur = prev;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -921,9 +919,9 @@ int nmeter_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
// Generate first samples but do not print them, they're bogus
|
// Generate first samples but do not print them, they're bogus
|
||||||
collect_info(first);
|
collect_info(first);
|
||||||
reset_outbuf();
|
reset_outbuf();
|
||||||
if (delta >= 0) {
|
if (G.delta >= 0) {
|
||||||
gettimeofday(&tv, NULL);
|
gettimeofday(&tv, NULL);
|
||||||
usleep(delta > 1000000 ? 1000000 : delta - tv.tv_usec%deltanz);
|
usleep(G.delta > 1000000 ? 1000000 : G.delta - tv.tv_usec % G.deltanz);
|
||||||
}
|
}
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
@ -937,18 +935,18 @@ int nmeter_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
// time resolution ;)
|
// time resolution ;)
|
||||||
// TODO: detect and avoid useless updates
|
// TODO: detect and avoid useless updates
|
||||||
// (like: nothing happens except time)
|
// (like: nothing happens except time)
|
||||||
if (delta >= 0) {
|
if (G.delta >= 0) {
|
||||||
int rem;
|
int rem;
|
||||||
// can be commented out, will sacrifice sleep time precision a bit
|
// can be commented out, will sacrifice sleep time precision a bit
|
||||||
gettimeofday(&tv, NULL);
|
gettimeofday(&tv, NULL);
|
||||||
if (need_seconds)
|
if (need_seconds)
|
||||||
rem = delta - ((ullong)tv.tv_sec*1000000 + tv.tv_usec) % deltanz;
|
rem = G.delta - ((ullong)tv.tv_sec*1000000 + tv.tv_usec) % G.deltanz;
|
||||||
else
|
else
|
||||||
rem = delta - tv.tv_usec%deltanz;
|
rem = G.delta - (unsigned)tv.tv_usec % G.deltanz;
|
||||||
// Sometimes kernel wakes us up just a tiny bit earlier than asked
|
// Sometimes kernel wakes us up just a tiny bit earlier than asked
|
||||||
// Do not go to very short sleep in this case
|
// Do not go to very short sleep in this case
|
||||||
if (rem < delta/128) {
|
if (rem < (unsigned)G.delta / 128) {
|
||||||
rem += delta;
|
rem += G.delta;
|
||||||
}
|
}
|
||||||
usleep(rem);
|
usleep(rem);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user