64-bit SuperCore Timestamp Per Target Evaluation Request

Sebastian Huber sebastian.huber at embedded-brains.de
Fri Nov 16 10:00:03 UTC 2012


Hello,

I want to re-evaluate the change to 64-bit time stamps on nearly all architectures.

http://git.rtems.org/rtems/commit/?id=9c121991d719a37fba3a853fe43624818acbca85

It is true that the time related functions that only increment the time are 
more efficient with 64-bit time stamps, but we have severe problems if we 
operate with seconds.  One issue due to that was resolved with this patch:

http://git.rtems.org/rtems/commit/?id=c34bb0dcfa8ba1294cd5182349e1ddbe34f81bf4

Every application that uses time(), gettimeofday(), etc. must now perform at 
least one 64-bit division.  This operation is VERY expensive on some 
architectures.  The network stack uses also a seconds since boot value to do 
some timeout management (used in ether_output() for nearly each Ethernet packet).

I want to change all architectures back to (in cpu.h):

#define CPU_TIMESTAMP_USE_STRUCT_TIMESPEC TRUE

On 12/09/2008 10:26 PM, Joel Sherrill wrote:
> Hi,
>
> This is long but important so please take the time
> to read to the bottom.
>
> I just committed the last of a series of patches
> which adds the SuperCore Timestamp handler and
> the capability for a CPU port to pick one of three
> implementations of SuperCore Timestamps:
>
> + struct timespec (current implementation
> + int64_t (method not inlined)
> + int64_t (methods inlined)
>
> The int64_t is used for nanoseconds since POSIX epoch (1970)
> and can represent ~200 years.
>
> I have done extensive testing on SPARC/sis and PowerPC/psim
> to determine the impact of each implementation.  I hope the
> committed code reflects this. :)  I used tm26 (Thread Dispatch)
> and tm02 (semaphore obtain blocking as reference performance
> measurements
>
> On PowerPC/psim the following numbers are in instructions:
>
>                           timespec  int64  inlined int64
>      dispatch:              446      446      400
>      blocking sem obtain:   627      626      581
>
> On SPARC/sis, the following numbers are in microseconds:
>
>                           timespec  int64  inlined int64
>      dispatch:               59       61       53
>      blocking sem obtain:    98      100       92
>
> This means that (on THESE TARGETS) inlined int64_t results
> in ~7.5% faster blocking semaphore obtains and about 10% off
> any thread dispatch that context switches.  This impact a lot
> of thread operations.
>
> Since inlined int64_t operations appear to be faster, they
> may be a better choice on some targets.  However, there is
> a size issue I need to look into.  The minimum executable is
> slightly smaller with int64_t but ticker is larger. The timespec
> math was optimized for clock tick so maybe the int64_t math
> just is heavier there.  I don't know.
>
> The code is now committed to the CVS trunk.  It would be
> helpful to get feedback on other targets as to the impact.
> For now, you will have edit
> cpukit/score/include/rtems/score/timestamp.h to switch
> between the alternatives.
>
> I am convinced that the best choice for each target will
> need to be selected.  On targets like the PowerPC where
> code space is not an issue, inlined int64_t is probably
> the best choice.  But others may not show the performance
> benefit or memory may be at a premium (e.g. Thumb) so
> a different choice may be apprpriate.
>
> Please pitch in and provide feedback.
>


-- 
Sebastian Huber, embedded brains GmbH

Address : Obere Lagerstr. 30, D-82178 Puchheim, Germany
Phone   : +49 89 18 90 80 79-6
Fax     : +49 89 18 90 80 79-9
E-Mail  : sebastian.huber at embedded-brains.de
PGP     : Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.





More information about the devel mailing list