使用SPDK加解密特性
本特性在SPDK bdev层使能crypto特性,并通过openssl进行加解密,并可选择KAE引擎进行加解密卸载以提升加解密性能或降低CPU消耗,当前版本支持的加密算法包括对称加密算法AES_CBC,AES_CTR,SM4_CBC,SM4_CTR以及非对称加密算法RSA。
- 分配大页内存。
请根据实际需求进行分配,此处以分配40000个2MB的大页为例。
echo 0 >/sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages echo 20000 >/sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages echo 20000 >/sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages
- 启动SPDK进程。
./build/bin/nvmf_tgt --wait-for-rpc
- 设置加密驱动为openssl。
./scripts/rpc.py bdev_crypto_set_driver -d crypto_openssl
- (可选)设置openssl引擎为KAE。
./scripts/rpc.py bdev_cryptodev_set_engine -e crypto_engine_kae
- 初始化程序框架。
./scripts/rpc.py framework_start_init
- 创建加密盘,以下针对当前版本支持的加密算法分别给出示例,可根据实际使用场景选择需要的加密算法并创建对应的加密盘。
创建AES_CBC加密盘。
针对具体命令可通过-h或spdk官方文档获取使用方法。
[root@ceph1 spdk]# ./scripts/rpc.py bdev_aio_create -h usage: rpc.py [options] bdev_aio_create [-h] filename name [block_size] positional arguments: filename Path to device or file (ex: /dev/sda) name Block device name block_size Block size for this bdev optional arguments: -h, --help show this help message and exit
./scripts/rpc.py bdev_aio_create /dev/sda sda ./scripts/rpc.py bdev_crypto_create sda crypto_aes_cbc crypto_openssl 0123456789123456 -c AES_CBC
创建AES_CTR加密盘。
./scripts/rpc.py bdev_aio_create /dev/sdb sdb ./scripts/rpc.py bdev_crypto_create sdb crypto_aes_ctr crypto_openssl 0123456789123456 -c AES_CTR
创建SM4_CBC加密盘。
./scripts/rpc.py bdev_aio_create /dev/sdc sdc ./scripts/rpc.py bdev_crypto_create sdc crypto_sm4_cbc crypto_openssl 0123456789123456 -c SM4_CBC
创建SM4_CTR加密盘。
./scripts/rpc.py bdev_aio_create /dev/sdd sdd ./scripts/rpc.py bdev_crypto_create sdd crypto_sm4_ctr crypto_openssl 0123456789123456 -c SM4_CTR
创建非对称加密盘需要先创建rsa密钥,当前版本仅支持4096的rsa密钥。
openssl genrsa -out prikey.pem 4096
以CRT模式创建RSA加密盘。
./scripts/rpc.py bdev_aio_create /dev/sde sde ./scripts/rpc.py bdev_crypto_create sde crypto_rsa_crt crypto_openssl prikey.pem -c RSA -k2 CRT
以NED模式创建RSA加密盘。
./scripts/rpc.py bdev_aio_create /dev/sdf sdf ./scripts/rpc.py bdev_crypto_create sdf crypto_rsa_ned crypto_openssl prikey.pem -c RSA -k2 NED
- 挂载nvme。
本步骤以步骤6创建的crypto_aes_cbc 为例进行挂载nvme的操作。
针对具体命令可通过-h或spdk官方文档获取使用方法。
[root@ceph1 spdk]# ./scripts/rpc.py nvmf_create_subsystem -h usage: rpc.py [options] nvmf_create_subsystem [-h] [-t TGT_NAME] [-s SERIAL_NUMBER] [-d MODEL_NUMBER] [-a] [-m MAX_NAMESPACES] [-r] nqn positional arguments: nqn Subsystem NQN (ASCII) optional arguments: -h, --help show this help message and exit -t TGT_NAME, --tgt_name TGT_NAME The name of the parent NVMe-oF target (optional) -s SERIAL_NUMBER, --serial-number SERIAL_NUMBER Format: 'sn' etc Example: 'SPDK00000000000001' -d MODEL_NUMBER, --model-number MODEL_NUMBER Format: 'mn' etc Example: 'SPDK Controller' -a, --allow-any-host Allow any host to connect (don't enforce allowed host NQN list) -m MAX_NAMESPACES, --max-namespaces MAX_NAMESPACES Maximum number of namespaces allowed -r, --ana-reporting Enable ANA reporting feature
./scripts/rpc.py nvmf_create_transport -t TCP -u 16384 -m 8 -c 8192 ./scripts/rpc.py nvmf_create_subsystem nqn.2024-08.io.spdk:crypto_aes_cbc -a -s SPDK00000000000001 -d SPDK_Controller1 ./scripts/rpc.py nvmf_subsystem_add_ns nqn.2024-08.io.spdk:crypto_aes_cbc crypto_aes_cbc ./scripts/rpc.py nvmf_subsystem_add_listener nqn.2024-08.io.spdk:crypto_aes_cbc -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.2024-08.io.spdk:crypto_aes_cbc" -a 90.90.82.112 -s 4420 -g -G
- 读写测试。
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 -verify=pattern -do_verify=1 fio -filename=/dev/nvme0n1 -direct=1 -iodepth=64 -thread -rw=randread -ioengine=libaio -bs=4k -size=10G -numjobs=1 -group_reporting -name=mytest --verify_pattern=0x12345678 -verify=pattern -do_verify=1
父主题: 特性使用