Files
markbase/data/phase16_2_performance_analysis.md
Warren d94cb2df4c Fix code quality: trailing whitespace, unused imports, clippy warnings
- 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
2026-06-19 05:21:38 +08:00

2.5 KiB
Raw Blame History

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)

瓶颈1poll iteration overhead

  • 每iteration: 10ms poll timeout
  • 总iteration: 5000次
  • 每iteration开销: log输出 + try_wait() check
  • 估算开销: 5000 iterations * 10ms = 50秒理论最大
  • 实际开销: 20MB传输用了24秒说明poll overhead占用了大量时间

瓶颈2Window size太小

  • OpenSSH默认: 2MB
  • 实际测试: 20MB传输用了24秒
  • 问题: Window size限制了单次传输的数据量
  • 解决方案: 增加到16MB或32MB

瓶颈3AES-CTR encryption overhead

  • AES-256-CTR加密/解密: 每packet需要计算
  • MAC计算: HMAC-SHA256 (每packet)
  • 估算: 每packet约100-200us开销
  • 影响: 780 KB/s可能受encryption限制

瓶颈4sshbuf 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

方案4sshbuf性能测试

  • 编写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.3encryption优化

  • 检查AES-NI是否启用
  • 如果未启用添加AES-NI支持

立即实施Phase 16.2.1减少poll overhead


最后更新2026-06-17 22:30