“调试嵌入式 Linux 非常复杂,即使是最有经验的嵌入式系统开发人员也面临许多挑战。但是,专门支持嵌入式 Linux 的可视化跟踪诊断工具可以大大简化这项工作。
”作者:Mohammed Billoo
调试嵌入式 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:此垂直跟踪视图使用垂直时间线显示事件流。它从顶部开始,时间向下增长。每列代表系统中的单个执行上下文——通常是任务或中断处理程序——列中的矩形显示特定任务何时运行。水平标签(左)标记记录的软件事件。该图是完全响应的,因此放大可以显示更多细节。
分享到:
猜你喜欢