libbsd select timeout issue

RUI Zhengxin ruizx at
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.

Best regards.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the users mailing list