# ftrace_collector **Repository Path**: xuhou/ftrace_collector ## Basic Information - **Project Name**: ftrace_collector - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-20 - **Last Updated**: 2025-12-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Ftrace 采集工具 # 编译 ~~~bash bash build.sh ~~~ # 运行 ~~~bash cd build ./ftrace_collector -h #获取使用方法 ~~~ ## Ftrace 采集工具 - 配置文件格式说明 本文件详细说明配置文件(INI格式)的编写规则,适用于复杂场景或批量采集任务。 ## 一、配置文件核心规则 1. 格式:INI 格式 2. 注释:支持 `;` 或 `#` 开头的注释行(整行注释) 3. 优先级:任务节点(`task1`、`task2`...)的配置会覆盖全局节点(`global`)的默认配置 4. 必填项:全局节点或任务节点必须包含 `duration`(采集时长),否则任务会被跳过 5. 字符串值:无需加引号(如 `cpu_list=0-3`,无需写成 `"0-3"`) ## 二、配置节点说明 配置文件包含两类节点:`[global]`(全局默认配置)和 `[taskN]`(单个采集任务,N=1,2,...) ### 1. 全局节点:`[global]` 所有任务的默认配置,可在任务节点中覆盖。 | 参数名 | 说明 | 类型 | 默认值 | 是否必填 | | ---------------------- | ---------------------------------------------------------- | --------- | ------------------------ | -------- | | cpu_list | CPU列表(格式:`0-177` 或 `0,2,4`) | 字符串 | 所有CPU(0-CPU总数-1) | 否 | | duration | 采集时长(单位:秒,需为正整数) | 整数 | - | 是 | | log_path | 日志保存路径(如 `./ftrace_logs`) | 字符串 | `./` | 否 | | log_prefix | 日志文件名前缀(最终文件名:前缀_时间戳.log) | 字符串 | `cpu_trace` | 否 | | buffer_size_kb | 缓冲区大小(单位:KB,如 `65536`=64MB) | 字符串 | `32768` | 否 | | stack_trace | 栈跟踪开关(`1`=启用,`0`=禁用) | 整数/布尔 | `1` | 否 | | function_tracer | 跟踪器类型(仅支持 `function` 或 `function_graph`) | 字符串 | `function` | 否 | | function_trace_enabled | 是否启用函数跟踪(`1`=启用,`0`=禁用) | 整数/布尔 | `1` | 否 | | trace_functions | 跟踪函数列表(逗号分隔,支持模糊匹配如 `mutex_*`) | 字符串 | 空(不跟踪函数) | 否 | | enable_events | 自定义事件列表(逗号分隔;空字符串 `""` 表示禁用所有事件) | 字符串 | 默认事件syscalls+sched) | 否 | ### 2. 任务节点:`[task1]`、`[task2]`... 单个采集任务的配置,可覆盖全局配置。 - 命名规则:节点名必须以 `task` 开头,后面跟数字(如 `task1`、`task10`),按数字顺序执行 - 必选参数:`name`(任务名称,用于日志前缀和区分任务) - 其他参数:与 `[global]` 节点的参数完全一致,覆盖全局默认值 ## 三、参数格式细节 ### 1. `cpu_list` 格式 - 范围格式:`0-3`(采集CPU 0、1、2、3) - 单个格式:`5`(仅采集CPU 5) - 混合格式:`0-2,4,6-7`(采集CPU 0、1、2、4、6、7) - 默认值:未指定则采集所有CPU(`0-CPU总数-1`) ### 2. `trace_functions` 格式 - 精确匹配:`mutex_lock,mutex_unlock`(仅跟踪这两个函数) - 模糊匹配:`mutex_*`(跟踪所有以 `mutex_` 开头的函数) - 多个匹配:`mutex_*,spin_lock`(同时跟踪mutex和spin_lock相关函数) ### 3. `enable_events` 格式 - 事件路径:必须是 Ftrace 原生事件路径(以 `enable` 结尾),示例: - 调度事件:`events/sched/sched_switch/enable` - 系统调用事件:`events/syscalls/sys_enter_futex/enable` - 多个事件:逗号分隔,如 `events/sched/sched_switch/enable,events/syscalls/sys_enter_futex/enable` - 禁用所有事件:空字符串 `""`(仅函数跟踪,无事件采集) ## 四、完整配置示例 ```ini ; 全局默认配置(所有任务的基础配置) [global] duration = 5 ; 所有任务默认采集5秒 log_path = ./ftrace_logs ; 日志保存到当前目录的 ftrace_logs 文件夹 stack_trace = 1 ; 全局启用栈跟踪 buffer_size_kb = 65536 ; 缓冲区大小64MB function_tracer = function ; 全局使用 function 跟踪器 ; 任务1:跟踪 mutex 相关函数(CPU 0-3) [task1] name = mutex_trace ; 任务名称(日志前缀:mutex_trace_时间戳.log) cpu_list = 0-3 ; 仅采集CPU 0-3 trace_functions = mutex_* ; 跟踪所有 mutex 相关函数 enable_events = "" ; 禁用所有事件,仅函数跟踪 ; 任务2:跟踪调度事件(CPU 4-7) [task2] name = sched_event_trace ; 任务名称 cpu_list = 4-7 ; 仅采集CPU 4-7 enable_events = events/sched/sched_switch/enable,events/sched/sched_wakeup/enable ; 仅启用调度事件 function_trace_enabled = 0 ; 禁用函数跟踪,仅事件采集 ; 任务3:跟踪 spinlock 函数+系统调用事件(所有CPU) [task3] name = spinlock_syscall_trace trace_functions = spin_lock* ; 跟踪所有 spin_lock 相关函数 enable_events = events/syscalls/sys_enter_write/enable,events/syscalls/sys_exit_write/enable ; 启用write系统调用事件 stack_trace = 0 ; 禁用栈跟踪(覆盖全局的启用配置)