1

我要求尽可能精确地保持 10 毫秒的间隔。

我使用 clock_nanosleep 和绝对时间唤醒点(每次唤醒后增加 10 毫秒)和 CLOCK_MONOTONIC 显然。

在我的桌面上,唤醒后调用的 Ubuntu 11.04 clock_gettime 显示我的程序平均晚了 1 毫秒。

现在使用 Linux 调度程序模式:

  • SCHED_IDLE,程序平均晚唤醒 2ms
  • SCHED_RR,程序唤醒平均晚 0.9 毫秒...

无论系统是空闲还是运行几个副本,结果都是相同的: dd if=/dev/zero of=/dev/null 用于 aritifical cpu 负载。

我的调度程序参数(sched 最小粒度、唤醒粒度、sched 延迟)被减少到尽可能少,但没有任何区别。

我还没有在任何其他桌面上尝试过,不确定是否可以使用带有股票 Ubuntu 和 Intel core i5 的 clock_nanosleep 获得预期的精度,或者我的系统有问题。

PS。归根结底,当使用非阻塞调用将数据传送到音频设备时,这种 clock_nanosleep 行为会导致音频播放期间的延迟增加(欠载),中继阻塞调用可以解决问题,就像使用时没有调度问题一样并在阻止呼叫后醒来。

4

0 回答 0