🎉 Initial commit
This commit is contained in:
59
OPTIMIZATION.md
Normal file
59
OPTIMIZATION.md
Normal file
@@ -0,0 +1,59 @@
|
||||
# XCipher库性能优化总结
|
||||
|
||||
## 性能改进
|
||||
|
||||
通过对XCipher库进行一系列优化,我们将性能从基准测试的约2200 MB/s提升到了:
|
||||
- 并行加密:最高2484 MB/s(64MB数据)
|
||||
- 并行解密:最高8767 MB/s(16MB数据)
|
||||
|
||||
## 主要优化策略
|
||||
|
||||
### 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. 实现更智能的动态参数调整系统,根据实际运行环境自适应调整
|
Reference in New Issue
Block a user