libbsd select timeout issue
RUI Zhengxin
ruizx at 126.com
Tue Nov 3 02:26:39 UTC 2020
Hello everyone,
We meet an issue of select function timeout drift in rtems-libbsd5.1.
The select timeout can drift 1ms every 14000 seconds.
Kernel put the select thread to sleep queue in sleepq_set_timeout_sbt,
the expire value is calculated by this
expire = (sbt - SBT_1S + sbt_per_tick - 1) / sbt_per_tick;
sbt is the absolute time,
Precision is a constant value, no time drift.
but the sbt_per_tick is not an accurate value,
It can make the expire vaule bigger and bigger while sbt is increasing.
in rtems_bsd_initialize function,
rtems_bsd_sbt_per_watchdog_tick = SBT_1S / tps;
in our system the tick rate is set to 1000Hz,
The real value of rtems_bsd_sbt_per_watchdog_tick is 1<<32/1000=4294967.296
but in integer type the value is 4294967.
The error is 0.296/4294967 = 0.069ppm,
and it can increase the expire value 1ms every 14000 seconds.
Zhengxin
Best regards.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/users/attachments/20201103/21711940/attachment.html>
More information about the users
mailing list