我有一个运行在中等速度 ARMv7 处理器上的 2.6.35 PREEMPT 内核。大约每 100 - 125 秒一次,某些事情会导致内核无法足够快地处理某些与音频相关的驱动程序以避免欠载。滞留时间通常在 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 …
我正在尝试配置 firewalld(Fedora 21),以便响应从使用临时 UDP 源端口的客户端应用程序发送到多播目标的 MDNS 查询。响应是单播的。序列是这样的(使用wireshark捕获)
启用了添加端口 5353 UDP 的 firewalld mdns 服务,但这对响应没有帮助。
任何指针将不胜感激。