- Fix trailing whitespace in kex.rs and s3.rs - Add missing KexProposal import in kex_complete.rs - Auto-fix clippy warnings across all crates - All 153 tests pass
2.5 KiB
2.5 KiB
Phase 16.2:性能优化分析
测试时间:2026-06-17 22:30 目标:将传输速度从780 KB/s提升到21-36 MB/s
性能瓶颈分析 ⭐⭐⭐⭐⭐
当前配置:
- Window size: 2MB (local_window = 2097152)
- poll timeout: 10ms (每iteration)
- max_poll_iterations: 5000 (50s总timeout)
- stdin timeout: 3000 iterations (30s)
瓶颈1:poll iteration overhead ⭐⭐⭐⭐⭐
- 每iteration: 10ms poll timeout
- 总iteration: 5000次
- 每iteration开销: log输出 + try_wait() check
- 估算开销: 5000 iterations * 10ms = 50秒(理论最大)
- 实际开销: 20MB传输用了24秒,说明poll overhead占用了大量时间
瓶颈2:Window size太小 ⭐⭐⭐⭐
- OpenSSH默认: 2MB
- 实际测试: 20MB传输用了24秒
- 问题: Window size限制了单次传输的数据量
- 解决方案: 增加到16MB或32MB
瓶颈3:AES-CTR encryption overhead ⭐⭐⭐
- AES-256-CTR加密/解密: 每packet需要计算
- MAC计算: HMAC-SHA256 (每packet)
- 估算: 每packet约100-200us开销
- 影响: 780 KB/s可能受encryption限制
瓶颈4:sshbuf zero-copy性能 ⭐⭐
- sshbuf实现: 339行
- 问题: 未进行性能测试
- 可能: zero-copy优化不足
性能优化方案 ⭐⭐⭐⭐⭐
方案1:减少poll iteration overhead(优先 ⭐⭐⭐⭐⭐)
- 增加poll timeout: 从10ms改到100ms
- 减少iteration次数: 从5000改到500
- 减少log频率: 从每10次改到每50次
- 预期效果: 减少50-80% poll overhead
方案2:增加Window size ⭐⭐⭐⭐
- 从2MB增加到16MB或32MB
- 动态调整Window size(根据传输速度)
- 预期效果: 提升单次传输数据量
方案3:优化encryption ⭐⭐⭐
- 使用AES-NI硬件加速(检查是否已启用)
- 减少MAC计算频率(批量计算)
- 预期效果: 减少encryption overhead
方案4:sshbuf性能测试 ⭐⭐
- 编写benchmark测试sshbuf性能
- 对比临时buffer vs zero-copy
- 预期效果: 验证zero-copy优势
实施计划 ⭐⭐⭐⭐⭐
Phase 16.2.1:减少poll overhead(立即实施)
- 修改poll timeout: 10ms → 100ms
- 修改iteration次数: 5000 → 500
- 修改log频率: 每10次 → 每50次
- 预期传输速度: 从780 KB/s提升到10-20 MB/s
Phase 16.2.2:增加Window size
- 从2MB增加到16MB
- 测试传输速度变化
Phase 16.2.3:encryption优化
- 检查AES-NI是否启用
- 如果未启用,添加AES-NI支持
立即实施Phase 16.2.1(减少poll overhead)
最后更新:2026-06-17 22:30