基准测试 Ceph 纠删码插件
Ceph 中的 纠删码 实现依赖于 jerasure 库。它被打包成一个 插件,该插件由纠删码池动态加载。
ceph_erasure_code_benchmark 被实现用于帮助基准测试竞争的纠删码插件实现,并找到给定插件的最佳参数。它显示 jerasure 技术 cauchy_good 具有 **3072** 的包大小,在 Intel(R) Xeon(R) CPU E3-1245 V2 @ 3.40GHz 上编译时,效率最高,编译版本为 gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)。测试假设每个对象分布在六个 OSD 上,并且使用两个额外的 OSD 用于奇偶校验 ( K=6 和 M=2 )。
- 编码: 4.2GB/s
- 解码: 无需处理 (因为代码是 系统码)
- 恢复一个 OSD 的丢失: 10GB/s
- 恢复两个 OSD 的丢失: 3.2GB/s
处理在主 OSD 上完成,因此分布在 Ceph 集群上。编码和解码比典型的存储硬件吞吐量快一个数量级。
./autogen.sh ; ./configure ; make
编译 ceph_erasure_code_benchmark 基准测试工具。
结果 来自 纠删码基准测试 脚本 (依赖于 ceph_erasure_code_benchmark ),在 Intel(R) Xeon(R) CPU E3-1245 V2 @ 3.40GHz 上生成,并使用 gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) 编译。
CEPH_ERASURE_CODE_BENCHMARK=src/ceph_erasure_code_benchmark \ PLUGIN_DIRECTORY=src/.libs \ qa/workunits/erasure-code/bench.sh
可以这样解释
seconds KB plugin k m work. iter. size eras. 0.612510 1048576 example 2 1 encode 1024 1048576 0 0.317254 1048576 example 2 1 decode 1024 1048576 1
第一行使用 example 插件以 0.612510 秒的时间 编码 1048576KB (1GB),约为 ~1.7GB/s。测量是通过迭代 1024 次来编码一个 1048576 (1MB) 字节的缓冲区完成的。第二行使用 example 插件以 0.317254 秒的时间 解码 1048576KB (1GB),当 1 个块被 擦除 (最后一列) 时,约为 ~3.1GB/s。测量是通过迭代 1024 次来解码一个被编码一次的 1048576 (1MB) 字节的缓冲区完成的。
当使用 Jerasure Ceph 插件 和 Reed Solomon 技术来承受两个 OSD 的丢失 (即 K=6 和 M=2 ) 时,结果如下
seconds KB plugin k m work. iter. size eras. 0.103921 1048576 jerasure 6 2 decode 1024 1048576 1 0.277644 1048576 jerasure 6 2 decode 1024 1048576 2 0.238322 1048576 jerasure 6 2 encode 1024 1048576 0
第一行显示,如果丢失 1 个 OSD ( 擦除 ),则可以以 10GB/s 的速率恢复 ( 1/0.103921 )。如果丢失 2 个 OSD,恢复两者可以以 3.6GB/s 的速率完成 ( 1/0.277644 )。编码可以以 4.2GB/s 的速率完成 ( 1/0.238322 )。
相应的 jerasure 技术是 cauchy_good,具有 **3072** 的包大小
--parameter erasure-code-packetsize=3072 --parameter erasure-code-technique=cauchy_good
在 分析 单个调用并减少迭代次数,从 1024 减少到 10,因为 valgrind 会使运行速度显著降低
valgrind --tool=callgrind src/ceph_erasure_code_benchmark --plugin jerasure --workload encode --iterations 10 --size 1048576 --parameter erasure-code-k=6 --parameter erasure-code-m=2 --parameter erasure-code-directory=.libs --parameter erasure-code-technique=cauchy_good --parameter erasure-code-packetsize=3072
显示 97% 的时间都花在 查找表 中。