调试嵌入式 Linux 非常复杂,即使是最有经验的嵌入式系统开发人员也面临许多挑战。但是,专门支持嵌入式 Linux 的可视化跟踪诊断工具可以大大简化这项工作。
我的任务是开发一个定制的 Linux 驱动程序来使用外部设备流式传输的数据。虽然 Linux 内核有一些原生机制来确保驱动程序的功能是正确的,但调试和评估性能远非简单。这就是为什么我决定测试新的跟踪工具(例如支持嵌入式 Linux 的 Tracealyzer)是否以及如何帮助我,从分析驱动程序和中断处理程序,到检查用户空间应用程序和编译器选项。
我将跟踪工具与基于 Yocto 的 Linux 发行版一起使用,首先在板支持包上构建自定义层以启用开源LTTng库。这为作为 Linux 系统(包括内核)的一部分执行驱动程序提供了许多有价值的观点。它还让我对驱动程序有了更全面的了解,以确保没有性能瓶颈或确定任何瓶颈的原因。
诊断跟踪工具还可以帮助发现 IRQ 处理程序中的性能问题,而无需使用可怕的 printk 语句。就我而言,它发现需要通过 I2C 总线确认设备中断以防止抖动。如果不使用跟踪工具,这个隐藏的错误直到发布前不久移除无关的 printk 调用时才会被发现或显现出来。该工具还揭示了在中断处理程序中包含 printk 的严重影响。使用跟踪工具有效地避免了在后期修改驱动程序的需要,这会导致大量的延误和成本。
使用跟踪工具,我还能够测试我的假设,即设置进程的 CPU 亲和性将如何影响其性能。分析正常和高强度条件下不同执行元素之间的交互,显示了 Linux 内核的尽力而为算法。这确定了 Linux 内核调度程序和 iperf 代码库的某些区域以供进一步调查。
在评估用户空间性能时,跟踪工具可以更加强大。像大多数嵌入式软件开发人员一样,我开发针对 Linux 系统的用户空间应用程序。将跟踪工具的输出与 LTTng 跟踪点结合起来提供了一种宝贵的方法来帮助我确定我的应用程序的执行情况、识别任何异常行为并提供高级时序统计信息。然后,我可以使用该工具进一步解决任何计时问题并提高应用程序的性能。
我还发现跟踪工具和 LTTng 库的结合非常强大,可以帮助我快速了解某些编译器选项对执行浮点计算的用户空间应用程序性能的影响。通常,这种分析是在应用程序完成但应用程序性能不佳时进行的,并且可能需要很多时间。在开发过程中使用该工具来验证软件时序帮助我避免了对性能的影响。
总而言之,我发现 Tracealyzer 等跟踪工具可以成为发现隐藏错误和优化嵌入式 Linux 系统性能的强大元素。
诸如用于自上而下探索性分析的高级概述等功能,包括进程交互、进程分叉、CPU 使用率、RAM 使用率、I/O 使用率、文件使用率、状态机和用户定义的指标,提供了宝贵且直观的跟踪视图,用于显示细节,在响应性和清晰度方面可扩展到大型 Linux 跟踪。当通过可定制的事件解释适应特定用例时,任何用户定义的数据集(例如间隔和状态机)都可以显示在高度可配置的视图中。最后,使用开源 LTTng 库打开了广泛的功能来探索嵌入式 Linux 设计的各个方面,从驱动程序和中断处理程序到用户空间应用程序和编译器选项。在开发过程中使用这种组合不仅可以提高可见性,而且可以在过程的早期解决问题。从我经验丰富的开发人员的角度来看,这避免了隐藏的错误并节省了项目后期的时间和成本。

图1。在评估自定义 Linux 内核(如图)时,将开源 LTTng 库与跟踪工具结合使用可以揭示性能问题。

