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.
_______________________________________________
users mailing list
users@rtems.org
http://lists.rtems.org/mailman/listinfo/users