代码之家  ›  专栏  ›  技术社区  ›  camh

在嵌入式Linux系统中查找延迟问题(暂停)

  •  9
  • camh  · 技术社区  · 14 年前

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

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

    一些细节:

    • libc(syslog函数):uClibc 0.9.30.1
    • 未配置交换空间[在编辑中添加]
    • 根文件系统在tmpfs上(从initramfs加载)[在编辑中添加]
    1 回复  |  直到 14 年前
        1
  •  2
  •   Tim Post Samir J M Araujo    14 年前

    问题是(如你所说)syslogd。当进程以RT优先级运行时,syslogd . 此外,syslogd不会锁定其堆,并且可以(并且将)由内核进行分页,特别是对于很少的“客户”。

    你可以尝试的是:

    • 启动另一个线程来管理优先级队列,让该线程与syslog对话。然后,日志记录将只是获取一个锁并将某些内容插入列表中。如果只有两个订户,您不应该花费大量时间来获取互斥。

    注意,如果您根本不使用swap,解决这个问题的最短路径可能是实现您自己的日志记录。