图 2:此垂直跟踪视图使用垂直时间线显示事件流。它从顶部开始,时间向下增长。每列代表系统中的单个执行上下文——通常是任务或中断处理程序——列中的矩形显示特定任务何时运行。水平标签(左)标记记录的软件事件。该图是完全响应的,因此放大可以显示更多细节。
审核编辑:郭婷
相关推荐
MP是英文Bitmap(位图)的简写,它是Windows操作系统中的标准图像文件格式,能够被多种Wi....
嵌入式技术 发表于 08-18 17:14
•
136次
阅读
MP是英文Bitmap(位图)的简写,它是Windows操作系统中的标准图像文件格式,能够被多种Wi....
嵌入式技术 发表于 08-18 17:09
•
95次
阅读
本文主要介绍内存的基本概念以及操作系统的内存管理算法。
代码没有错误,就可以单步或连续模拟运行调试、观察运行结果。Keil C51内建了一个仿真CPU来模拟....
冬至配饺子 发表于 08-18 14:35
•
187次
阅读
8月17日,由全球电子技术领域领先的媒体集团 ASPENCORE 举办的 “2022年度中国 IC ....
我们通常所说的内存容量,指的是物理内存,只有内核才可以直接访问物理内存,进程并不可以。
发表于 08-18 12:30 •
79次
阅读
最近项目有点多,总结一下目前接触的软件架构中的几个分类,个人拙见,大家可以相互学习。
GPU(默认为GPGPU),一方面其数以千计的引擎可编程能力不错,可以覆盖非常多的领域。也因为CUD....
倩倩 发表于 08-18 11:00
•
125次
阅读
通过大量编程实例重点学习C语言的高级编程知识,包括函数与程序结构、指针、数组、常用算法、库函数的使用....
倩倩 发表于 08-18 09:52
•
183次
阅读
此次融资前,芯来科技不断推动RISC-V CPU IP的国产化应用落地进程,全系列产品已经成熟稳定地....
芯来科技 发表于 08-18 09:48
•
116次
阅读
请教下CH573F的USB有linux下基于libusb进行通信的Demo示例吗
...
发表于 08-18 07:59 •
56次
阅读
内核代码和数据结构存放在一组保留的页框中,这些页框所含的页从不动态分配或者交换到内存中。
冬至配饺子 发表于 08-17 16:27
•
241次
阅读
超大规模用户和 CSP 的第二个要求是可组合性。这是一种将新功能块动态插入到收发包处理流水线中的功能....
FPGA之家 发表于 08-17 16:06
•
64次
阅读
我想咨询一下System Canvas tool问题:
1、它会快速创建一个CPU Model.
比如创建一个4 cores' CA53:
(1) 它如何与第三...
发表于 08-17 15:57 •
818次
阅读
通过Hitool烧录 hihope_uboot.bin 后,
使用tftp2emmc命令进行以下网口烧录:
tftp2emmc 0x0 u-boot-hi3559av100.bin
tftp...
发表于 08-17 15:49 •
327次
阅读
RK3588 是一款低功耗、高性能的处理器,适用于基于 arm 的 PC 和 Edge 计算设备、个人 移动互联网设备等数字多媒体应用,采...
发表于 08-17 14:56 •
311次
阅读
本文详细介绍了基于RT-Thread操作系统和RA6M4处理器,如何移植和适配samba服务。同时,....
总之,虽然 SLC NAND、eMMC 和 UFS 的每比特成本较低,但 NOR 闪存器件仍然是....
发表于 08-17 11:57 •
74次
阅读
OKMX8MM-C开发板预留了I2C3和SAI引脚接口,分别位于P18和P7插针引脚上,板载音频芯片挂载到了I2C2和SAI2。今...
发表于 08-17 11:41 •
693次
阅读
容错冗余 RAID 存储与可靠的工业级 SSD 驱动器(如 SLC 或 iSLC 级 SSD)相....
嵌入式数据安全带来的核心工程挑战与功能安全带来的挑战基本相同。这些问题可以通过适当的知识、风险评....
尽管对加固型嵌入式设备的需求不断增加,但内存模块供应商继续进行技术进步和相关的制造改进,以满足 ....
RRAM 在短期内成为闪存继任者的障碍是每比特成本。闪存是一种非常便宜的制造技术。Yu 说,3D....
嵌入式工业基础设施应用存储需求的多样化和分散性促使 OEM 评估多种选项以匹配其各自的系统需求。....
嵌入式设计可接受的最终外形尺寸是工业 2.5 英寸 SATA SSD。如果您需要大量存储并且您的....
嵌入式产品中越来越多地使用计算、视觉和推理加速的集成带来了重大的新商机,Khronos 正在开发....
字符(char)设备是个能够像字节流(类似文件)一样被访问的设备,由字符设备驱动程序来实现这种特性。....
FPGA之家 发表于 08-17 09:04
•
58次
阅读
当然实际中 k8s 的调度策略不是这么简单的,系统默认的 kube-scheduler 调度器外还有....
冬至配饺子 发表于 08-16 18:20
•
212次
阅读
前言
得力于 msh 我们可以在 rt-thread 运行的时候执行一些内置命令,查看系统运行状态。
但是对于一个嵌入式开发工程师,有这...
发表于 08-16 15:15 •
1123次
阅读
RTOS 还需要暂时禁用可以调用 API 函数的中断。一些 RTOS 禁用所有中断,有效地恶化了所有....
发表于 08-16 14:13 •
77次
阅读
ABDAC 可以连接到设备上的 DMA 控制器。在将数据从 RAM 中的缓冲区传输到 ABDAC 时....
发表于 08-16 11:36 •
136次
阅读
这一切都可以通过编程方式完成,并且可以完全配置以满足应用程序的需求。例如,通过设置关机和看门狗时....
推理引擎用于部署应用程序。使用部署管理器,您可以通过将模型、IR 文件、应用程序和相关依赖项组装....
MP是英文Bitmap(位图)的简写,它是Windows操作系统中的标准图像文件格式,能够被多种Wi....
嵌入式技术 发表于 08-16 11:27
•
61次
阅读
BMP是英文Bitmap(位图)的简写,它是Windows操作系统中的标准图像文件格式,能够被多种W....
嵌入式技术 发表于 08-16 11:20
•
64次
阅读
其次,如果在嵌入式系统上运行多个应用程序,这些其他应用程序可能会破坏目标应用程序,这也会增加算法....
RX600 内核具有符合 IEE-754 标准的单精度 32 位浮点单元。FPU 紧密连接到共享相同....
发表于 08-16 10:41 •
70次
阅读
OpenBMC 是用于服务器、架顶式交换机、RAID 设备和其他设备的管理控制器的 Linux ....
Pantavisor Linux 将您的固件、操作系统、网络和板级支持包 (BSP) 容器化,使....
CPU的话尽量看主频比较高的,缓存比较大的,核心数也是比较重要的参数。显卡尽可能选现存比较大的,这样....
发表于 08-16 09:50 •
67次
阅读
诸如用于自上而下探索性分析的高级概述等功能,包括进程交互、进程分叉、CPU 使用率、RAM 使用....
发表于 08-16 09:48 •
75次
阅读
最终配置是直接云选项,每个平台直接访问互联网并将测量推送到云端。由于 CN0549 在 Linu....
本文提供了 Linux 文件压缩至关重要的原因。这种技术在组织中起着至关重要的作用,尤其是那些处....
由于 5G 技术和 10+ GbE 网络,实时处理在触觉互联网环境中变得越来越重要,因此开发人员....
乍一听,和我们的直觉有矛盾啊:那么高大上的设备,其中的控制逻辑一定很复杂,不用嵌入式系统怎么来完成那....
发表于 08-16 09:18 •
105次
阅读
引导加载程序是系统上电后运行的第一个代码,它处理基本的硬件初始化,并从嵌入式 Linux 系统中....
发表于 08-16 09:14 •
57次
阅读
GDB,又称GNU调试器,是用来帮助调试我们程序的工具。gdb可以设置断点、查看变量、堆栈空间的值、....
嵌入式技术 发表于 08-16 09:03
•
186次
阅读
描述
Pauline,通用软盘阅读器/模拟器
该设备可以检测它所连接的软盘驱动器类型,尝试修复软盘的故障扇区并对其进行备份!它...
发表于 08-16 06:02 •
240次
阅读
最后,我们使用了 HIGGS 数据集 ,其中包含有关原子加速器运动学特性的数据。希格斯数据集的前 5....
在嵌入式开发中,我们比较熟悉的是像Keil,IAR这些IDE(Integrated Developm....
发表于 08-15 17:16 •
48次
阅读
该关联分数可以作为奖励信号提供,以指导强化学习代理完成任务。对于示例任务“剪一只羊以获得羊毛”,....
开发人员现在可以访问面向云的软件模块和工具,这些模块和工具可轻松与常见的网络堆栈和 RTOS 实....
为了简化开发,CML 提供了 HAT 板 EV6550DHAT,这意味着 CMX655D 编解码....
在本系列的第 2 部分中,我们展示了游戏 AI 代理是如何设计的。我们还展示了为 Dr Arm 的 Boss Battle 演示生成的神经网络...
发表于 08-15 15:43 •
746次
阅读
工作原理
WebClient 软件包主要用于在嵌入式设备上实现 HTTP 协议,软件包的主要工作原理基于 HTTP 协议实现,如下图...
发表于 08-15 14:27 •
301次
阅读
TMS320VC5501(5501)定点数字信号处理器(DSP)基于TMS320C55x™DSP生成CPU处理器内核。 C55x™DSP架构通过增加并行性和全面关注降低功耗来实现高性能和低功耗。 CPU支持内部总线结构,该结构由一个程序总线,三个数据读总线,两个数据写总线以及专用于外设和DMA活动的附加总线组成。这些总线能够在一个周期内执行最多三次数据读取和两次数据写入。并行,DMA控制器可以独立于CPU活动执行数据传输。
C55x™CPU提供两个乘法累加(MAC)单元,每个单元能够进行17位×17位乘法运算。单循环。额外的16位ALU支持中央40位算术/逻辑单元(ALU)。 ALU的使用受指令集控制,提供优化并行活动和功耗的能力。这些资源在C55x CPU的地址单元(AU)和数据单元(DU)中进行管理。
C55x DSP代支持可变字节宽度指令集,以提高代码密度。指令单元(IU)从内部或外部存储器执行32位程序提取,并为程序单元(PU)排队指令。程序单元解码指令,将任务指向AU和DU资源,并管理完全受保护的管道。预测分支功能可避免执行条件指令时的管道刷新。
5501外设...
发表于 10-09 14:55 •
544次
阅读
TI AM437x高性能处理器基于ARM Cortex-A9内核。
这些处理器通过3D图形加速得到增强,可实现丰富的图形用户界面,还配备了协处理器,用于进行确定性实时处理(包括EtherCAT,PROFIBUS,EnDat等工业通信协议)。该器件支持高级操作系统(HLOS)。基于Linux的® 可从TI免费获取。其它HLOS可从TI的设计网络和生态系统合作伙伴处获取。
这些器件支持对采用较低性能ARM内核的系统升级,并提供更新外设,包括QSPI-NOR和LPDDR2等存储器选项。
这些处理器包含功能方框图中显示的子系统,并且后跟相应的“说明”中添加了更多信息说明。
处理器子系统基于ARM Cortex-A9内核,PowerVR SGX™图形加速器子系统提供3D图形加速功能以支持显示和高级用户界面。
可编程实时单元子系统和工业通信子系统(PRU-ICSS与ARM内核分离,允许单独操作和计时,以实现更高的效率和灵活性.PRU-ICSS支持更多外设接口和EtherCAT,PROFINET,EtherNet /IP,PROFIBUS,以太网Powerlink,Sercos,EnDat等...
发表于 09-25 11:51 •
706次
阅读
评论