# GCDBenchmark **Repository Path**: ufogxl/gcdbenchmark ## Basic Information - **Project Name**: GCDBenchmark - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-11 - **Last Updated**: 2026-01-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # GCDBenchmark - GCD性能基准测试 ## 用法 ### 批量测试 ```bash # 完整测试(所有场景,5轮/场景,约30-50分钟) ./record_all_trace.sh [输出目录] [设备名|Mac] # 快速测试(仅fork_join,1轮/场景,约2-5分钟) ./record_all_trace_mini.sh [输出目录] [设备名|Mac] ``` **示例:** ```bash # iOS设备测试 ./record_all_trace_mini.sh ~/Desktop "iPad" # macOS平台测试 ./record_all_trace_mini.sh ~/Desktop Mac ``` ### 解析trace文件 ```bash python3 trace_parser.py trace文件.trace --output-dir 输出目录 ``` **示例:** ```bash python3 trace_parser.py ~/Desktop/GCDBenchmark_result_20251202_120000/playback_douyin_swipe_sceneboard.trace --output-dir ~/Desktop/analysis ``` ## 输出 ### CSV指标 - `benchmark_case`: 测试场景 - `sched_delay`: 平均调度延迟(微秒) - `worker_count`: GCD工作线程数 - `wakeup_count`: 线程唤醒次数 - `total_tasks`: 任务总数 - `first_delay`: 首个任务延迟(微秒) - `max_delay`: 最大延迟(微秒) - `total_cost`: 总执行时间(微秒) ### 目录结构 ``` 输出目录/ ├── *.trace # trace文件 ├── temp_csv/ # CSV结果 │ └── trace_metrics_*.csv └── process_thread_analysis.txt # 线程分析 ``` ### dtrace脚本 用于统计 **GCDBenchmarkCLI 运行期间**某个内核函数(FBT probe)的 **调用栈聚合计数**(调用栈 -> 次数): ```bash ./record_dtrace_func_count.sh ``` - 默认采样符号写死在脚本顶部:`PROBE_FUNCTIONS=( ... )`(支持同时写多个内核函数名) - 输出为文本文件:`/GCDBenchmark_dtrace_stack_*/stack_counts.txt` - 注意:macOS 上对内核 `fbt` 探针通常需要关闭 SIP(具体见 `kdk_disasm/KDK_GUIDE.md`) 可选:按调用栈内容做过滤统计(多层路径匹配): ```bash python3 dtrace_stack_parser.py \ --contains workq_unpark_select_threadreq_or_park_and_unlock \ --contains workq_select_threadreq_or_park_and_unlock \ --ordered ``` - `--contains` 可重复,表示必须包含的栈帧关键字 - `--ordered` 要求关键字在栈中按顺序出现 - `--function` 可重复,限制只统计指定函数