一、前言
CRC32(A cyclic redundancy check 32)应用于校验,为了保证数据的正确性,采用的一种检错手段。
CRC32C (CRC32 Castagnoli) 与 CRC32 不同的是它有多项式常数,也就是说生成的CRC表不同,而算法是一模一样.
二、内容
1. Ceph的当前版本nautilus(v14.2.2) 和 Ceph的master 分支中包含的 RocksDB engine(该RocksDB是RocksDB v5.17.2 )不支持 aarch64优化 CRC32C 指令。而最新的RocksDB 分支master branch已经支持aarch64优化 CRC32C 指令,也就是RocksDB v6.1.2以后的版本都支持aarch64优化 CRC32C 指令。在Ceph issue tracker 系统里已经有一个feature # bluestore/rocksdb: aarch64 optimized crc32c instructions support 来跟踪这个问题了。等这个feature close,Ceph包含的RocksDB engine就支持ARM 64 位 CRC32C 硬件优化指令了。
2. 那么怎么知道自己的ARM server 服务器支不支持CRC32C 硬件指令呢?直接查看/proc/cpuinfo的Features项即可,它支持了crc32,如下:
$ cat /proc/cpuinfo |more
processor : 0
BogoMIPS : 400.00
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics cpuid asimdrdm
CPU implementer : 0x43
CPU architecture: 8
CPU variant : 0x1
CPU part : 0x0af
CPU revision : 1