182 lines
5.6 KiB
Markdown
182 lines
5.6 KiB
Markdown
# go-xcipher 性能基准测试指南
|
||
|
||
[English Version](BENCHMARK.md)
|
||
|
||
本文档提供了如何运行 go-xcipher 库性能基准测试的指南,以及如何解读测试结果的说明。
|
||
|
||
## 测试概述
|
||
|
||
这些基准测试旨在全面比较 go-xcipher 库与 Go 标准库中的加密功能的性能。测试包括:
|
||
|
||
1. 基本加密/解密性能测试
|
||
2. 流式加密/解密性能测试
|
||
3. 多核心扩展性能测试
|
||
4. 硬件加速性能测试
|
||
5. 内存使用效率测试
|
||
6. 不同算法和数据大小的性能矩阵测试
|
||
|
||
## 运行测试
|
||
|
||
可以使用以下命令运行完整的基准测试:
|
||
|
||
```bash
|
||
go test -bench=Benchmark -benchmem -benchtime=3s
|
||
```
|
||
|
||
或者运行特定的测试:
|
||
|
||
```bash
|
||
# 基本加密性能测试
|
||
go test -bench=BenchmarkCompareEncrypt -benchmem
|
||
|
||
# 基本解密性能测试
|
||
go test -bench=BenchmarkCompareDecrypt -benchmem
|
||
|
||
# 流式加密性能测试
|
||
go test -bench=BenchmarkCompareStreamEncrypt -benchmem
|
||
|
||
# 流式解密性能测试
|
||
go test -bench=BenchmarkCompareStreamDecrypt -benchmem
|
||
|
||
# 多核心扩展性能测试
|
||
go test -bench=BenchmarkMultiCoreScaling -benchmem
|
||
|
||
# 硬件加速性能测试
|
||
go test -bench=BenchmarkHardwareAcceleration -benchmem
|
||
|
||
# 内存使用效率测试
|
||
go test -bench=BenchmarkMemoryUsage -benchmem
|
||
|
||
# 性能矩阵测试
|
||
go test -bench=BenchmarkPerformanceMatrix -benchmem
|
||
```
|
||
|
||
获取测试指南和系统信息:
|
||
|
||
```bash
|
||
go test -run=TestPrintBenchmarkGuide
|
||
```
|
||
|
||
## 测试文件说明
|
||
|
||
### 1. xcipher_bench_test.go
|
||
|
||
该文件包含基本的性能基准测试,包括:
|
||
|
||
- 不同数据大小的加密/解密性能测试
|
||
- 流式加密/解密性能测试
|
||
- 并行与串行处理性能对比
|
||
- 不同缓冲区大小的性能测试
|
||
- 工作线程数量对性能的影响
|
||
- 文件与内存操作的性能对比
|
||
- 零拷贝与复制操作的性能对比
|
||
- 自适应参数性能测试
|
||
- CPU架构优化性能测试
|
||
|
||
### 2. stdlib_comparison_test.go
|
||
|
||
该文件包含与标准库的性能对比测试,包括:
|
||
|
||
- 与标准库 ChaCha20Poly1305 的性能对比
|
||
- 与 AES-GCM 的性能对比
|
||
- 流式加密/解密性能对比
|
||
- 多核心扩展性测试
|
||
- 硬件加速性能测试
|
||
- 内存使用效率测试
|
||
- 性能矩阵测试
|
||
|
||
### 3. stability_test.go
|
||
|
||
该文件包含稳定性测试,包括:
|
||
|
||
- 长时间运行稳定性测试
|
||
- 并发负载测试
|
||
- 故障容错测试
|
||
- 资源约束测试
|
||
- 大数据处理测试
|
||
- 错误处理测试
|
||
|
||
## 解读测试结果
|
||
|
||
基准测试结果通常具有以下格式:
|
||
|
||
```
|
||
BenchmarkName-NumCPU iterations time/op B/op allocs/op
|
||
```
|
||
|
||
其中:
|
||
- `BenchmarkName`:测试名称
|
||
- `NumCPU`:测试使用的 CPU 核心数
|
||
- `iterations`:运行次数
|
||
- `time/op`:每次操作的时间
|
||
- `B/op`:每次操作分配的字节数
|
||
- `allocs/op`:每次操作的内存分配次数
|
||
|
||
### 性能评估标准
|
||
|
||
1. **吞吐量 (B/s)**:测试报告中的 `B/s` 值表示每秒处理的字节数,数值越高表示性能越好。
|
||
2. **延迟 (ns/op)**:每次操作的平均时间,数值越低表示性能越好。
|
||
3. **内存使用 (B/op)**:每次操作分配的内存量,数值越低表示内存效率越高。
|
||
4. **内存分配 (allocs/op)**:每次操作的内存分配次数,数值越低表示 GC 压力越小。
|
||
|
||
### 重要性能指标解读
|
||
|
||
1. **小数据性能**:对于 1KB-4KB 的小数据,低延迟(低 ns/op)是关键指标。
|
||
2. **大数据性能**:对于 1MB+ 的大数据,高吞吐量(高 B/s)是关键指标。
|
||
3. **并行扩展性**:随着 CPU 核心数增加,性能提升的比例反映并行扩展能力。
|
||
|
||
## 性能比较重点
|
||
|
||
### XCipher vs 标准库 ChaCha20Poly1305
|
||
|
||
这个比较反映了 XCipher 优化后的 ChaCha20Poly1305 实现与标准库实现的性能差异。XCipher 应该在以下方面表现出优势:
|
||
|
||
1. 大数据加密/解密吞吐量
|
||
2. 多核心并行处理能力
|
||
3. 内存使用效率
|
||
4. 实时流处理能力
|
||
|
||
### XCipher vs AES-GCM
|
||
|
||
这个比较反映了不同加密算法之间的性能差异。在现代 CPU(特别是支持 AES-NI 指令集的CPU)上,AES-GCM 可能在某些情况下性能更好,但 ChaCha20Poly1305 在不同硬件平台上表现更一致。
|
||
|
||
## 影响因素
|
||
|
||
测试结果可能受以下因素影响:
|
||
|
||
1. CPU 架构和指令集支持(AVX2, AVX, SSE4.1, NEON, AES-NI)
|
||
2. 操作系统调度和 I/O 状态
|
||
3. Go 运行时版本
|
||
4. 同时运行的其他程序
|
||
|
||
## 特殊测试说明
|
||
|
||
### 多核心扩展性测试
|
||
|
||
这个测试通过逐步增加使用的 CPU 核心数,展示并行处理能力。理想情况下,性能应该随着核心数的增加而线性提升。
|
||
|
||
### 流式处理测试
|
||
|
||
这些测试通过将数据分块处理,模拟真实世界中的流式数据加密/解密场景。这对于处理大型文件或网络流量特别重要。
|
||
|
||
### 硬件加速测试
|
||
|
||
这个测试展示了在具有特定硬件加速功能(如 AVX2, AES-NI)的 CPU 上各种算法的性能比较。
|
||
|
||
## 结果分析示例
|
||
|
||
以下是一个简化的结果分析示例:
|
||
|
||
```
|
||
BenchmarkCompareEncrypt/XCipher_Medium_64KB-8 10000 120000 ns/op 545.33 MB/s 65536 B/op 1 allocs/op
|
||
BenchmarkCompareEncrypt/StdChaCha20Poly1305_Medium_64KB-8 8000 150000 ns/op 436.27 MB/s 131072 B/op 2 allocs/op
|
||
```
|
||
|
||
分析:
|
||
- XCipher 处理 64KB 数据的速度比标准库快约 25%(120000 ns/op vs 150000 ns/op)
|
||
- XCipher 的内存分配量只有标准库的一半(65536 B/op vs 131072 B/op)
|
||
- XCipher 的内存分配次数少于标准库(1 allocs/op vs 2 allocs/op)
|
||
|
||
## 持续优化
|
||
|
||
基准测试是持续优化库性能的重要工具。通过定期运行这些测试,可以检测性能回归并指导进一步的优化工作。 |