Alessandro Rubini
authored
This changes the kernel configuration, in two ways:
1- It uses CONFIG_NOHZ, which enables Hight Resolution Timers
Unfortunately this has no effect, as the timeevent device for AT91
doesn't support oneshot mode. This means that if you usleep(100)
you'll wait 10ms. Thus, we can't remove the busy-looping in libwr/util.c .
This is the output of my libstamp sample program:
0.003 -- stamping overhead
12.243 -- usleep 1 usec
10.005 -- usleep 1 usec
9.963 -- usleep 2 usec
10.037 -- usleep 5 usec
10.083 -- usleep 10 usec
9.905 -- usleep 100 usec
10.394 -- usleep 1000 usec
19.775 -- usleep 10000 usec
109.925 -- usleep 100000 usec
2- It moves CONFIG_HZ from 100 to 1000. Thus, we have 1000 timer interrupts
per second.
This means, in practice, that if you usleep(100) you wait 1ms. This
costs around 2% of CPU power (measured by running a cpu-busy program
before and after the change, in both cases after killing all
processes), but makes stuff millisecond-grained instead of
10ms-grained. This is a benefit for the PTP daemon and everything uses
timeouts in system calls.
This is libstamp again:
0.003 -- stamping overhead
0.662 -- usleep 1 usec
0.869 -- usleep 1 usec
0.976 -- usleep 2 usec
0.951 -- usleep 5 usec
0.993 -- usleep 10 usec
0.999 -- usleep 100 usec
1.999 -- usleep 1000 usec
11.006 -- usleep 10000 usec
101.043 -- usleep 100000 usec
Signed-off-by:
Alessandro Rubini <rubini@gnudd.com>
Name | Last commit | Last update |
---|