[PATCH] Remove use ticks for statistics configure option.
Joel Sherrill
joel.sherrill at oarcorp.com
Wed Jun 3 17:42:19 UTC 2015
Are there any comments on this patch? If not, I
am going to push it.
On 5/27/2015 10:16 AM, Joel Sherrill wrote:
> This was obsolete and broken based upon recent time keeping changes.
>
> Thie build option was previously enabled by adding
> USE_TICKS_FOR_STATISTICS=1 to the configure command line.
>
> This propagated into the code as preprocessor conditionals
> using the __RTEMS_USE_TICKS_FOR_STATISTICS__ conditional.
> ---
> cpukit/configure.ac | 5 --
> cpukit/libcsupport/src/__times.c | 68 ++++++++----------
> cpukit/libmisc/cpuuse/cpuusagedata.c | 6 +--
> cpukit/libmisc/cpuuse/cpuusagereport.c | 90 ++++--------------------
> cpukit/libmisc/cpuuse/cpuusagereset.c | 26 +++-----
> cpukit/libmisc/cpuuse/cpuusagetop.c | 35 ++--------
> cpukit/libmisc/cpuuse/cpuuse.h | 10 +--
> cpukit/rtems/include/rtems/rtems/ratemon.h | 16 +---
> cpukit/rtems/include/rtems/rtems/ratemonimpl.h | 52 +++++---------
> cpukit/rtems/include/rtems/rtems/types.h | 6 +--
> cpukit/rtems/src/ratemongetstatistics.c | 21 ++----
> cpukit/rtems/src/ratemongetstatus.c | 32 +++------
> cpukit/rtems/src/ratemonperiod.c | 85 +++++++++-------------
> cpukit/rtems/src/ratemonreportstatistics.c | 65 +++--------------
> cpukit/score/include/rtems/score/thread.h | 8 +--
> cpukit/score/src/schedulerdefaulttick.c | 7 --
> cpukit/score/src/threaddispatch.c | 15 +---
> cpukit/score/src/threadinitialize.c | 6 +--
> testsuites/sptests/sp69/init.c | 64 ++++++-----------
> 19 files changed, 175 insertions(+), 442 deletions(-)
>
> diff --git a/cpukit/configure.ac b/cpukit/configure.ac
> index 46942c9..c2b8e8d 100644
> --- a/cpukit/configure.ac
> +++ b/cpukit/configure.ac
> @@ -240,11 +240,6 @@ RTEMS_CPUOPT([RTEMS_VERSION],
> ["]_RTEMS_VERSION["],
> [RTEMS version string])
>
> -RTEMS_CPUOPT([__RTEMS_USE_TICKS_FOR_STATISTICS__],
> - [test x"${USE_TICKS_FOR_STATISTICS}" = x"1"],
> - [1],
> - [disable nanosecond granularity for statistics])
> -
> ## Header file differences that need to be known in .h after install
> RTEMS_CPUOPT([__RTEMS_HAVE_SYS_CPUSET_H__],
> [test x"${ac_cv_header_sys_cpuset_h}" = x"yes"],
> diff --git a/cpukit/libcsupport/src/__times.c b/cpukit/libcsupport/src/__times.c
> index 895ee6b..e5ec411 100644
> --- a/cpukit/libcsupport/src/__times.c
> +++ b/cpukit/libcsupport/src/__times.c
> @@ -31,9 +31,7 @@
> #include <errno.h>
> #include <rtems/seterr.h>
> #include <rtems/score/todimpl.h>
> -#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - #include <rtems/score/timestamp.h>
> -#endif
> +#include <rtems/score/timestamp.h>
> #include <rtems/score/threadimpl.h>
>
> /**
> @@ -63,41 +61,35 @@ clock_t _times(
> * of ticks since boot and the number of ticks executed by this
> * this thread.
> */
> -
> - #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - {
> - Timestamp_Control per_tick;
> - uint32_t ticks_of_executing;
> - uint32_t fractional_ticks;
> - Per_CPU_Control *cpu_self;
> -
> - _Timestamp_Set(
> - &per_tick,
> - rtems_configuration_get_microseconds_per_tick() /
> - TOD_MICROSECONDS_PER_SECOND,
> - (rtems_configuration_get_nanoseconds_per_tick() %
> - TOD_NANOSECONDS_PER_SECOND)
> - );
> -
> - cpu_self = _Thread_Dispatch_disable();
> - executing = _Thread_Executing;
> - _Thread_Update_cpu_time_used(
> - executing,
> - &_Thread_Time_of_last_context_switch
> - );
> - _Timestamp_Divide(
> - &executing->cpu_time_used,
> - &per_tick,
> - &ticks_of_executing,
> - &fractional_ticks
> - );
> - _Thread_Dispatch_enable( cpu_self );
> - ptms->tms_utime = ticks_of_executing * us_per_tick;
> - }
> - #else
> - executing = _Thread_Get_executing();
> - ptms->tms_utime = executing->cpu_time_used * us_per_tick;
> - #endif
> + {
> + Timestamp_Control per_tick;
> + uint32_t ticks_of_executing;
> + uint32_t fractional_ticks;
> + Per_CPU_Control *cpu_self;
> +
> + _Timestamp_Set(
> + &per_tick,
> + rtems_configuration_get_microseconds_per_tick() /
> + TOD_MICROSECONDS_PER_SECOND,
> + (rtems_configuration_get_nanoseconds_per_tick() %
> + TOD_NANOSECONDS_PER_SECOND)
> + );
> +
> + cpu_self = _Thread_Dispatch_disable();
> + executing = _Thread_Executing;
> + _Thread_Update_cpu_time_used(
> + executing,
> + &_Thread_Time_of_last_context_switch
> + );
> + _Timestamp_Divide(
> + &executing->cpu_time_used,
> + &per_tick,
> + &ticks_of_executing,
> + &fractional_ticks
> + );
> + _Thread_Dispatch_enable( cpu_self );
> + ptms->tms_utime = ticks_of_executing * us_per_tick;
> + }
> ptms->tms_stime = ticks * us_per_tick;
> ptms->tms_cutime = 0;
> ptms->tms_cstime = 0;
> diff --git a/cpukit/libmisc/cpuuse/cpuusagedata.c b/cpukit/libmisc/cpuuse/cpuusagedata.c
> index ea24db5..661b97e 100644
> --- a/cpukit/libmisc/cpuuse/cpuusagedata.c
> +++ b/cpukit/libmisc/cpuuse/cpuusagedata.c
> @@ -22,8 +22,4 @@
>
> #include <rtems/cpuuse.h>
>
> -#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - Timestamp_Control CPU_usage_Uptime_at_last_reset;
> -#else
> - uint32_t CPU_usage_Ticks_at_last_reset;
> -#endif
> +Timestamp_Control CPU_usage_Uptime_at_last_reset;
> diff --git a/cpukit/libmisc/cpuuse/cpuusagereport.c b/cpukit/libmisc/cpuuse/cpuusagereport.c
> index 5cba819..98b5f8b 100644
> --- a/cpukit/libmisc/cpuuse/cpuusagereport.c
> +++ b/cpukit/libmisc/cpuuse/cpuusagereport.c
> @@ -44,12 +44,8 @@ void rtems_cpu_usage_report_with_plugin(
> Objects_Information *information;
> char name[13];
> uint32_t ival, fval;
> - #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - Timestamp_Control uptime, total, ran, uptime_at_last_reset;
> - uint32_t seconds, nanoseconds;
> - #else
> - uint32_t total_units = 0;
> - #endif
> + Timestamp_Control uptime, total, ran, uptime_at_last_reset;
> + uint32_t seconds, nanoseconds;
>
> if ( !print )
> return;
> @@ -59,38 +55,15 @@ void rtems_cpu_usage_report_with_plugin(
> * the number of "ticks" we gave credit for to give the user a rough
> * guideline as to what each number means proportionally.
> */
> - #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - _Timestamp_Set_to_zero( &total );
> - uptime_at_last_reset = CPU_usage_Uptime_at_last_reset;
> - #else
> - for ( api_index = 1 ; api_index <= OBJECTS_APIS_LAST ; api_index++ ) {
> - #if !defined(RTEMS_POSIX_API) || defined(RTEMS_DEBUG)
> - if ( !_Objects_Information_table[ api_index ] )
> - continue;
> - #endif
> -
> - information = _Objects_Information_table[ api_index ][ 1 ];
> - if ( information ) {
> - for ( i=1 ; i <= information->maximum ; i++ ) {
> - the_thread = (Thread_Control *)information->local_table[ i ];
> -
> - if ( the_thread )
> - total_units += the_thread->cpu_time_used;
> - }
> - }
> - }
> - #endif
> + _Timestamp_Set_to_zero( &total );
> + uptime_at_last_reset = CPU_usage_Uptime_at_last_reset;
>
> (*print)(
> context,
> "-------------------------------------------------------------------------------\n"
> " CPU USAGE BY THREAD\n"
> "------------+----------------------------------------+---------------+---------\n"
> - #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - " ID | NAME | SECONDS | PERCENT\n"
> - #else
> - " ID | NAME | TICKS | PERCENT\n"
> - #endif
> + " ID | NAME | SECONDS | PERCENT\n"
> "------------+----------------------------------------+---------------+---------\n"
> );
>
> @@ -117,7 +90,6 @@ void rtems_cpu_usage_report_with_plugin(
> name
> );
>
> - #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> {
> Timestamp_Control last;
>
> @@ -150,52 +122,20 @@ void rtems_cpu_usage_report_with_plugin(
> ival, fval
> );
> }
> - #else
> - if (total_units) {
> - uint64_t ival_64;
> -
> - ival_64 = the_thread->cpu_time_used;
> - ival_64 *= 100000;
> - ival = ival_64 / total_units;
> - } else {
> - ival = 0;
> - }
> -
> - fval = ival % 1000;
> - ival /= 1000;
> - (*print)( context,
> - "%14" PRIu32 " |%4" PRIu32 ".%03" PRIu32 "\n",
> - the_thread->cpu_time_used,
> - ival,
> - fval
> - );
> - #endif
> }
> }
> }
>
> - #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - seconds = _Timestamp_Get_seconds( &total );
> - nanoseconds = _Timestamp_Get_nanoseconds( &total ) /
> - TOD_NANOSECONDS_PER_MICROSECOND;
> - (*print)(
> - context,
> - "------------+----------------------------------------+---------------+---------\n"
> - " TIME SINCE LAST CPU USAGE RESET IN SECONDS: %7" PRIu32 ".%06" PRIu32 "\n"
> - "-------------------------------------------------------------------------------\n",
> - seconds, nanoseconds
> - );
> - #else
> - (*print)(
> - context,
> - "------------+----------------------------------------+---------------+---------\n"
> - " TICKS SINCE LAST SYSTEM RESET: %14" PRIu32 "\n"
> - " TOTAL UNITS: %14" PRIu32 "\n"
> - "-------------------------------------------------------------------------------\n",
> - _Watchdog_Ticks_since_boot - CPU_usage_Ticks_at_last_reset,
> - total_units
> - );
> - #endif
> + seconds = _Timestamp_Get_seconds( &total );
> + nanoseconds = _Timestamp_Get_nanoseconds( &total ) /
> + TOD_NANOSECONDS_PER_MICROSECOND;
> + (*print)(
> + context,
> + "------------+----------------------------------------+---------------+---------\n"
> + " TIME SINCE LAST CPU USAGE RESET IN SECONDS: %7" PRIu32 ".%06" PRIu32 "\n"
> + "-------------------------------------------------------------------------------\n",
> + seconds, nanoseconds
> + );
> }
>
> void rtems_cpu_usage_report( void )
> diff --git a/cpukit/libmisc/cpuuse/cpuusagereset.c b/cpukit/libmisc/cpuuse/cpuusagereset.c
> index a167e85..e6c429e 100644
> --- a/cpukit/libmisc/cpuuse/cpuusagereset.c
> +++ b/cpukit/libmisc/cpuuse/cpuusagereset.c
> @@ -27,11 +27,7 @@ static void CPU_usage_Per_thread_handler(
> Thread_Control *the_thread
> )
> {
> - #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - _Timestamp_Set_to_zero( &the_thread->cpu_time_used );
> - #else
> - the_thread->cpu_time_used = 0;
> - #endif
> + _Timestamp_Set_to_zero( &the_thread->cpu_time_used );
> }
>
> /*
> @@ -39,21 +35,17 @@ static void CPU_usage_Per_thread_handler(
> */
> void rtems_cpu_usage_reset( void )
> {
> - #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - uint32_t cpu_count;
> - uint32_t cpu_index;
> + uint32_t cpu_count;
> + uint32_t cpu_index;
>
> - _TOD_Get_uptime( &CPU_usage_Uptime_at_last_reset );
> + _TOD_Get_uptime( &CPU_usage_Uptime_at_last_reset );
>
> - cpu_count = rtems_get_processor_count();
> - for ( cpu_index = 0 ; cpu_index < cpu_count ; ++cpu_index ) {
> - Per_CPU_Control *cpu = _Per_CPU_Get_by_index( cpu_index );
> + cpu_count = rtems_get_processor_count();
> + for ( cpu_index = 0 ; cpu_index < cpu_count ; ++cpu_index ) {
> + Per_CPU_Control *cpu = _Per_CPU_Get_by_index( cpu_index );
>
> - cpu->time_of_last_context_switch = CPU_usage_Uptime_at_last_reset;
> - }
> - #else
> - CPU_usage_Ticks_at_last_reset = _Watchdog_Ticks_since_boot;
> - #endif
> + cpu->time_of_last_context_switch = CPU_usage_Uptime_at_last_reset;
> + }
>
> rtems_iterate_over_all_threads(CPU_usage_Per_thread_handler);
> }
> diff --git a/cpukit/libmisc/cpuuse/cpuusagetop.c b/cpukit/libmisc/cpuuse/cpuusagetop.c
> index e4a47fe..eaa192a 100644
> --- a/cpukit/libmisc/cpuuse/cpuusagetop.c
> +++ b/cpukit/libmisc/cpuuse/cpuusagetop.c
> @@ -144,31 +144,14 @@ static inline bool less_than_uint32_t( uint32_t * lhs, uint32_t * rhs )
> return false;
> }
>
> -#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - #define CPU_usage_Equal_to( _lhs, _rhs ) \
> - _Timestamp_Equal_to( _lhs, _rhs )
> -#else
> - #define CPU_usage_Equal_to( _lhs, _rhs ) \
> - equal_to_uint32_t( _lhs, _rhs )
> -#endif
> +#define CPU_usage_Equal_to( _lhs, _rhs ) \
> + _Timestamp_Equal_to( _lhs, _rhs )
>
> -#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - #define CPU_usage_Set_to_zero( _time ) \
> - _Timestamp_Set_to_zero( _time )
> -#else
> - #define CPU_usage_Set_to_zero( _time ) \
> - do { \
> - *_time = 0; \
> - } while (0)
> -#endif
> +#define CPU_usage_Set_to_zero( _time ) \
> + _Timestamp_Set_to_zero( _time )
>
> -#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - #define CPU_usage_Less_than( _lhs, _rhs ) \
> - _Timestamp_Less_than( _lhs, _rhs )
> -#else
> - #define CPU_usage_Less_than( _lhs, _rhs ) \
> - less_than_uint32_t( _lhs, _rhs )
> -#endif
> +#define CPU_usage_Less_than( _lhs, _rhs ) \
> + _Timestamp_Less_than( _lhs, _rhs )
>
> static void
> print_memsize(rtems_cpu_usage_data* data, const uint32_t size, const char* label)
> @@ -581,11 +564,6 @@ void rtems_cpu_usage_top_with_plugin(
> rtems_printk_plugin_t print
> )
> {
> -#ifdef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - if ( !print )
> - return;
> - (*print)(context, "error: tick kernels not supported\n");
> -#else
> rtems_status_code sc;
> rtems_task_priority priority;
> rtems_name name;
> @@ -714,7 +692,6 @@ void rtems_cpu_usage_top_with_plugin(
> rtems_event_send(id, RTEMS_EVENT_1);
> }
> }
> -#endif
> }
>
> void rtems_cpu_usage_top( void )
> diff --git a/cpukit/libmisc/cpuuse/cpuuse.h b/cpukit/libmisc/cpuuse/cpuuse.h
> index 662d905..1e26019 100644
> --- a/cpukit/libmisc/cpuuse/cpuuse.h
> +++ b/cpukit/libmisc/cpuuse/cpuuse.h
> @@ -25,9 +25,7 @@
> #include <rtems.h>
> #include <rtems/bspIo.h>
>
> -#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - #include <rtems/score/timestamp.h>
> -#endif
> +#include <rtems/score/timestamp.h>
>
> /**
> * @defgroup libmisc_cpuuse CPU Usage
> @@ -39,11 +37,7 @@
> extern "C" {
> #endif
>
> -#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - extern Timestamp_Control CPU_usage_Uptime_at_last_reset;
> -#else
> - extern uint32_t CPU_usage_Ticks_at_last_reset;
> -#endif
> +extern Timestamp_Control CPU_usage_Uptime_at_last_reset;
>
> /*
> * rtems_cpu_usage_report_with_handler
> diff --git a/cpukit/rtems/include/rtems/rtems/ratemon.h b/cpukit/rtems/include/rtems/rtems/ratemon.h
> index 8701639..3f8ed8b 100644
> --- a/cpukit/rtems/include/rtems/rtems/ratemon.h
> +++ b/cpukit/rtems/include/rtems/rtems/ratemon.h
> @@ -62,25 +62,17 @@ extern "C" {
> * This is the public type used for the rate monotonic timing
> * statistics.
> */
> -#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - #include <rtems/score/timespec.h>
> +#include <rtems/score/timespec.h>
>
> - typedef struct timespec rtems_rate_monotonic_period_time_t;
> -#else
> - typedef uint32_t rtems_rate_monotonic_period_time_t;
> -#endif
> +typedef struct timespec rtems_rate_monotonic_period_time_t;
>
> /**
> * This is the internal type used for the rate monotonic timing
> * statistics.
> */
> -#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - #include <rtems/score/timestamp.h>
> +#include <rtems/score/timestamp.h>
>
> - typedef Timestamp_Control Rate_monotonic_Period_time_t;
> -#else
> - typedef uint32_t Rate_monotonic_Period_time_t;
> -#endif
> +typedef Timestamp_Control Rate_monotonic_Period_time_t;
>
> /**
> * The following enumerated type defines the states in which a
> diff --git a/cpukit/rtems/include/rtems/rtems/ratemonimpl.h b/cpukit/rtems/include/rtems/rtems/ratemonimpl.h
> index 1489e57..b3aa1cf 100644
> --- a/cpukit/rtems/include/rtems/rtems/ratemonimpl.h
> +++ b/cpukit/rtems/include/rtems/rtems/ratemonimpl.h
> @@ -201,46 +201,30 @@ void _Rate_monotonic_Initiate_statistics(
> *
> * This method resets the statistics information for a period instance.
> */
> -#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - #define _Rate_monotonic_Reset_wall_time_statistics( _the_period ) \
> - do { \
> - /* set the minimums to a large value */ \
> - _Timestamp_Set( \
> - &(_the_period)->Statistics.min_wall_time, \
> - 0x7fffffff, \
> - 0x7fffffff \
> - ); \
> - } while (0)
> -#else
> - #define _Rate_monotonic_Reset_wall_time_statistics( _the_period ) \
> - do { \
> - /* set the minimum to a large value */ \
> - (_the_period)->Statistics.min_wall_time = 0xffffffff; \
> - } while (0)
> -#endif
> +#define _Rate_monotonic_Reset_wall_time_statistics( _the_period ) \
> + do { \
> + /* set the minimums to a large value */ \
> + _Timestamp_Set( \
> + &(_the_period)->Statistics.min_wall_time, \
> + 0x7fffffff, \
> + 0x7fffffff \
> + ); \
> + } while (0)
>
> /**
> * @brief Rate_monotonic_Reset_cpu_use_statistics
> *
> * This helper method resets the period CPU usage statistics structure.
> */
> -#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - #define _Rate_monotonic_Reset_cpu_use_statistics( _the_period ) \
> - do { \
> - /* set the minimums to a large value */ \
> - _Timestamp_Set( \
> - &(_the_period)->Statistics.min_cpu_time, \
> - 0x7fffffff, \
> - 0x7fffffff \
> - ); \
> - } while (0)
> -#else
> - #define _Rate_monotonic_Reset_cpu_use_statistics( _the_period ) \
> - do { \
> - /* set the minimum to a large value */ \
> - (_the_period)->Statistics.min_cpu_time = 0xffffffff; \
> - } while (0)
> -#endif
> +#define _Rate_monotonic_Reset_cpu_use_statistics( _the_period ) \
> + do { \
> + /* set the minimums to a large value */ \
> + _Timestamp_Set( \
> + &(_the_period)->Statistics.min_cpu_time, \
> + 0x7fffffff, \
> + 0x7fffffff \
> + ); \
> + } while (0)
>
> /**
> * @brief Rate_monotonic_Reset_statistics
> diff --git a/cpukit/rtems/include/rtems/rtems/types.h b/cpukit/rtems/include/rtems/rtems/types.h
> index fb88116..9789476 100644
> --- a/cpukit/rtems/include/rtems/rtems/types.h
> +++ b/cpukit/rtems/include/rtems/rtems/types.h
> @@ -124,11 +124,7 @@ typedef Watchdog_Interval rtems_interval;
> * When using nanoseconds granularity timing, RTEMS may internally use a
> * variety of representations.
> */
> -#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - typedef struct timespec rtems_thread_cpu_usage_t;
> -#else
> - typedef uint32_t rtems_thread_cpu_usage_t;
> -#endif
> +typedef struct timespec rtems_thread_cpu_usage_t;
>
> /**
> * @brief Data structure to manage and manipulate calendar
> diff --git a/cpukit/rtems/src/ratemongetstatistics.c b/cpukit/rtems/src/ratemongetstatistics.c
> index d106f04..6644562 100644
> --- a/cpukit/rtems/src/ratemongetstatistics.c
> +++ b/cpukit/rtems/src/ratemongetstatistics.c
> @@ -46,21 +46,12 @@ rtems_status_code rtems_rate_monotonic_get_statistics(
> src = &the_period->Statistics;
> dst->count = src->count;
> dst->missed_count = src->missed_count;
> - #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - _Timestamp_To_timespec( &src->min_cpu_time, &dst->min_cpu_time );
> - _Timestamp_To_timespec( &src->max_cpu_time, &dst->max_cpu_time );
> - _Timestamp_To_timespec( &src->total_cpu_time, &dst->total_cpu_time );
> - _Timestamp_To_timespec( &src->min_wall_time, &dst->min_wall_time );
> - _Timestamp_To_timespec( &src->max_wall_time, &dst->max_wall_time );
> - _Timestamp_To_timespec( &src->total_wall_time, &dst->total_wall_time );
> - #else
> - dst->min_cpu_time = src->min_cpu_time;
> - dst->max_cpu_time = src->max_cpu_time;
> - dst->total_cpu_time = src->total_cpu_time;
> - dst->min_wall_time = src->min_wall_time;
> - dst->max_wall_time = src->max_wall_time;
> - dst->total_wall_time = src->total_wall_time;
> - #endif
> + _Timestamp_To_timespec( &src->min_cpu_time, &dst->min_cpu_time );
> + _Timestamp_To_timespec( &src->max_cpu_time, &dst->max_cpu_time );
> + _Timestamp_To_timespec( &src->total_cpu_time, &dst->total_cpu_time );
> + _Timestamp_To_timespec( &src->min_wall_time, &dst->min_wall_time );
> + _Timestamp_To_timespec( &src->max_wall_time, &dst->max_wall_time );
> + _Timestamp_To_timespec( &src->total_wall_time, &dst->total_wall_time );
>
> _Objects_Put( &the_period->Object );
> return RTEMS_SUCCESSFUL;
> diff --git a/cpukit/rtems/src/ratemongetstatus.c b/cpukit/rtems/src/ratemongetstatus.c
> index 37d524d..b61e234 100644
> --- a/cpukit/rtems/src/ratemongetstatus.c
> +++ b/cpukit/rtems/src/ratemongetstatus.c
> @@ -24,10 +24,7 @@
> #include <rtems/score/isr.h>
> #include <rtems/rtems/ratemonimpl.h>
> #include <rtems/score/thread.h>
> -
> -#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - #include <rtems/score/timespec.h>
> -#endif
> +#include <rtems/score/timespec.h>
>
> rtems_status_code rtems_rate_monotonic_get_status(
> rtems_id id,
> @@ -54,14 +51,8 @@ rtems_status_code rtems_rate_monotonic_get_status(
> * If the period is inactive, there is no information.
> */
> if ( status->state == RATE_MONOTONIC_INACTIVE ) {
> - #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - _Timespec_Set_to_zero( &status->since_last_period );
> - _Timespec_Set_to_zero( &status->executed_since_last_period );
> - #else
> - status->since_last_period = 0;
> - status->executed_since_last_period = 0;
> - #endif
> -
> + _Timespec_Set_to_zero( &status->since_last_period );
> + _Timespec_Set_to_zero( &status->executed_since_last_period );
> } else {
>
> /*
> @@ -76,17 +67,12 @@ rtems_status_code rtems_rate_monotonic_get_status(
> return RTEMS_NOT_DEFINED;
> }
>
> - #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - _Timestamp_To_timespec(
> - &since_last_period, &status->since_last_period
> - );
> - _Timestamp_To_timespec(
> - &executed, &status->executed_since_last_period
> - );
> - #else
> - status->since_last_period = since_last_period;
> - status->executed_since_last_period = executed;
> - #endif
> + _Timestamp_To_timespec(
> + &since_last_period, &status->since_last_period
> + );
> + _Timestamp_To_timespec(
> + &executed, &status->executed_since_last_period
> + );
> }
>
> _Objects_Put( &the_period->Object );
> diff --git a/cpukit/rtems/src/ratemonperiod.c b/cpukit/rtems/src/ratemonperiod.c
> index ca278fb..6aefaba 100644
> --- a/cpukit/rtems/src/ratemonperiod.c
> +++ b/cpukit/rtems/src/ratemonperiod.c
> @@ -30,67 +30,50 @@ bool _Rate_monotonic_Get_status(
> Thread_CPU_usage_t *cpu_since_last_period
> )
> {
> - #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - Timestamp_Control uptime;
> - #endif
> - Thread_Control *owning_thread = the_period->owner;
> - Thread_CPU_usage_t used;
> + Timestamp_Control uptime;
> + Thread_Control *owning_thread = the_period->owner;
> + Thread_CPU_usage_t used;
>
> /*
> * Determine elapsed wall time since period initiated.
> */
> - #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - _TOD_Get_uptime( &uptime );
> - _Timestamp_Subtract(
> - &the_period->time_period_initiated, &uptime, wall_since_last_period
> - );
> - #else
> - *wall_since_last_period =
> - _Watchdog_Ticks_since_boot - the_period->time_period_initiated;
> - #endif
> + _TOD_Get_uptime( &uptime );
> + _Timestamp_Subtract(
> + &the_period->time_period_initiated, &uptime, wall_since_last_period
> + );
>
> /*
> * Determine cpu usage since period initiated.
> */
> used = owning_thread->cpu_time_used;
>
> - #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - if (owning_thread == _Thread_Executing) {
> + if (owning_thread == _Thread_Executing) {
>
> - Thread_CPU_usage_t ran;
> + Thread_CPU_usage_t ran;
>
> - /* How much time time since last context switch */
> - _Timestamp_Subtract(
> - &_Thread_Time_of_last_context_switch, &uptime, &ran
> - );
> + /* How much time time since last context switch */
> + _Timestamp_Subtract(
> + &_Thread_Time_of_last_context_switch, &uptime, &ran
> + );
>
> - /* cpu usage += ran */
> - _Timestamp_Add_to( &used, &ran );
> + /* cpu usage += ran */
> + _Timestamp_Add_to( &used, &ran );
>
> - /*
> - * The cpu usage info was reset while executing. Can't
> - * determine a status.
> - */
> - if (_Timestamp_Less_than(&used, &the_period->cpu_usage_period_initiated))
> - return false;
> + /*
> + * The cpu usage info was reset while executing. Can't
> + * determine a status.
> + */
> + if (_Timestamp_Less_than(&used, &the_period->cpu_usage_period_initiated))
> + return false;
>
> - /* used = current cpu usage - cpu usage at start of period */
> - _Timestamp_Subtract(
> - &the_period->cpu_usage_period_initiated,
> - &used,
> - cpu_since_last_period
> - );
> - }
> - #else
> - /*
> - * The cpu usage info was reset while executing. Can't
> - * determine a status.
> - */
> - if (used < the_period->cpu_usage_period_initiated)
> - return false;
> + /* used = current cpu usage - cpu usage at start of period */
> + _Timestamp_Subtract(
> + &the_period->cpu_usage_period_initiated,
> + &used,
> + cpu_since_last_period
> + );
> + }
>
> - *cpu_since_last_period = used - the_period->cpu_usage_period_initiated;
> - #endif
> return true;
> }
>
> diff --git a/cpukit/rtems/src/ratemonreportstatistics.c b/cpukit/rtems/src/ratemonreportstatistics.c
> index 0b1a320..856d431 100644
> --- a/cpukit/rtems/src/ratemonreportstatistics.c
> +++ b/cpukit/rtems/src/ratemonreportstatistics.c
> @@ -23,12 +23,10 @@
>
> #include <inttypes.h>
>
> -#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - /* We print to 1/10's of milliseconds */
> - #define NANOSECONDS_DIVIDER 1000
> - #define PERCENT_FMT "%04" PRId32
> - #define NANOSECONDS_FMT "%06" PRId32
> -#endif
> +/* We print to 1/10's of milliseconds */
> +#define NANOSECONDS_DIVIDER 1000
> +#define PERCENT_FMT "%04" PRId32
> +#define NANOSECONDS_FMT "%06" PRId32
>
> void rtems_rate_monotonic_report_statistics_with_plugin(
> void *context,
> @@ -45,10 +43,8 @@ void rtems_rate_monotonic_report_statistics_with_plugin(
> return;
>
> (*print)( context, "Period information by period\n" );
> - #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - (*print)( context, "--- CPU times are in seconds ---\n" );
> - (*print)( context, "--- Wall times are in seconds ---\n" );
> - #endif
> + (*print)( context, "--- CPU times are in seconds ---\n" );
> + (*print)( context, "--- Wall times are in seconds ---\n" );
> /*
> Layout by columns -- in memory of Hollerith :)
>
> @@ -62,25 +58,11 @@ ididididid NNNN ccccc mmmmmm X
> 1234567890123456789012345678901234567890123456789012345678901234567890123456789\
> \n");
> */
> - (*print)( context, " ID OWNER COUNT MISSED "
> - #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - " "
> - #endif
> - "CPU TIME "
> - #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - " "
> - #endif
> - " WALL TIME\n"
> - );
> - (*print)( context, " "
> - #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - " "
> - #endif
> - "MIN/MAX/AVG "
> - #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - " "
> - #endif
> - " MIN/MAX/AVG\n"
> + (*print)( context,
> + " ID OWNER COUNT MISSED "
> + " CPU TIME WALL TIME\n"
> + " "
> + " MIN/MAX/AVG MIN/MAX/AVG\n"
> );
>
> /*
> @@ -126,7 +108,6 @@ ididididid NNNN ccccc mmmmmm X
> * print CPU Usage part of statistics
> */
> {
> - #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> struct timespec cpu_average;
> struct timespec *min_cpu = &the_stats.min_cpu_time;
> struct timespec *max_cpu = &the_stats.max_cpu_time;
> @@ -144,25 +125,12 @@ ididididid NNNN ccccc mmmmmm X
> _Timespec_Get_seconds( &cpu_average ),
> _Timespec_Get_nanoseconds( &cpu_average ) / NANOSECONDS_DIVIDER
> );
> - #else
> - uint32_t ival_cpu, fval_cpu;
> -
> - ival_cpu = the_stats.total_cpu_time * 100 / the_stats.count;
> - fval_cpu = ival_cpu % 100;
> - ival_cpu /= 100;
> -
> - (*print)( context,
> - "%3" PRId32 "/%4" PRId32 "/%3" PRId32 ".%02" PRId32 " ",
> - the_stats.min_cpu_time, the_stats.max_cpu_time, ival_cpu, fval_cpu
> - );
> - #endif
> }
>
> /*
> * print wall time part of statistics
> */
> {
> - #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> struct timespec wall_average;
> struct timespec *min_wall = &the_stats.min_wall_time;
> struct timespec *max_wall = &the_stats.max_wall_time;
> @@ -180,17 +148,6 @@ ididididid NNNN ccccc mmmmmm X
> _Timespec_Get_seconds( &wall_average ),
> _Timespec_Get_nanoseconds( &wall_average ) / NANOSECONDS_DIVIDER
> );
> - #else
> - uint32_t ival_wall, fval_wall;
> -
> - ival_wall = the_stats.total_wall_time * 100 / the_stats.count;
> - fval_wall = ival_wall % 100;
> - ival_wall /= 100;
> - (*print)( context,
> - "%3" PRId32 "/%4" PRId32 "/%3" PRId32 ".%02" PRId32 "\n",
> - the_stats.min_wall_time, the_stats.max_wall_time, ival_wall, fval_wall
> - );
> - #endif
> }
> }
> }
> diff --git a/cpukit/score/include/rtems/score/thread.h b/cpukit/score/include/rtems/score/thread.h
> index 39fcb17..6f97c69 100644
> --- a/cpukit/score/include/rtems/score/thread.h
> +++ b/cpukit/score/include/rtems/score/thread.h
> @@ -83,13 +83,9 @@ extern "C" {
> * The user can define this at configure time and go back to ticks
> * resolution.
> */
> -#ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - #include <rtems/score/timestamp.h>
> +#include <rtems/score/timestamp.h>
>
> - typedef Timestamp_Control Thread_CPU_usage_t;
> -#else
> - typedef uint32_t Thread_CPU_usage_t;
> -#endif
> +typedef Timestamp_Control Thread_CPU_usage_t;
>
> /**
> * The following defines the "return type" of a thread.
> diff --git a/cpukit/score/src/schedulerdefaulttick.c b/cpukit/score/src/schedulerdefaulttick.c
> index db67ca1..19acd3b 100644
> --- a/cpukit/score/src/schedulerdefaulttick.c
> +++ b/cpukit/score/src/schedulerdefaulttick.c
> @@ -31,13 +31,6 @@ void _Scheduler_default_Tick(
> {
> (void) scheduler;
>
> - #ifdef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - /*
> - * Increment the number of ticks this thread has been executing
> - */
> - executing->cpu_time_used++;
> - #endif
> -
> /*
> * If the thread is not preemptible or is not ready, then
> * just return.
> diff --git a/cpukit/score/src/threaddispatch.c b/cpukit/score/src/threaddispatch.c
> index f20f427..cce3aff 100644
> --- a/cpukit/score/src/threaddispatch.c
> +++ b/cpukit/score/src/threaddispatch.c
> @@ -99,17 +99,10 @@ void _Thread_Do_dispatch( Per_CPU_Control *cpu_self, ISR_Level level )
> _ISR_Enable( level );
> #endif
>
> - #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - _Thread_Update_cpu_time_used(
> - executing,
> - &cpu_self->time_of_last_context_switch
> - );
> - #else
> - {
> - _TOD_Get_uptime( &cpu_self->time_of_last_context_switch );
> - heir->cpu_time_used++;
> - }
> - #endif
> + _Thread_Update_cpu_time_used(
> + executing,
> + &cpu_self->time_of_last_context_switch
> + );
>
> #if !defined(__DYNAMIC_REENT__)
> /*
> diff --git a/cpukit/score/src/threadinitialize.c b/cpukit/score/src/threadinitialize.c
> index 2133d74..d79791b 100644
> --- a/cpukit/score/src/threadinitialize.c
> +++ b/cpukit/score/src/threadinitialize.c
> @@ -216,11 +216,7 @@ bool _Thread_Initialize(
> /*
> * Initialize the CPU usage statistics
> */
> - #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - _Timestamp_Set_to_zero( &the_thread->cpu_time_used );
> - #else
> - the_thread->cpu_time_used = 0;
> - #endif
> + _Timestamp_Set_to_zero( &the_thread->cpu_time_used );
>
> /*
> * initialize thread's key vaule node chain
> diff --git a/testsuites/sptests/sp69/init.c b/testsuites/sptests/sp69/init.c
> index ecc3846..ac6f58c 100644
> --- a/testsuites/sptests/sp69/init.c
> +++ b/testsuites/sptests/sp69/init.c
> @@ -55,15 +55,10 @@ rtems_task Init(
> /* Check status values. */
> rtems_test_assert( period_status.owner == rtems_task_self() );
> rtems_test_assert( period_status.state == RATE_MONOTONIC_INACTIVE );
> - #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> - rtems_test_assert( period_status.since_last_period.tv_sec == 0 );
> - rtems_test_assert( period_status.since_last_period.tv_nsec == 0 );
> - rtems_test_assert( period_status.executed_since_last_period.tv_sec == 0 );
> - rtems_test_assert( period_status.executed_since_last_period.tv_nsec == 0 );
> - #else
> - rtems_test_assert( period_status.since_last_period == 0 );
> - rtems_test_assert( period_status.executed_since_last_period == 0 );
> - #endif
> + rtems_test_assert( period_status.since_last_period.tv_sec == 0 );
> + rtems_test_assert( period_status.since_last_period.tv_nsec == 0 );
> + rtems_test_assert( period_status.executed_since_last_period.tv_sec == 0 );
> + rtems_test_assert( period_status.executed_since_last_period.tv_nsec == 0 );
>
> /*
> * Check get_status error cases.
> @@ -113,40 +108,25 @@ rtems_task Init(
> directive_failed( status, "rate_monotonic_get_status" );
>
> /* Check status values. */
> - #ifndef __RTEMS_USE_TICKS_FOR_STATISTICS__
> /* Note: POSIX mandates struct timespec->tv_nsec to be a "long" */
> - printf(
> - "wall time should be ~600000000 is %ld\n",
> - period_status.since_last_period.tv_nsec
> - );
> - printf(
> - "cpu time should be ~100000000 is %ld\n",
> - period_status.executed_since_last_period.tv_nsec
> - );
> - rtems_test_assert( period_status.since_last_period.tv_sec == 0 );
> - rtems_test_assert( period_status.since_last_period.tv_nsec >= 600000000 );
> - rtems_test_assert( period_status.since_last_period.tv_nsec <= 610000000 );
> - rtems_test_assert( period_status.executed_since_last_period.tv_sec == 0 );
> - rtems_test_assert(
> - period_status.executed_since_last_period.tv_nsec >= 100000000
> - );
> - rtems_test_assert(
> - period_status.executed_since_last_period.tv_nsec <= 110000000
> - );
> - #else
> - printf(
> - "wall time should be ~60 is %" PRId32 "\n",
> - (int) period_status.since_last_period
> - );
> - printf(
> - "cpu time should be ~10 is %" PRId32 "\n",
> - (int) period_status.executed_since_last_period
> - );
> - rtems_test_assert( period_status.since_last_period >= 60 );
> - rtems_test_assert( period_status.since_last_period <= 61 );
> - rtems_test_assert( period_status.executed_since_last_period >= 10 );
> - rtems_test_assert( period_status.executed_since_last_period <= 12 );
> - #endif
> + printf(
> + "wall time should be ~600000000 is %ld\n",
> + period_status.since_last_period.tv_nsec
> + );
> + printf(
> + "cpu time should be ~100000000 is %ld\n",
> + period_status.executed_since_last_period.tv_nsec
> + );
> + rtems_test_assert( period_status.since_last_period.tv_sec == 0 );
> + rtems_test_assert( period_status.since_last_period.tv_nsec >= 600000000 );
> + rtems_test_assert( period_status.since_last_period.tv_nsec <= 610000000 );
> + rtems_test_assert( period_status.executed_since_last_period.tv_sec == 0 );
> + rtems_test_assert(
> + period_status.executed_since_last_period.tv_nsec >= 100000000
> + );
> + rtems_test_assert(
> + period_status.executed_since_last_period.tv_nsec <= 110000000
> + );
>
> /* ensure the missed periods are properly accounted for */
> puts( "rtems_rate_monotonic_cancel - OK" );
> --
> 1.7.1
>
--
Joel Sherrill, Ph.D. Director of Research & Development
joel.sherrill at OARcorp.com On-Line Applications Research
Ask me about RTEMS: a free RTOS Huntsville AL 35805
Support Available (256) 722-9985
More information about the devel
mailing list