Files
go-xcipher/BENCHMARK_CN.md
landaiqing f1de873319
Some checks are pending
Stability Tests / Stability Tests (1.24, macos-latest) (push) Waiting to run
Stability Tests / Stability Tests (1.24, ubuntu-latest, true) (push) Waiting to run
Stability Tests / Stability Tests (1.24, windows-latest) (push) Waiting to run
Optimize the encryption and decryption logic and fix the issues in the test
2025-03-14 16:38:16 +08:00

182 lines
5.6 KiB
Markdown
Raw Permalink 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.

# 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 指令集的CPUAES-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
## 持续优化
基准测试是持续优化库性能的重要工具。通过定期运行这些测试,可以检测性能回归并指导进一步的优化工作。