RTEMS System Tick Resolution
Verify the fidelity of RTEMS System Tick
A recent test of our systemTickTest tool inside GemUtils suggests something is wrong with RTEMS 5 tick rates. I recall this used to work good on RTEMS 4. Let's setup a test to confirm. There's a tick test inside gemUtils: https://gitlab.com/nsf-noirlab/gemini/rtsw/support/gemUtil/-/blob/master/systemTickTools/src/systemTickTools.c
Here's the current results with different systems:
RTEMS 5
Results for RTEMS 5.0
10.1.2.173> systemTickShow
EPICS Thread Quantum set to 0.010000 seconds
10.1.2.173> systemTickTest
EPICS Thread Quantum set to 0.010000 seconds
Elapsed time to sleep 1000 times @ 0.001000 secs = 10.000000 secs [expected 1.000000, diff=9000000 (us)]
Elapsed time to sleep 1000 times @ 0.001250 secs = 10.000000 secs [expected 1.250000, diff=8750000 (us)]
Elapsed time to sleep 1000 times @ 0.001500 secs = 10.000000 secs [expected 1.500000, diff=8500000 (us)]
Elapsed time to sleep 1000 times @ 0.002000 secs = 10.000000 secs [expected 2.000000, diff=8000000 (us)]
Elapsed time to sleep 1000 times @ 0.002500 secs = 9.998157 secs [expected 2.500000, diff=7498157 (us)]
Elapsed time to sleep 1000 times @ 0.005000 secs = 10.000000 secs [expected 5.000000, diff=5000000 (us)]
Elapsed time to sleep 1000 times @ 0.010000 secs = 20.000000 secs [expected 10.000000, diff=10000000 (us)]
Elapsed time to sleep 1000 times @ 0.020000 secs = 29.998187 secs [expected 20.000000, diff=9998186 (us)]
System Tick Test Finished
Linux
Results for EPICS7 on Linux
epics> systemTickTest
EPICS Thread Quantum set to 0.010000 seconds
Elapsed time to sleep 1000 times @ 0.001000 secs = 1.052781 secs [expected 1.000000, diff=52780 (us)]
Elapsed time to sleep 1000 times @ 0.001250 secs = 1.300799 secs [expected 1.250000, diff=50799 (us)]
Elapsed time to sleep 1000 times @ 0.001500 secs = 1.553593 secs [expected 1.500000, diff=53592 (us)]
Elapsed time to sleep 1000 times @ 0.002000 secs = 2.052805 secs [expected 2.000000, diff=52804 (us)]
Elapsed time to sleep 1000 times @ 0.002500 secs = 2.553810 secs [expected 2.500000, diff=53809 (us)]
Elapsed time to sleep 1000 times @ 0.005000 secs = 5.053057 secs [expected 5.000000, diff=53057 (us)]
Elapsed time to sleep 1000 times @ 0.010000 secs = 10.053626 secs [expected 10.000000, diff=53626 (us)]
Elapsed time to sleep 1000 times @ 0.020000 secs = 20.055338 secs [expected 20.000000, diff=55337 (us)]
System Tick Test Finished
Setup Test for RTEMS4 + EPICS3.15
- Confirm #define CONFIGURE_MICROSECONDS_PER_TICK 20000 (This is what we used for FastTrack) a. For RTEMS 4.x this is in the legacy path https://github.com/epics-base/epics-base/blob/3.15/src/libCom/RTEMS/rtems_config.c#L39
- (NO Changes to our epics-base GN3.15 branch: HEAD -> GN3.15, origin/GN3.15, gn315) <<< Commit af061215
- Process Test Results from https://gitlab.com/mrippa/rtticks
Setup Test for RTEMS5 + EPICS7
- Use the latest commits from the ADE2 release
- Change #define CONFIGURE_MICROSECONDS_PER_TICK 1000 <<<We want 1 ms per tick here
- Process Test Results from https://gitlab.com/mrippa/rtticks
Edited by Matt Rippa