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

59 lines
2.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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. 实现更智能的动态参数调整系统,根据实际运行环境自适应调整