前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用mellanox DPU实现裸金属服务器

用mellanox DPU实现裸金属服务器

作者头像
惠伟
发布2022-04-28 17:51:35
4.1K0
发布2022-04-28 17:51:35
举报
文章被收录于专栏:虚拟化笔记虚拟化笔记

DPU实现裸金属

DPU就是在cx6的基础上加上了arm cpu,arm可以运行原来计算节点上那些组件。好处就是可以给裸金属动态添加/删除网卡和硬盘,网卡能接入vxlan vpc,硬盘能对接后端ceph,而且能统一虚拟机和裸金属,DPU就是一台计算节点,DPU就是hypervisor,能最大程度复用虚拟机流程,并且比ironic简单很多。

概念

  • InfiniBand和Ethernet

两种传输协议,mellanox的卡即可以工作于InfiniBand模式也可以工作于Ethernet模式。

  • RDMA

一种传输协议,可以基于InfiniBand,也可以基于Ethernet,也就是RCOE(RDMA over Converged Ethernet)

  • NVMe-oF

nvme是一种存储协议,over Fabrics就是nvme不在本地存在,需要在fabric上传输,fabric可以是TCP也可以是RDMA

  • PF/VF/SF

https://github.com/Mellanox/scalablefunctions/wiki

https://docs.nvidia.com/doca/sdk/scalable-functions/index.html

  • representor

https://docs.nvidia.com/doca/sdk/vswitch-and-representors-model/index.html

PCI模拟和HOTPLUG

从裸金属上看DPU给裸金属模拟了很多pci bridge,然后再模拟出pci device (网卡和硬盘)hotplug到bridge下的bus。

DPU工作于ECPF模式,裸金属上能看到两个ConnectX-6 Dx网卡。

virtio-net网卡DPU上服务virtio-net-controller负责模拟。

virtio-blk和nvme由DPU上服务mlnx-snap负责模拟,snap有manager的概念,mlx5_0能模拟virtio_blk和nvme,mlx5_1/mlx5_2/mlx5_3只能模拟nvme。

如果在DPU卡用rdma dev看一下就会发现,一个rdam device就是一个emulation manager。

用其中一个emulation manager模拟一个pci device

裸金属上立马感知到64:00.0 hotplug

从DPU看PCI结构是这样的。

tmfifo_net0用于和裸金属通信。

oob_net0是带外管理。

p0和p1是两个representor,对应着DPU上看到的两个connectx-6 Dx,用于uplink连接交换机。

pf0hpf和pf0hpf是两个representor,对应着裸金属上看到的两个connectx-6 Dx卡。

p0m0和p1m0是配置文件/etc/mellanox/mlnx-sf.conf生成的两个sub function,支持RDMA,模拟nvme full offload,pf0sf0和pf1sf0是这两个subfunction的representor。

网络

virtio-net

在DPU上可以灵活给裸添加和删除virtio-net类型的网卡。 #添加一个virtio-net网卡,生成一个representor,把representor加到ovs桥上 virtnet hotplug -i mlx5_0 -f 0x0 -m 0C:C4:7A:FF:22:93 -t 1500 -n 3 -s 1024

裸金属上就多了一个virtio-net类型的网卡,裸金属上内核参数要配置pci=realloc,否则virtio-net内核模块识别不了这个网卡,镜像中得配置这个参数。

最后把这个representor加到ovs桥上,打开ovs offload功能,如果硬件流表命中,裸金属的流量就出DPU不经过arm,否则通过representor上送到arm,由arm软件转发,这就是ASAP技术。

pf和vf

DPU上执行如下命令,让裸金属能看到PF,这个PF并具有SRIOV功能,镜像中内置脚本打SRIOV功能打开。

mlxconfig -d /dev/mst/mt41686_pciconf0 s NUM_Of_PF=1

mlxconfig -d /dev/mst/mt41686_pciconf0 s SRIOV_EN=1

mlxconfig -d /dev/mst/mt41686_pciconf0 s NUM_OF_VFS=16

在DPU上通过目录/sys/class/net/p0/smart_nic/下pf和vf0等给pf和vf配置mac和qos限速等。

裸金属上pf和vf在DPU上分别有自己的representor,那就是pf0hpf和pf0vf0,需要把representor加到br-int桥,下vlan和vxlan的转换流表。

另一种选择就是不支持SRIOV,用户只有两个PF,估计也够用。

最佳选择

不用virtio-net,裸金属上能看到两个pf,这两个pf具有sriov功能,用户可以开启vf功能,和connetx-5给虚拟机用vf保持一致。

存储

SNAP是mellanox开发的DPU上的存储解决方案。

SNAP有Non-offload Mode和Full Offload Mode,offload就是硬件加速,存储不经过arm,Non-offload Mode支持virtio-blk和nvme,Full Offload Mode只支持nvme。

SNAP有有两个非常重要的概念controller和backend,类似于物理机器,一个或者少数几个controller,很多槽位可以插入很多硬盘,backend就是硬盘,

