hwclock: size optimizations

libbb/time.c: new file, introducing monotonic_us()
pscan, traceroute, arping: use it instead of gettimeofday
ping, zcip: TODO

function                                             old     new   delta
monotonic_us                                           -      89     +89
find_pair                                            164     180     +16
.rodata                                           129747  129763     +16
refresh                                             1144    1152      +8
............
timeout                                                8       4      -4
static.start                                           8       4      -4
last                                                   8       4      -4
parse_conf                                          1303    1284     -19
time_main                                           1149    1124     -25
gettimeofday_us                                       39       -     -39
arping_main                                         2042    1969     -73
hwclock_main                                         594     501     -93
catcher                                              485     380    -105
traceroute_main                                     4300    4117    -183
------------------------------------------------------------------------------
(add/remove: 2/1 grow/shrink: 8/11 up/down: 157/-562)        Total: -405 bytes
This commit is contained in:
Denis Vlasenko
2007-06-17 19:09:05 +00:00
parent e79dd06782
commit 459be35234
10 changed files with 228 additions and 260 deletions

View File

@@ -95,4 +95,14 @@ config FEATURE_EDITING_FANCY_PROMPT
Setting this option allows for prompts to use things like \w and
\$ and escape codes.
config MONOTONIC_SYSCALL
bool "Use clock_gettime(CLOCK_MONOTONIC) syscall"
default y
help
Use clock_gettime(CLOCK_MONOTONIC) syscall for measuring
time intervals (time, ping, traceroute etc need this).
Probably requires Linux 2.6+. If not selected, gettimeofday
will be used instead (which gives wrong results if date/time
is reset).
endmenu

View File

@@ -78,6 +78,7 @@ lib-y += simplify_path.o
lib-y += skip_whitespace.o
lib-y += speed_table.o
lib-y += str_tolower.o
lib-y += time.o
lib-y += trim.o
lib-y += u_signal_names.o
lib-y += udp_io.o

32
libbb/time.c Normal file
View File

@@ -0,0 +1,32 @@
/* vi: set sw=4 ts=4: */
/*
* Utility routines.
*
* Copyright (C) 2007 Denis Vlasenko
*
* Licensed under GPL version 2, see file LICENSE in this tarball for details.
*/
#include "libbb.h"
#if ENABLE_MONOTONIC_SYSCALL
#include <sys/syscall.h>
/* libc has incredibly messy way of doing this,
* typically requiring -lrt. We just skip all this mess */
unsigned long long monotonic_us(void)
{
struct timespec ts;
if (syscall(__NR_clock_gettime, CLOCK_MONOTONIC, &ts))
bb_error_msg_and_die("clock_gettime(MONOTONIC) failed");
return ts.tv_sec * 1000000ULL + ts.tv_nsec/1000;
}
#else
unsigned long long monotonic_us(void)
{
struct timeval tv;
if (gettimeofday(&tv, NULL))
bb_error_msg_and_die("gettimeofday failed");
return tv.tv_sec * 1000000ULL + tv_usec;
}
#endif