18922761a6
Signed-off-by: Dean Troyer <dtroyer@gmail.com>
117 lines
3.3 KiB
C++
117 lines
3.3 KiB
C++
/*
|
|
* Copyright (c) 2015-2017 Wind River Systems, Inc.
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*
|
|
*/
|
|
|
|
/**
|
|
* @file
|
|
* Wind River Titanium Cloud Maintenance Time Utility Header
|
|
*/
|
|
|
|
#include "timeUtil.h"
|
|
|
|
typedef struct
|
|
{
|
|
bool init ;
|
|
|
|
time_debug_type last_time ;
|
|
time_debug_type this_time ;
|
|
time_delta_type diff_time ;
|
|
|
|
unsigned long under_50_msec ;
|
|
unsigned long under_500_msec;
|
|
unsigned long under_1_sec ;
|
|
unsigned long under_2_sec ;
|
|
unsigned long under_3_sec ;
|
|
unsigned long under_5_sec ;
|
|
unsigned long over_5_sec ;
|
|
|
|
unsigned long counter ;
|
|
} timeUtil_type ;
|
|
|
|
static timeUtil_type time_struct ;
|
|
|
|
void timeUtil_sched_init ( void )
|
|
{
|
|
gettime ( time_struct.last_time );
|
|
time_struct.under_50_msec = 0 ;
|
|
time_struct.under_500_msec = 0 ;
|
|
time_struct.under_1_sec = 0 ;
|
|
time_struct.under_2_sec = 0 ;
|
|
time_struct.under_3_sec = 0 ;
|
|
time_struct.under_5_sec = 0 ;
|
|
time_struct.over_5_sec = 0 ;
|
|
time_struct.counter = 0 ;
|
|
time_struct.init = true ;
|
|
}
|
|
|
|
void scheduling_histogram ( void )
|
|
{
|
|
ilog ("Under: 50ms: %ld - 500ms:%ld - 1s:%ld - 2s:%ld - 3s:%ld - 5s:%ld ---- over:%ld\n",
|
|
time_struct.under_50_msec,
|
|
time_struct.under_500_msec,
|
|
time_struct.under_1_sec,
|
|
time_struct.under_2_sec,
|
|
time_struct.under_3_sec,
|
|
time_struct.under_5_sec,
|
|
time_struct.over_5_sec);
|
|
}
|
|
|
|
void timeUtil_sched_sample ( void )
|
|
{
|
|
if ( time_struct.init == false )
|
|
{
|
|
elog ("Time struct not initialized\n");
|
|
return ;
|
|
}
|
|
gettime ( time_struct.this_time );
|
|
timedelta ( time_struct.last_time, time_struct.this_time, time_struct.diff_time );
|
|
|
|
if ( time_struct.diff_time.secs == 0 )
|
|
{
|
|
if ( time_struct.diff_time.msecs < 50000 ) time_struct.under_50_msec++ ;
|
|
else if ( time_struct.diff_time.msecs < 500000 ) time_struct.under_500_msec++ ;
|
|
else time_struct.under_1_sec++ ;
|
|
}
|
|
else
|
|
{
|
|
if ( time_struct.diff_time.secs < 2 )
|
|
{
|
|
time_struct.under_2_sec++ ;
|
|
}
|
|
else if ( time_struct.diff_time.secs < 3 )
|
|
{
|
|
wlog (">>> Minor Scheduling delay: %ld.%3ld secs\n",
|
|
time_struct.diff_time.secs,
|
|
time_struct.diff_time.msecs );
|
|
time_struct.under_3_sec++ ;
|
|
}
|
|
else if ( time_struct.diff_time.secs < 5 )
|
|
{
|
|
wlog (">>> Major Scheduling delay: %ld.%3ld secs\n",
|
|
time_struct.diff_time.secs,
|
|
time_struct.diff_time.msecs );
|
|
time_struct.under_5_sec++ ;
|
|
scheduling_histogram ( );
|
|
}
|
|
else
|
|
{
|
|
wlog (">>> Critical Scheduling delay: %ld.%3ld secs\n",
|
|
time_struct.diff_time.secs,
|
|
time_struct.diff_time.msecs );
|
|
time_struct.over_5_sec++ ;
|
|
scheduling_histogram ( );
|
|
}
|
|
}
|
|
time_struct.last_time.ts.tv_sec = time_struct.this_time.ts.tv_sec ;
|
|
time_struct.last_time.ts.tv_nsec = time_struct.this_time.ts.tv_nsec ;
|
|
|
|
if ( ++time_struct.counter >= 1000 )
|
|
{
|
|
scheduling_histogram ( );
|
|
time_struct.counter = 0 ;
|
|
}
|
|
}
|