gpt4 book ai didi

linux - 查找嵌入式 Linux 系统中的延迟问题(停顿)

转载 作者:IT王子 更新时间:2023-10-29 00:14:57 24 4
gpt4 key购买 nike

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

看来停顿可能与日志记录 (syslog) 有关。如果我停止记录问题似乎就会消失。但是,如果日志文件位于 JFFS2 或 NFS 上,则没有区别。没有其他进程正在写入“磁盘”——只有系统日志。

我可以使用哪些工具来帮助我找出这些停顿发生的原因?我知道 latencytop 并将使用它。还有其他一些可能更有用的工具吗?

一些细节:

  • 内核版本:2.6.32.8
  • libc(系统日志功能):uClibc 0.9.30.1
  • 系统日志:busybox 1.15.2
  • 没有配置交换空间[在编辑中添加]
  • 根文件系统在 tmpfs 上(从 initramfs 加载)[在编辑中添加]

最佳答案

问题是(如您所说)syslogd。当您的进程以 RT 优先级运行时,syslogd 不是。此外,syslogd 不会锁定其堆,并且可以(并且将会)由内核调出页面,尤其是在“客户”很少的情况下。

您可以尝试的是:

  • 启动另一个线程来管理优先级队列,让该线程与系统日志对话。日志记录将只是获取一个锁并向列表中插入一些东西。如果只有两个订阅者,您不应该花很多时间来获取互斥量。

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

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

请注意,如果您(根本)没有使用交换,解决此问题的最短路径可能是实现您自己的日志记录。

关于linux - 查找嵌入式 Linux 系统中的延迟问题(停顿),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2711426/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com