Messages in this thread | | | Date | Wed, 22 Jun 2016 12:28:59 +0200 | From | Cyril Hrubis <> | Subject | Re: [LTP] [patch V2 00/20] timer: Refactor the timer wheel |
| |
Hi! > > rtbox:~ # /usr/local/ltp/conformance/interfaces/sigtimedwait/sigtimedwait_1-1.run-test > > Test FAILED: sigtimedwait() did not return in the required time > > time_elapsed: 1.197057 > > ...come on, you can do it... > > rtbox:~ # /usr/local/ltp/conformance/interfaces/sigtimedwait/sigtimedwait_1-1.run-test > > Test PASSED > > > > #define ERRORMARGIN 0.1 > > ... > > if ((time_elapsed > SIGTIMEDWAITSEC + ERRORMARGIN) > > || (time_elapsed < SIGTIMEDWAITSEC - ERRORMARGIN)) { > > printf("Test FAILED: sigtimedwait() did not return in " > > "the required time\n"); > > printf("time_elapsed: %lf\n", time_elapsed); > > return PTS_FAIL; > > } > > > > Looks hohum to me, but gripe did arrive with patch set, so you get a note. > > hohum is a euphemism. That's completely bogus. > > The only guarantee a syscall with timers has is: timer does not fire early.
While this is true, checking with reasonable error margin works just fine 99% of the time. You cannot really test that timer expires, without setting arbitrary margin.
Looking into POSIX sigtimedwait() timer should run on CLOCK_MONOTONIC so we can call clock_getres(CLOCK_MONOTOINC, ...) double or tripple the value and use it for error margin. And also fix the test to use the CLOCK_MONOTONIC timer.
And of course the error margin must not be used when we check that the elapsed time wasn't shorter than we expected.
Does that sound reasonable?
-- Cyril Hrubis chrubis@suse.cz
| |