searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

spdk vhost使用指南

2023-05-26 03:33:24
152
0

spdk vhost-user配置

编译spdk

1. 安装依赖

scripts/pkgdep.sh
# 可以通过'--all'参数安装所有依赖
scripts/pkgdep.sh --all

2. 编译spdk

./configure
# 如果要使用rbd类型的bdev,那么需要提前安装好librbd-devel并执行
./configure --with-rbd
# 如果需要使用rdma通信,那么需要执行
./configure --with-rdma
# configure完成后,执行
make
# build结束后,可通过ut检验build是否成功
./test/unit/unittest.sh
 
如果需要调试dpdk的代码,那么需要将dpdk编译为debug版本。方法:
在dpdkbuild/Makefile中加上
DPDK_CFLAGS += -g

3. 运行spdk的准备工作

运行前需要分配大页内存,先尝试执行
./dpdk/usertools/dpdk-hugepages.py
若执行helloworld仍然失败,那么可按照如下步骤准备大页内存
# 安装大页内存软件
yum install libhugetlbfs libhugetlbfs-devel
# 配置grub,以后启动服务器自动分配
vim /etc/default/grub
# 大页内存每页大小为2M,一共设置1024页面,即2GB
GRUB_CMDLINE_LINUX="transparent_hugepage=never default_hugepagesz=2M hugepagesz=2M hugepages=1024 "
# 重新生成grub.cfg
grub-mkconfig -o /boot/grub/grub.cfg
# 重启后查看
cat /proc/meminfo |grep -i Huge




AnonHugePages: 0 kB
ShmemHugePages: 0 kB
FileHugePages: 0 kB
HugePages_Total: 1024
HugePages_Free: 1021
HugePages_Rsvd: 61
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 2097152 kB
# 大页内存需要挂载后使用,挂载点可自行定义,一般推荐挂载在/dev/hugepages上
mount -t hugetlbfs hugetlbfs /dev/hugepages
# 为了方便以后开机自动挂载,可编辑/etc/fstab
hugetlbfs /dev/hugepages hugetlbfs defaults 0 0
# 如果需要给虚拟机使用,那么还要配置以下参数
sysctl vm.nr_hugepages=1024
```
也可以通过spdk提供的工具分配大页内存,但是这种方式分配的内存在重启后需要重新分配
```
# 默认分配2048MB内存
./scripts/setup.sh
# 可手动指定分配的大小
HUGEMEM=4096 ./scripts/setup.sh

vhost的使用

大页内存准备好后,可以启动vhost
# 表示spdk.sock文件创建在/var/tmp目录,程序使用CPU0/CPU1
build/bin/vhost -S /var/tmp -m 0x3
# 若需要从配置文件中加载vhost,可执行
build/bin/vhost -S /var/tmp -m 0x3 -c vhost.json
# 配置文件的生成,亦可通过spdkcli工具进行交互式保存
./scripts/rpc.py save_config > config.json
创建bdev
# 创建内存型bdev,大小为64MB,sector为512字节,名称为Malloc0
scripts/rpc.py bdev_malloc_create 64 512 -b Malloc0
# 创建rbd类型的bdev,rbd名称为qemu-test,sector大小为512字节,名称自动生成为Ceph0
./scripts/rpc.py bdev_rbd_create rbd qemu-test 512
# 获取所有bdev
./scripts/rpc.py bdev_get_bdevs
创建vhost controller
# 在CPU0上创建vhost-blk controller,创建/var/tmp/vhost.0,使用名为Ceph0的bdev
./scripts/rpc.py vhost_create_blk_controller --cpumask 0x1 vhost.0 Ceph0
# 在CPU0上创建vhost-scsi controller,创建/var/tmp/vhost.0
./scripts/rpc.py vhost_create_scsi_controller --cpumask 0x1 vhost.0
# 在vhost.0对应的controller上添加名为Malloc0的bdev,其ID为0
./scripts/rpc.py vhost_scsi_controller_add_target vhost.0 0 Malloc0
# 查看所有的controller
./scripts/rpc.py vhost_get_controllers
:rbd类型的bdev可以设置所有bdev共享同一个rados client或者使用各自独立的client(默认为独立),具体可参考<https://spdk.io/doc/bdev.html>
如果libvirt涉及到使用大页内存,那么大页内存修改后,如果仍然报错,可尝试systemctl restart libvirtd
注意,需要把vhost节点的selinux关闭,否则虚机连接vhost unix socket的时候会报permission denied的错误
0条评论
0 / 1000