,我们研究了 Percepio 的 Tracealyzer 如何帮助开发人员评估其嵌入式系统的性能,查看驱动程序实现并发现 Linux 中断处理程序中的性能问题,以了解何时打印k。在本案例研究的第二部分中,我们将着眼于评估用户空间性能并了解编译器选项对性能的影响。
评估用户空间性能
绝大多数嵌入式 Linux 软件开发人员编写用户空间应用程序。由于这些应用程序特定于某个领域并且非常复杂,因此应用程序开发人员需要一种简单的机制来验证其应用程序的功能并衡量性能。
跟踪点是 LTTng 用户空间跟踪库提供的特定于应用程序的检测点,用于将用户指定的数据捕获为事件,用于此目的。可以通过两种方式创建跟踪点:第一种称为 tracef,是一种将所有数据作为单个事件捕获的非常简单的方法。第二个允许开发人员创建自定义事件。虽然后一种机制需要更多的代码,但它也为收集数据和在 Tracealyzer 中显示数据提供了最大的灵活性。
我在这里使用了 tracef 方法,但请注意,由于两个原因,这也将捕获内核跟踪。首先,包含内核跟踪通常可以解释用户空间事件的时间线。例如,如果我们的应用程序中的两个事件之间有很长的延迟,内核事件应该提供导致它的原因的可见性。其次,从版本 4.4.2 开始,Tracealyzer 需要内核跟踪中的一些数据才能正确显示 UST 事件,尽管它不需要是完整的内核跟踪。
Tracealyzer 还可以测量用户空间应用程序的性能。这个具体的例子模拟了一个需要一定时间使用 Linux usleep 函数的函数,在函数调用之前添加一个跟踪点,在函数调用之后添加另一个跟踪点来测量函数完成所需的时间。