概述
跟踪是一种用于了解运行中的软件系统中发生了什么的技术。用于跟踪的软件被称为跟踪器,在概念上类似于磁带记录器。记录时,放置在软件源代码中的特定检测点会生成保存在巨大磁带上的事件:跟踪文件。稍后可以在跟踪查看器中打开跟踪文件,以使用时间戳和多核视图可视化和分析跟踪事件。这样的机制将有助于解决一系列问题,如多核同步问题、延迟测量、找出分析后的信息(如CPU空闲时间)等这些信息将极具挑战性。
跟踪通常被比作日志记录。然而,跟踪器和记录器是两种不同的工具,用于两种不同目的。跟踪器被设计用于记录比日志消息更频繁发生的低级别事件,通常在每秒数千次的范围内,执行开销非常小。日志记录更适合于对不太频繁的事件进行非常高级的分析:用户访问、异常情况(例如错误和警告)、数据库事务、即时消息通信等等。简单地说,日志记录是可以满足跟踪的众多用例之一。
DPDK跟踪库功能
一个在控制和快速路径API中添加跟踪点的框架,对性能的影响最小。典型的跟踪开销约为20个cycle,指令开销为1个cycle。
在运行时启用和禁用跟踪点。
在任何时间点将跟踪缓冲区保存到文件系统。
支持覆盖和放弃跟踪模式操作。
基于字符串的跟踪点对象查找。
基于正则表达式和/或globbing启用和禁用一组跟踪点。
以通用跟踪格式(CTF)生成跟踪。CTF是一种开源跟踪格式,与LTTng兼容。有关详细信息,请参阅通用跟踪格式。
如何添加跟踪点?
面的宏创建apptrackestring跟踪点。用户可以为跟踪点选择任何名称。但是,在DPDK库中添加跟踪点时,必须遵循rte_<library_name>trace[_]命名约定。示例为rte_eal_trace_generic_str、rte_mempool_trace_create。
RTE_TRACE_POINT宏从上述定义扩展为以下函数模板:
此跟踪点的使用者可以调用app_trace_string(const char*str)将跟踪事件发送到跟踪缓冲区。
注册跟踪点