使用SPDK CRC特性
SPDK中自带isal-crc32c与isal-crc16算法,在spdk21.01.1-for-KAE分支中,引入了华为自研的ksal-crc算法,自研的ksal-crc算法相较于isal2.29版本的crc算法有20% 以上的性能提升。本章节主要介绍在SPDK中如何对ksal-crc进行性能测试和系统测试。
性能测试
- 要使用ksal-crc模式算法,在编译SPDK的步骤7中,需要配置编译选项 --with-ksal, 然后执行make -j 进行编译。
- 在单元测试中验证ksal-crc16性能,进入SPDK中的crc16单元测试模块,执行crc16_ut可执行程序进行验证。
cd /home/spdk/test/unit/lib/util/crc16.c/ ./crc16_ut
执行./crc16_ut 默认取大小为4k的数据块进行100000次的crc16计算,然后取平均值,由于crc的计算非常快,以ns为单位才能统计到一次的计算时间,因此需要多取几次计算平均值才能得到一个较为稳定正确的数值。在执行中也可以指定块的大小、计算的次数、以及验证校验和(计算结果是否正确)。具体如何指定可执行 ./crc16_ut -h 查看。
- 在单元测试中验证ksal-crc32c性能,进入SPDK中的crc32c单元测试模块,执行crc32c_ut可执行程序进行验证。
cd /home/spdk/test/unit/lib/util/crc32c.c/ ./crc32c_ut
- 切换环境模式为isal,进入spdk目录,配置编译选项--without-ksal,然后执行make -j 进行编译。
cd /home/spdk ./configure --with-crypto --with-reduce --without-ksal --with-crypto_openssl make -j
- 执行2与3进行isal-crc16与crc32c性能验证
系统测试
- 启动SPDK进程。
./build/bin/nvmf_tgt --wait-for-rpc
- 初始化程序框架。
./scripts/rpc.py framework_start_init
- 创建测试盘。
./scripts/rpc.py bdev_aio_create /dev/sda sda ./scripts/rpc.py bdev_crypto_create sda crypto crypto_openssl 0123456789123456 -c AES_CBC
此处创建了一块加解密的bdev盘,也可以创建其他的bdev盘进行测试。
- 创建nvme盘然后挂载到系统上。
./scripts/rpc.py nvmf_create_transport -t TCP -u 16384 -m 8 -c 8192 ./scripts/rpc.py nvmf_create_subsystem nqn.2016-06.io.spdk:cnode2 -a -s SPDK00000000000001 -d SPDK_Controller1 ./scripts/rpc.py nvmf_subsystem_add_ns nqn.2016-06.io.spdk:cnode2 crypto ./scripts/rpc.py nvmf_subsystem_add_listener nqn.2016-06.io.spdk:cnode2 -t TCP -a 90.90.82.112 -s 4420 nvme discover -t tcp -a 90.90.82.112 -s 4420 nvme connect -t tcp -n "nqn.2016-06.io.spdk:cnode2" -a 90.90.82.112 -s 4420 -g -G
- 利用fio工具对挂载的nvme盘进行读写测试。
fio -filename=/dev/nvme0n1 -direct=1 -iodepth=64 -thread -rw=randwrite -ioengine=libaio -bs=4k -size=10G -numjobs=1 -group_reporting -name=mytest --verify_pattern=0x12345678
此处fio下发的读写数据是通过NVMe-oF协议与nvme盘进行传输的。在SPDK中,NVMe-oF协议会对传输的每个数据单元(pdu)进行校验,采用的就是crc算法,因此每次io操作都会进行一次crc计算。判断ksal-crc是否使能,在执行fio操作的过程中,可通过perf工具抓取SPDK进程的函数热点信息。然后在函数热点信息中查找是否有KsalCrc32c函数,如果存在该函数则说明ksal-crc使能成功。
父主题: 特性使用