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

2023-12-29

我有一个在 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 会not。此外,syslogd 不会锁定其堆,并且可以(并且将会)被内核调出页面,尤其是在“客户”很少的情况下。

你可以尝试的是:

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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

查找嵌入式 Linux 系统中的延迟问题(停顿) 的相关文章

  • 如何确保 numpy BLAS 库可用作动态加载库?

    The theano安装文档 http www deeplearning net software theano install html troubleshooting make sure you have a blas library指
  • CentOS目录结构是树形的吗?

    CentOS 上有相当于树的东西吗 如果你的 Centos 系统上没有安装 tree 无论如何我通常建议服务器设置使用最小安装磁盘 你应该在命令行中输入以下内容 yum install tree y 如果没有安装 那是因为您没有正确的存储库
  • Linux 上的 Python 3.6 tkinter 窗口图标错误

    我正在从 Python GUI 编程手册 学习 Python GUI 某项任务要求我通过将以下代码添加到我的配方中来更改窗口图标 Change the main windows icon win iconbitmap r C Python3
  • 为 Linux 安装 R 包时出错

    我试图在 R 3 3 上安装一个名为 rgeos 的包 但是当我输入 install packages rgeos 但它返回给我以下错误 其他包也会发生同样的情况 但不是所有包 gt installing source package rg
  • 如何查明 Ubuntu 上安装了哪个版本的 GTK+?

    我需要确定 Ubuntu 上安装了哪个版本的 GTK 男人似乎不帮忙 这个建议 https stackoverflow com a 126145 会告诉您安装了哪个 2 0 的次要版本 不同的主要版本将具有不同的包名称 因为它们可以在系统上
  • MISRA C++(规则 18-4-1)和动态内存分配 - 是否允许 std::string?

    MISRA C 规则 18 4 1 说 不得使用动态堆内存分配 See http dist sonarsource com reports coverage misra c 2008 html http dist sonarsource c
  • 如何获取 linux 实用程序 tail 的源代码?

    这个命令确实非常有用 但是我可以在哪里获取源代码以查看内部发生的情况 thanks tail 实用程序是 Linux 上 coreutils 的一部分 源压缩包 ftp ftp gnu org gnu coreutils coreutils
  • 如何使用AWK脚本检查表的所有列数据类型? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 在这里 我正在检查表中第一列的数据类型 但我想知道AWK中表的所有列数据类型 我尝试过 但只能获得一列数据类型 例如 Column 1
  • 如何让 clangd 转向 c++20

    当没有其他信息时 如何让 clangd 回退到 c 20 例如 在第一次构建之前 cmake 可以生成一个 这是在带有最新 LLVM 的 Arch Linux 上 这是通过 Emacs LSP 运行的 但这应该没有什么区别 你可以加 Com
  • gentoo crontab:为什么这个简单的 crontab 不起作用?

    我使用 GENTOO 发行版 crontab e 35 12 root php5 home www cron php 当我手动运行时 php5 php5 home www cron php 这有效 它向我发送了一封电子邮件 然后我检查日期
  • git在Windows和Linux之间切换后强制刷新索引

    我有一个Windows和Linux共享的磁盘分区 格式 NTFS 它包含一个 git 存储库 约 6 7 GB 如果我只使用Windows or 只使用Linux操作 git 存储库一切正常 但是每次切换系统的时候git status命令将
  • 在 LINUX 上使用 Python 连接到 OLAP 多维数据集

    我知道如何在 Windows 上使用 Python 连接到 MS OLAP 多维数据集 嗯 至少有一种方法 通常我使用 win32py 包并调用 COM 对象进行连接 import win32com client connection wi
  • 标准头文件中的 C 编译器错误 - 未定义的 C++ 定义

    我正在尝试编译 C 程序 但收到许多错误 这些错误是在标准 C 头文件 inttypes h stdio h stat h 等 中遇到的 错误的来源是以下未定义的常量 BEGIN DECLS END DECLS BEGIN NAMESPAC
  • 在Linux中断上下文中运行用户线程

    我正在编写一些定制的应用程序 并允许更改 Linux 内核中的中断处理程序代码 我有一个用户线程正在等待中断发生 如果发生中断 那么我要做的第一件事就是执行该用户线程 有什么办法让它发挥作用吗 Thanks 创建一个字符设备 这就是内核所做
  • 如何以编程方式从Linux中的进程名称获取进程ID

    在我的项目中 我们使用 ACE 自适应通信环境 中间件来编写可在 Windows 和 Linux 上运行的独立于操作系统的代码 要求是从进程名称中获取进程 ID 由于 ACE 不支持这一点 因此我们必须使用特定于平台的宏来分离 Window
  • 适用于 KDE 和 Gnome 的 Gui [重复]

    这个问题在这里已经有答案了 我想为一个现在是 CLI 的应用程序编写一个 gui 它需要在 KDE 和 Gnome DE 中 看起来不错 充分利用用户的外观设置 如果我选择 Qt 或 GTK 我能够做到这一点吗 它们与两个 DE 集成良好吗
  • C 程序从连接到系统的 USB 设备读取数据

    我正在尝试从连接到系统 USB 端口的 USB 设备 例如随身碟 获取数据 在这里 我可以打开设备文件并读取一些随机原始数据 但我想获取像 minicom teraterm 这样的数据 请让我知道我可以使用哪些方法和库来成功完成此操作以及如
  • Docker:处理 tar 文件时出错(退出状态 1):设置枢轴目录时出错:不是目录

    我是 Docker 新手 不知道是什么原因导致此错误或如何诊断它 任何有关此问题的具体帮助或有关首先检查何处以诊断此类问题的提示将不胜感激 我的 Dockerfile FROM java 8 Install maven RUN apt ge
  • 如何制作和应用SVN补丁?

    我想制作一个SVN类型的补丁文件httpd conf这样我就可以轻松地将其应用到其他主机上 If I do cd root diff Naur etc httpd conf httpd conf original etc httpd con
  • QFileDialog::getSaveFileName 和默认的 selectedFilter

    我有 getSaveFileName 和一些过滤器 我希望当用户打开 保存 对话框时选择其中之一 Qt 文档说明如下 可以通过将 selectedFilter 设置为所需的值来选择默认过滤器 我尝试以下变体 QString selFilte

