我有一个在中速ARMv7处理器上运行的2.6.35 PREEMPT内核。大约每100-125s发生一次,某些原因导致内核无法足够快地处理某些与音频相关的驱动程序,从而避免欠载。保持时间通常在15到30毫秒之间,但可能会更长。目前尚不清楚保留是完全在内核中还是可能与以实时优先级运行的用户进程的调度有关(SCHED_RR,2)。
我的猜测是,有(至少一个)驱动程序在抢先状态下表现不佳。
尽管我不确定如何解释各种时间报告,但用户进程中的一些strace输出说明了正常和异常行为的某些方面。
正常情况:
0.000518 poll([{fd = 10,events = POLLIN | POLLERR | POLLNVAL,revents = POLLIN}],1,3415)= 1 0.010202 poll([{fd = 10,events = POLLIN | POLLERR | POLLNVAL},{fd = 6,events = POLLOUT | POLLERR | POLLNVAL,revents = POLLOUT}],2,3404)= 1 0.000585 poll([{fd = 10,events = POLLIN | POLLERR | POLLNVAL},{fd = 6,events = POLLOUT | POLLERR | POLLNVAL,revents = POLLOUT}],2,3404)= 1 0.000302 poll([{fd = 10,events = POLLIN | POLLERR | POLLNVAL,revents = POLLIN}],1,3404)= 1 0.010706 poll([{fd = 10,events = POLLIN | POLLERR | POLLNVAL},{fd = 6,events = POLLOUT | POLLERR | POLLNVAL,revents = POLLOUT}],2,3393)= 1 0.000480 poll([{fd = 10,events = POLLIN | POLLERR | POLLNVAL},{fd = 6,events = POLLOUT | POLLERR | POLLNVAL,revents = POLLOUT}],2,3392)= 1
对于fd6的输出,轮询不会发生阻塞,并且仅对fd10的输入进行轮询时,才会发生大约10ms的阻塞。这既反映在系统调用的持续时间报告中,又反映在系统调用之间的间隔中(它们是一致的)。
失败案例(极端示例):
0.000305 poll([{fd = 10,events = POLLIN | POLLERR | POLLNVAL,revents = POLLIN}],1,3543)= 1 0.010730 poll([{fd = 10,events = POLLIN | POLLERR | POLLNVAL},{fd = 6,events = POLLOUT | POLLERR | POLLNVAL,revents = POLLOUT}],2,3533)= 1 0.000475 poll([{fd = 10,events = POLLIN | POLLERR | POLLNVAL},{fd = 6,events = POLLOUT | POLLERR | POLLNVAL,revents = POLLOUT}],2,3532)= 1 0.000329 poll([{fd = 10,events = POLLIN | POLLERR | POLLNVAL,revents = POLLIN}],1,3532)= 1 0.953349 poll([{fd = 10,events = POLLIN | POLLERR | POLLNVAL},{fd = 6,events = POLLOUT | POLLERR | POLLNVAL,revents = POLLOUT | POLLERR}],2,2578)= 1
请注意,在这种情况下,即使倒数第二次通话被记录为花费10毫秒(正常),也要比最后一次通话早953毫秒。
我可以使用哪些工具来追查罪魁祸首?
2
有趣的问题加分。我不确定该如何回答,但确实有一个问题,该如何追溯到CPU使用率(例如,与iowait的峰值相反)?
—
Bratchley
首先要猜测的是,如果您正在大型NAND闪存上运行JFFS2或YAFFS,尤其是在录制时。禁用任何写入闪存的内容,看看是否有帮助。您的过程表是什么样的?如果您具有构建内核的工具链,则可以将ftrace作为最后的选择。
—
乔纳森·本·阿夫拉罕
sar -bu可以做到。.linux.die.net
—
man/1/
使用了一些闪光灯;带有已安装的ext4文件系统的SD卡。并且写信确实是这些问题的可能根源(但是为什么呢?),但可能不是唯一的。
—
2013年