Compare All Three Timers Drift - Busy Sleep and OS Sleep (Compact 2013)
3/26/2014
The Compare All Three Timers Drift - Busy Sleep and OS Sleep tests check for drift, timing irregularities and other timer problems on the three clocks (GetTickCount, High-Performance, and Real-Time Clock) by comparing them with each other. These tests periodically take data samples from the clocks. The system is kept in different states in the time period between samples, allowing identification of drift introduced by specific functions.
A good way to use these Three Timer Drift tests is to run them to confirm the clocks do not drift relative to each other, and to run at least one of the individual drift tests to confirm that the clock does not drift relative to outside sources. To measure drift on individual clocks, use the Wall Clock Timer tests. These allow one to compare a given clock against a stop watch or any other external clock source. Ideally, one would compare the RTC, since this clock is not expected to drift with respect to an outside clock.
The RTC and GTC also have an automated drift test that compares them to an NTP server. If you have access to an NTP server, you can take advantage of this test; see RTC and GTC to NTP Drift Test.
If there is a known drift between any two clocks on the platform which is by design, the test can be given drift bounds so that it passes when the drift is within the specified bounds.
Each subtest runs by default for 3 hours.
Test Prerequisites
The following table shows the software requirements for the test.
Requirements |
Description |
---|---|
GetTickCount Clock |
The clock that corresponds to the GetTickCount function |
High-Performance Counter |
The clock that corresponds to the QueryPerformanceCounter function |
Real-Time Clock (RTC) |
The clock that corresponds to the GetSystemTime function |
The following table shows the software requirements for the test.
Requirements |
Description |
---|---|
Tux.exe |
Tux test harness |
Kato.dll |
Kato logging engine |
OalTestTimers.dll |
Library containing the timer tests |
Subtests
The table below lists the subtests included in this test.
SubTest ID |
Description |
---|---|
3010 |
Compare All Three - Busy Sleep Confirms that the clocks do not drift relative to each other. The test periodically takes data samples from each of the three clocks and these samples are compared to each other for drift. The default time between the samples is 2 minutes. This test remains in a busy while loop that mimics sleep for the whole 2 minutes. This keeps the processor busy throughout the test and OEMIdle is never called. |
3020 |
Compare All Three - OS Sleep Confirms that the clocks do not drift relative to each other. The test periodically takes data samples from each of the three clocks and these samples are compared to each other for drift. The default time between the samples is 2 minutes. This test calls the standard Sleep function available in the OS to sleep for the whole 2 minutes. The OS is expected to call OEMIdle during this test and OEMIdle will sleep for the maximum possible time. |
Setting Up the Test
This test has no additional requirements.
Running the Test
The Compare All Three Timers Drift Test - Busy Sleep and OS Sleep Test performs the following on default execution: tux.exe -o -d oaltesttimers.dll -x 3010,3020 -c "-cmdf OALStandardDriftTestCmdLines.txt"
You can modify the test by editing the command line for the test. To specify one or more of the following optional command line parameters for this test, use the -c command line parameter, which causes Tux to pass the specified string into the test module.
The following table shows the optional command line parameters for the test.
Command line parameter |
Description |
---|---|
-driftRunTime <time> |
Specifies the run time for the test. The default run time for each test is 3 hours. The value time is considered to be in seconds unless the time modifiers listed below are used. |
-driftSampleSize <time> |
Specifies the time between samples. The default is 2 minutes between samples. The value time is considered to be in seconds unless the time modifiers listed below are used. |
-testname <bound numF numS> |
Specifies the drift bounds when comparing the three different clocks for drift. '-testName' is one of -busySleep or -osSleep. 'bound' is one of GtcToRtc, GtcToHiPerf, HiPerfToRtc. 'numF' and 'numS' give the 'faster' and 'slower' bounds for the given comparison, respectively. The 'numF' and 'numS' are multiplied with the expected values to define the pass/fail range for the test. The default bounds for all tests are zero. |
-cmdf <filename> |
Read <filename> for bounds information. See OALStandardDriftTestCmdLines.txt for an example. |
* s means seconds (12s = 12 seconds)
* m means minutes (12m = 12 minutes)
* h means hours (12h = 12 hours)
* d means days (12d = 12 days)
For example, the default run time for each sub-test is 3 hours and the samples are taken every 2 minutes. These can be changed using -c "-driftRunTime time1 -driftSampleSize time2", where time1 is the run time for the test and time2 is the time between samples, respectively.
Note
If a tested clock does not run accurately, the duration of a test case may differ from expected.
Verifying the Test
When the test completes running, verify that "PASS" appears in the test log for all sub-tests.
Troubleshooting the Test
Determine the point of failure and record the exact error message. Check that the setup steps were followed and that all pre-requisites were met. If the source code is available, examine the point of failure in code to see if any additional information can be gathered about the failure domain.