随机推荐

  • 将 mylyn Gitlab 连接器连接到 Eclipse 时出错

    我正在尝试为 Eclipse Oxygen v4 7 1a 配置 Mylyn Gitlab 连接器 但是当我尝试添加新任务时 它会抛出异常 并且不允许我继续创建新任务 正确输入我的数据和 gitlab 存储库的 url 地址 甚至使用多个
  • 使用sql查询总结时间列

    我有一张表如下 repID ClockIn ClockOut TotalHours 109145 7 50 50 AM 3 37 16 PM 7 46 26 109145 7 52 41 AM 3 44 51 PM 7 52 10 1091
  • C# 禁用 USB ReadPipe 的垃圾收集

    我正在尝试使用 FTDI 的 D3XX NET 从 USB 端口收集数据 收集数据 然后发送到快速傅立叶变换以绘制频谱 即使您丢失了一些数据 这也可以正常工作 你说不出来 但是 如果您随后想要将此数据发送到音频输出组件 您会发现数据丢失 这
  • 如何根据传入远程通知负载中定义的类别添加不同的操作?斯威夫特更新

    我正在我的两个相关应用程序中实现推送通知 到目前为止我能够发送通知 设备到设备以及主题 收到通知后 通知会显示随有效负载发送的 url 处的图像 我的目标是向主题通知添加操作 并且每个主题的操作都不同 Ej 行动为 shop promoti
  • 在 C# 中添加十六进制值

    在我的系统中 我需要添加 2 个十六进制值 那么 如何在 C 中添加十六进制值 我还想知道十六进制值的最大长度以及哪个实例保存这些值 C 支持十六进制文字 http msdn microsoft com en us library aa66
  • Haskell 中的惰性笛卡尔积

    我想在 Haskell 中生成一个相当大但有限的笛卡尔积 然后我需要对其进行迭代 想想平均场模型的配分函数 自然而然的事情使用sequence 像这样 l sequence replicate n 0 1 2 不幸的是 对于大n 这不适合内
  • 如何创建 android:pathData?

    所以我需要在我的应用程序中使用路径数据 有没有办法将已有的图像转换为路径数据 或者唯一的方法是使用 Photoshop 等实际计算所有像素 矢量图像android中的PathData是矢量图形程序的脚本 它并不是完全干净且人类可读的代码作为
  • 无法创建 yeoman web 应用程序

    当我尝试创建一个网络应用程序时 我得到了这个yeoman usr local lib node modules yo node modules insight node modules configstore configstore js
  • 为什么这段C代码可以编译?

    include
  • 在 Logback 中创建自定义布局

    我正在尝试在 logback 中创建自定义布局 如示例中所示手册第 6 章 http logback qos ch xref chapters layouts MySampleLayout html package com dces uti
  • 在 Rails 4 中创建到外部 URL 的 Rails 路由

    我有一堆路由 50 需要映射到外部 URL 我绝对可以按照建议做here https stackoverflow com questions 3622706 creating a rails route to an external url
  • Fortran 77 注释的语法突出显示在 vim 中不起作用

    我有一段用 Fortran 77 编写的代码 我用 vim 读取它 编写代码时 注释位于以c 这是 Fortran 77 中的标准 但是 vim 无法识别它们 因此使用着色语法 这使得代码非常难以阅读 我怎样才能克服这个问题 我看到有一个发
  • 在java中查找字符串中字符频率的有效方法:O(n)

    在最近的一次采访中 我被要求编写以下程序 找出给定字符串中频率最小的字符 因此 我尝试使用 charAt 迭代字符串 并将字符存储为 HashMap 中的键 并将出现次数作为其值 现在我必须再次迭代 Map 才能找到最低的元素 有没有一种更
  • 如何创建具有基本身份验证的 ASP.NET 网页

    我想创建 ASP NET 网页 该网页将提示我弹出基本身份验证窗口 我将在其中输入凭据 我尝试在 PreInit 和 PreLoad 事件处理程序中添加以下代码行 但它仍然没有显示基本身份验证弹出窗口 protected override
  • SQLNonTransientConnectionException 在 Eclipse 中连接 MySQL

    我正在尝试编写代码 使用 Eclipse MySQL Workbench 和 JDBC 8 0 11 将文本文件的数据导入数据库 它给了我一个 ClassNotFoundException 我已经查看了多个其他问题 并且通过将 java c
  • MassTransit Consumer 中的异常冒泡导致 Windows 服务崩溃

    我使用 AutoFac 设置了一个包含 2 个消费者的 Windows 服务 在一条快乐的道路上 这确实非常有效 我的印象是大众交通为我处理了例外情况 正如文档所述 http docs masstransit project com en
  • 使用报表查看器在运行时将未知数量的图像插入到报表中

    我正在使用reportviewer 我想在运行时向报告中添加未知数量的图像 用户应该选择一些图像 在另一个地方 这些图像应该一个接一个地显示在报告中 您知道如何使用报表查看器来做到这一点吗 谢谢 奥菲尔 有很多方法可以做到这一点 这是一种可
  • 头文件在代码块中工作吗?

    延迟函数为dos h头文件在代码块中不起作用 它表明延迟函数未声明 以下链接包含以下程序 link http www programmingsimplified com c dos h delay int main printf This
  • 寻找有界子图之间的最小割集

    如果游戏地图被划分为子图 如何最小化子图之间的边 我有一个问题 我试图通过基于网格的游戏 如 pacman 或 sokoban 进行 A 搜索 但我需要找到 外壳 外壳是什么意思 子图尽可能少切边 http en wikipedia org
  • 查找嵌入式 Linux 系统中的延迟问题(停顿)

    我有一个在 Atmel AT91SAM9260EK 板上运行的嵌入式 Linux 系统 其中有两个进程以实时优先级运行 管理器进程使用 POSIX 消息队列定期 ping 工作进程 以检查工作进程的运行状况 通常 往返 ping 需要大约