controller是处理存储协议的,backend是真正存入数据的,DPU上backend不是硬盘,是SPDK上抽象出来的bdev,在SPDK上创建bdev就相当于物理机理硬盘槽位上插入硬盘,

数据到了SPDK的bdev,再通过SPDK的driver落的本地或者远端真正的硬件上。

Non-offload Mode

nvme

#创建一个nvme device

snap_rpc.py emulation_device_attach mlx5_0 nvme

#创建一个nvme subsystem

snap_rpc.py subsystem_nvme_create nqn.2020-12.mlnx.snap "Mellanox_NVMe_SNAP" "Mellanox NVMe SNAP Controller"

#创建一个nvme controller snap_rpc.py controller_nvme_create nqn.2020-12.mlnx.snap mlx5_0 --pci_bdf 62:00.0 --nr_io_queues 32 --mdts 4

#创建一个spdk bdev

spdk_rpc.py bdev_null_create Snap1 200000 512

#把这个nvme controller和SPDK关联起来,执行这一步之后 裸金属写到硬盘里的数据就能被SPDK收到,并给这个nvme创建一个namespace

snap_rpc.py controller_nvme_namespace_attach -c NvmeEmu0pf1 spdk Snap1 1

#搞完这一切,host上就应该能看到一个nvme盘,并且有一个namespace。

virtio-blk

#spdk创建bdev Snap0

spdk_rpc.py bdev_null_create Snap0 100000 512

#创建一个device

snap_rpc.py emulation_device_attach --bdev_type spdk --bdev Snap0 mlx5_0 virtio_blk

#创建controller,把device加到这个controller上

snap_rpc.py controller_virtio_blk_create -d 61:00.0 --bdev_type spdk --bdev Snap0 mlx5_0

#此时裸金属上就能看到一个virtio-blk类型的硬盘

Full Offload Mode

只支持nvme-over-rdma-over-ethernet。只有控制经过arm,存储数据不经过arm,省CPU,软件只需要创建nvme subsystem和controller,并不需要再attach到bdev,

由硬件自动连接backend,需要把backend写到SNAP的配置文件中,保有后两个sf代表的emulation manager(mlx5_2和mlx5_3)才支持RDMA。

最佳选择

virtio-blk采用的协议不如nvme,而且DPU模拟的问题很多,优先选择nvme,选择offload不转换协议对接ceph,如果ceph不支持nvme转成iSCSI。

Full Offload Mode需要研究SPDK怎么对接ceph,硬件对nvme-over-rdma-over-ethernet怎么offload,ceph能不能搞定nvme协议。

Non-offloads Mode需要研究SPDK能不能把nvme转换成iSCSI对接ceph,ceph支持iSCSI,如何把nvme转换成iSCSI用spdk加librbd对接ceph。

最终要这这两种模型中选一种。

开发和部署工作

DPU DRIVER

开发DPU driver,作为nova-compute的一个driver,具有IPMI管理功能,比如收集硬件信息,修改启动项,开关机,vnc显示,如果后继DPU通过其它硬件手段能干这些事就不再需要IPMI。

DPU driver还能从neutron那儿获取到port信息,给裸金属添加/删除网卡。调用DPU上的virtio-net-controller生成virtio-net,一个virtio-net有一个对应的representor,nova-compute会把这个representor加到DPU上运行的OVS桥上,ovs-agent要能识别出这个representor,下vlan和vxlan的转换流表offload到硬件上,和CX5上一样。

DPU driver还要能从cinder那儿获取到volume信息,给裸金属添加/删除硬盘。调用SNAP生成模拟的virtio-blk或者nvme硬盘,然后配置SPDK,最后通过IPMI修改配置让裸金属从挂载的这个硬盘启动,这个盘是系统盘。

DPU上架和部署

通过OOB pxe给DPU安装操作系统,OOB上配置IP和控制节点通。两个cx6 bond4作变uplink,配合交换机smlag运行,分配一个ip作为vxlan vtep ip。

OOB和bond4可以合并,只用一个,就像bjzdt和bjpdc那样。

用kolla给DPU上部署openstack组件nova-compute/neutron-dhcp-agent/neutron-ovs-agent/neutron-l3-agent。

参考文档

《NVIDIA BlueField SNAP and virtio-blk SNAP Documentation》

https://docs.mellanox.com/display/MLNXOFEDv541030/NVIDIA+MLNX_OFED+Documentation+Rev+5.4-1.0.3.0

https://docs.mellanox.com/display/BlueFieldDPUOSv370/NVIDIA+BLUEFIELD+DPU+OPERATING+SYSTEM+v3.7+PLATFORM+DOCUMENTATION

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-07-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • DPU实现裸金属
  • 概念
  • PCI模拟和HOTPLUG
  • 网络
    • virtio-net
      • pf和vf
        • 最佳选择
        • 存储
          • Non-offload Mode
            • nvme
              • virtio-blk
                • Full Offload Mode
                  • 最佳选择
                  • 开发和部署工作
                  • DPU DRIVER
                  • DPU上架和部署
                  • 参考文档
                  相关产品与服务
                  对象存储
                  对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档