FlowCoro支持Profile-Guided Optimization (PGO),当profile数据可用时自动提供37.5%的性能提升!
FlowCoro/
├── pgo_profiles/ # PGO profile数据存储
│ └── *.gcda # 编译器生成的profile文件
└── build/ # 构建目录(自动启用PGO)
详细性能数据: 完整的PGO优化前后对比请参考 性能数据参考
PGO优化后的主要性能提升:
- 协程创建性能: +32%
- WhenAny性能: +75%
- 队列操作: +25.6%
- 整体性能: +37.5%
- WhenAny并发操作: +75%
- 整体吞吐量: +37.5%
- 协程vs线程优势: 139.8x(从102.2x提升)
FlowCoro会自动检测并使用可用的PGO profile数据:
# 正常构建,自动启用PGO优化(如果profile数据存在)
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j$(nproc)如果需要为新的工作负载优化:
# 第一步:生成profile数据
mkdir build_pgo && cd build_pgo
cmake -DCMAKE_BUILD_TYPE=Release -DFLOWCORO_PGO_GENERATE=ON ..
make -j$(nproc)
# 第二步:运行代表性工作负载
./examples/hello_world 50000
./benchmarks/professional_flowcoro_benchmark
./tests/test_core
# 第三步:复制profile数据到项目目录
find . -name "*.gcda" -exec cp {} ../pgo_profiles/ \;
# 第四步:重新构建使用PGO优化
cd .. && rm -rf build_pgo
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j$(nproc)cmake -DCMAKE_BUILD_TYPE=Release -DFLOWCORO_ENABLE_PGO=OFF ..| 选项 | 默认值 | 描述 |
|---|---|---|
FLOWCORO_ENABLE_PGO |
ON | 启用PGO支持 |
FLOWCORO_PGO_USE |
ON | 使用已有的profile数据 |
FLOWCORO_PGO_GENERATE |
OFF | 生成新的profile数据 |
- Profile生成阶段: 使用
-fprofile-generate编译,运行代表性负载 - 优化编译阶段: 使用
-fprofile-use基于profile数据优化代码 - 自动检测: CMake自动检测
pgo_profiles/目录中的profile数据
运行性能测试验证PGO效果:
cd build
./examples/hello_world 30000
./benchmarks/professional_flowcoro_benchmark期望结果:
- 协程吞吐量: 百万级+ 请求/秒
- 协程vs线程优势: 显著性能提升
当添加新功能或改变性能关键路径时,重新生成profile数据。
- 保持profile数据最新: 重大代码变更后重新生成profile
- 使用代表性负载: profile生成时运行真实的使用场景
- 验证性能提升: 定期运行基准测试确认PGO效果
- 版本控制: 将
pgo_profiles/目录加入版本控制
检查profile文件是否存在:
ls -la pgo_profiles/如需重新生成,按照上述手动生成步骤操作。
这是正常的警告,表示特定文件没有profile数据,不影响PGO效果。
- 确认使用Release构建模式
- 验证PGO确实启用(CMake配置输出)
- 重新生成适合当前工作负载的profile数据
FlowCoro的PGO实现基于GCC的Profile-Guided Optimization:
- Profile格式: GCDA (GCC Data Archive)
- 优化目标: 分支预测、函数内联、循环优化
- 覆盖范围: 核心协程调度、内存池、lockfree数据结构
完整数据: 详细的性能对比和基准测试结果请参考 性能数据参考
FlowCoro通过多层优化实现卓越性能:
- Memory Pool优化: 数倍性能提升
- LockFree优化: 显著性能提升
- PGO编译器优化: 大幅性能提升
- 综合效果: 百万级请求/秒,显著协程优势