- 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
84 lines
2.5 KiB
Markdown
84 lines
2.5 KiB
Markdown
# 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
|