Files
go-xcipher/OPTIMIZATION.md
2025-03-13 21:49:30 +08:00

2.1 KiB
Raw Blame History

XCipher库性能优化总结

性能改进

通过对XCipher库进行一系列优化我们将性能从基准测试的约2200 MB/s提升到了

  • 并行加密最高2484 MB/s64MB数据
  • 并行解密最高8767 MB/s16MB数据

主要优化策略

1. 内存管理优化

  • 实现分层内存池系统,根据不同大小的缓冲区需求使用不同的对象池
  • 添加getBuffer()putBuffer()辅助函数,统一管理缓冲区分配和回收
  • 减少临时对象分配,特别是在热点路径上

2. 并行处理优化

  • 增加并行工作线程数上限从4提升到8
  • 引入动态线程数调整算法根据数据大小和CPU核心数自动选择最佳线程数
  • 增加工作队列大小,减少线程争用
  • 实现批处理机制,减少通道操作开销

3. AEAD操作优化

  • 在加密/解密操作中重用预分配的缓冲区
  • 避免不必要的数据拷贝
  • 修复了可能导致缓冲区重叠的bug

4. 自动模式选择

  • 基于输入数据大小自动选择串行或并行处理模式
  • 计算最佳缓冲区大小,根据具体操作类型调整

5. 内存分配减少

  • 对于小型操作,从对象池中获取缓冲区而不是分配新内存
  • 工作线程预分配缓冲区,避免每次操作都分配

6. 算法和数据结构优化

  • 优化nonce生成和处理
  • 在并行模式下使用更大的块大小

基准测试结果

并行加密性能

数据大小 性能 (MB/s) 分配次数
1MB 1782 113
16MB 2573 1090
64MB 2484 4210

并行解密性能

数据大小 性能 (MB/s) 分配次数
1MB 5261 73
16MB 8767 795

进一步优化方向

  1. 考虑使用SIMD指令AVX2/AVX512进一步优化加密/解密操作
  2. 探索零拷贝技术,减少内存带宽使用
  3. 针对特定CPU架构进行更精细的调优
  4. 实现更智能的动态参数调整系统,根据实际运行环境自适应调整