for_developers:timing_measurement
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
for_developers:timing_measurement [2016/08/17 11:10] – [How the timer works] gehrig | for_developers:timing_measurement [2018/04/18 22:05] (current) – removed graf | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Using built in timer for measuring real time performance ====== | ||
- | |||
- | ===== How the timer works ===== | ||
- | The timer function is included in the Executer object. It registers the system time each time the executor executes its list of tasks (// | ||
- | * run time: counter.tock() - counter.tick() | ||
- | * period: counter.tick()[t=n] - counter.tick()[t=n-1] | ||
- | * jitter: |actual period - set period| | ||
- | Of these three measurements the minimal value, maximal value, mean value and the variance are calculated. | ||
- | |||
- | ===== Influence of the measurement on the real time performance of the system ===== | ||
- | Don't use // | ||
- | Don't use multiple lines (// | ||
- | |||
- | ===== Accuracy of the measurement ===== | ||
- | This measurement provides only statistical data over 1000 (or 100) cycles at a time and not for each iteration. To measure jitter for each iteration use the [[: | ||
- | |||
- | It is possible to measure a 15% CPU load and over 300us run time per 1ms period. This indicates, that the run time measurement is not accurate. | ||
- | |||
- | ===== Implementation ===== | ||
- | To integrate the measurement, | ||
- | <code cpp> | ||
- | using namespace eeros:: | ||
- | |||
- | |||
- | |||
- | eeros:: | ||
- | |||
- | td.monitors.push_back([& | ||
- | static int ticks = 0; // mseconds | ||
- | |||
- | if (++ticks < 1000) return; | ||
- | ticks = 0; | ||
- | |||
- | // timing measurement (tictoc) | ||
- | eeros:: | ||
- | c.reset(); | ||
- | std::cout << "CS: period max: " << setw(7) | ||
- | << " | ||
- | << std::endl; | ||
- | }); | ||
- | |||
- | eeros:: | ||
- | </ | ||
- | |||
- | |||
- | ==== Explanation of the implementation ==== | ||
- | If the executor has a small cycle time (less than 1 second) it is not advisable to update the log output each time. In the implementation of the code example the output is only updated after 1000 cycles. Depending on the cycle time, this number can be adjusted in line 3. | ||
- | |||
- | Line 7 defines which date should be written to the terminal output. Following options are available for //run// time and //period// time: | ||
- | * min | ||
- | * max | ||
- | * mean | ||
- | * variance | ||
- | The time is measured in nanoseconds. | ||
- | |||
- | |||
- | ===== Save terminal output on a host computer via SSH ===== | ||
- | Because of memory restriction or because writing a file would affect the real time behavior of the system it is maybe not possible to save the output of the terminal directly on the target system. The output can be saved on a different computer with following command: | ||
- | < | ||
- | With this command it is possible to measure for multiple hours or even multiple days. | ||
- | |||