微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在embedded式Linux系统中查找延迟问题暂停

我有一个在Atmel AT91SAM9260EK板上运行的embedded式Linux系统,在这个板上我有两个进程以实时优先级运行。 经理进程使用POSIX消息队列定期“ping”一个工作进程来检查工作进程的健康状况。 通常往返ping需要大约1ms,但是偶尔需要更长的时间 – 大约800ms 。 没有其他进程以更高的优先级运行。

看来这个失速可能与日志(syslog)有关。 如果我停止logging,问题似乎消失了。 但是,如果日志文件位于jffs2或NFS上,则没有区别。 没有其他进程正在写入“磁盘” – 只是系统日志。

我可以使用哪些工具来帮助我追踪为什么这些摊位正在发生? 我知道latencytop和将使用。 还有其他一些可能更有用的工具吗?

一些细节:

延迟输出在Linux上的c + +

可靠的方式来延迟python3代码

Linux上的超低延迟编程从哪里开始?

Windows Workflow Foundation 4(WF4)延迟

multithreading的Windows服务 – Erlang

内核版本:2.6.32.8

libc(syslog函数):uClibc 0.9.30.1

系统日志:busyBox 1.15.2

没有configuration交换空间[在编辑中添加]

文件系统在tmpfs(从initramfs加载)[在编辑中添加]

Oracle 11.2在随机时间对简单的sql有2秒的延迟

Linux上的Java BlockingQueue延迟较高

在windows vista上发出任何rails命令时延迟

为什么在Nginx的access.log中,request_time比upstream_response_time大得多?

Linux多播sendto()性能随本地监听器而降低

问题是(如你所说)syslogd。 当您的进程以RT优先级运行时,syslogd 不是 。 另外,syslogd并不会锁定堆,而且可以(也将会)被内核调出,特别是对于很少的“客户”。

你可以尝试的是:

启动另一个线程来管理优先级队列,让该线程与syslog进行通信。 日志将只是获得一个锁,并插入到列表中。 只有两个用户,你不应该花太多的时间来获得互斥体。

不使用系统日志,实现自己的日志记录(基本上是第一个建议,减去与系统日志交谈)。

我有一个类似的问题,我第一次尝试修复它是修改syslogd本身来锁定它的堆。 那真是一场灾难。 然后我尝试rsyslogd,这改善了一些,但我仍然有随机延迟峰值。 我最终只是使用优先级队列来实现我自己的日志记录,以帮助确保首先实际写入更重要的消息。

请注意,如果您不使用交换(完全),解决这个问题的最短路径可能是实现您自己的日志记录。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