Skip to content
Snippets Groups Projects
Alessandro Rubini's avatar
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: default avatarAlessandro Rubini <rubini@gnudd.com>
fe9f6db6
History
Name Last commit Last update