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

vhost-user简介

2024-01-02 09:05:23
107
0

半虚拟化设备(virtio device)在当前云计算虚拟化场景下已经得到了非常广泛的应用,并且现在也有越来越多的物理设备也开始支持virtio协议,即所谓的virtio offload,通过将virtio协议卸载到硬件上(例如virtio-net网卡卸载,virtio-scsi卸载)让物理机和虚拟机都能够获得加速体验。本文中我们来重点了解一下vhost-user技术中的一些关键点。

dpdk的vhost-user库

vhost-user协议主要是由dpdk的vhost-user库实现。dpdk的巨大优势之一是带来了OpenvSwitch(OVS-DPDK)的性能提升。通过集成ovs与dpdk,快速路径同样在用户领域,最大限度地减少了内核与用户领域的交互,并充分利用了dpdk提供的高性能。结果是与原始ovs相比,使用dpdk的ovs性能提高了约10倍。

vhost协议重要机制

vhost协议是一组消息传递机制,旨在将virtio数据路径处理从qemu卸载到外部元素(配置virtio环并进行实际的数据包处理的处理程序),最重要的机制是:

1、一组消息,允许qemu将virtqueue的内存布局和配置发送到处理程序。

2、一对eventfd类型的文件描述符,允许客户机绕过qemu,并直接向处理程序发送通知或从处理程序接收通知:Available Buffer通知(从客户机发送至处理程序以指示有准备好处理的缓冲区)和Used Buffer通知(从处理程序发送给客户机以指示其已完成对缓冲区的处理)

vhost-user和vhost-net内核驱动程序之间的主要区别是通信通道。vhost-net内核驱动程序使用ioctl实现此通道,vhost-user库定义了通过unix套接字发送的消息结构。

可以将dpdk应用程序配置为提供unix套接字(服务器模式)并使qemu连接到它(客户端模式),但是相反的情况也是可能的,这允许dpdk重新启动而无需重新启动VM。

在此套接字上,所有请求均由qemu发起,其中一些请求需要响应,例如GET_FEATURES请求或任何设置了REPLY_ACK位的请求。

可配置的数据面功能

vhost-user库允许控制面通过执行以下重要操作来配置数据平面卸载:

1.功能协商:virtio功能和特定vhost-user的功能都以类似的方式协商:首先,qemu“获取”处理程序支持的功能的位掩码,然后“设置”其与自身支持功能的子集。

2.内存区域配置:qemu设置内存映射区域,以便处理程序可以对它们进行mmap()。

3.vring配置:qemu设置要使用的虚拟队列数量及其在内存区域中的地址。请注意,vhost-user支持多队列,因此可以配置多个虚拟队列以提高性能。

4.发送KICK和CALL文件描述符:通常使用irqfd和ioeventfd机制。

由于这种机制,dpdk应用程序现在可以通过与客户机共享内存区来处理数据包,并且可以直接与客户机之间发送和接收通知,而无需qemu干预。

qemu的virtio设备模型

将ovs-dpdk、前端驱动结合在一起的最后一个元素是qemu的virtio设备模型。
它具有两个主要任务:

1、它模拟了一个virtio设备,该设备显示在客户机的特定PCI端口中,客户机可对该端口进行无缝探测和配置,此外,它还将ioeventfd映射到模拟设备的内存映射I/O空间,并将irqfd映射到它的全局系统中断(Global System Interrupt,GSI)。结果是,客户机没有意识到在没有qemu干预的情况下,通知和中断都在vhost-user库之间来回转发。

2、它没有实现实际的virtio数据路径,而是在vhost-user协议中充当卸载数据处理的角色,将卸载该处理工作到DPDK流程中的vhost-user库中。

3、它处理来自控制虚拟队列的请求,在某些情况下,将其转换为虚拟主机用户请求并转发给vhost-user后端。

下图显示了作为DPDK-APP(OVS-DPDK)的一部分运行的虚拟主机用户如何使用virtio-device-model和virtio-pci设备与qemu和客户机进行交互:

《摘自A journey to the vhost-users realm》

几个要点:
1、virtio内存区域最初是由客户机分配的。

2、相应的virtio驱动程序通常通过virtio规范中定义的PCI BARs配置接口与virtio设备进行交互。

3、virtio-device-model(位于QEMU内部)使用vhost-user协议配置vhost-user库,以及设置irqfd和ioeventfd文件描述符。

4、客户机分配的virtio内存区域由vhost用户库(即DPDK应用程序)映射(使用mmap 系统调用)。

5、结果是,DPDK应用程序可以直接在客户机内存中读取和写入数据包,并使用irqfd和ioeventfd机制直接对客户机发出通知。

参考

1、A journey to the vhost-users realm

https://www.redhat.com/en/blog/journey-vhost-users-realm

0条评论
作者已关闭评论
高****斌
1文章数
0粉丝数
高****斌
1 文章 | 0 粉丝
高****斌
1文章数
0粉丝数
高****斌
1 文章 | 0 粉丝
原创

vhost-user简介

2024-01-02 09:05:23
107
0

半虚拟化设备(virtio device)在当前云计算虚拟化场景下已经得到了非常广泛的应用,并且现在也有越来越多的物理设备也开始支持virtio协议,即所谓的virtio offload,通过将virtio协议卸载到硬件上(例如virtio-net网卡卸载,virtio-scsi卸载)让物理机和虚拟机都能够获得加速体验。本文中我们来重点了解一下vhost-user技术中的一些关键点。

dpdk的vhost-user库

vhost-user协议主要是由dpdk的vhost-user库实现。dpdk的巨大优势之一是带来了OpenvSwitch(OVS-DPDK)的性能提升。通过集成ovs与dpdk,快速路径同样在用户领域,最大限度地减少了内核与用户领域的交互,并充分利用了dpdk提供的高性能。结果是与原始ovs相比,使用dpdk的ovs性能提高了约10倍。

vhost协议重要机制

vhost协议是一组消息传递机制,旨在将virtio数据路径处理从qemu卸载到外部元素(配置virtio环并进行实际的数据包处理的处理程序),最重要的机制是:

1、一组消息,允许qemu将virtqueue的内存布局和配置发送到处理程序。

2、一对eventfd类型的文件描述符,允许客户机绕过qemu,并直接向处理程序发送通知或从处理程序接收通知:Available Buffer通知(从客户机发送至处理程序以指示有准备好处理的缓冲区)和Used Buffer通知(从处理程序发送给客户机以指示其已完成对缓冲区的处理)

vhost-user和vhost-net内核驱动程序之间的主要区别是通信通道。vhost-net内核驱动程序使用ioctl实现此通道,vhost-user库定义了通过unix套接字发送的消息结构。

可以将dpdk应用程序配置为提供unix套接字(服务器模式)并使qemu连接到它(客户端模式),但是相反的情况也是可能的,这允许dpdk重新启动而无需重新启动VM。

在此套接字上,所有请求均由qemu发起,其中一些请求需要响应,例如GET_FEATURES请求或任何设置了REPLY_ACK位的请求。

可配置的数据面功能

vhost-user库允许控制面通过执行以下重要操作来配置数据平面卸载:

1.功能协商:virtio功能和特定vhost-user的功能都以类似的方式协商:首先,qemu“获取”处理程序支持的功能的位掩码,然后“设置”其与自身支持功能的子集。

2.内存区域配置:qemu设置内存映射区域,以便处理程序可以对它们进行mmap()。

3.vring配置:qemu设置要使用的虚拟队列数量及其在内存区域中的地址。请注意,vhost-user支持多队列,因此可以配置多个虚拟队列以提高性能。

4.发送KICK和CALL文件描述符:通常使用irqfd和ioeventfd机制。

由于这种机制,dpdk应用程序现在可以通过与客户机共享内存区来处理数据包,并且可以直接与客户机之间发送和接收通知,而无需qemu干预。

qemu的virtio设备模型

将ovs-dpdk、前端驱动结合在一起的最后一个元素是qemu的virtio设备模型。
它具有两个主要任务:

1、它模拟了一个virtio设备,该设备显示在客户机的特定PCI端口中,客户机可对该端口进行无缝探测和配置,此外,它还将ioeventfd映射到模拟设备的内存映射I/O空间,并将irqfd映射到它的全局系统中断(Global System Interrupt,GSI)。结果是,客户机没有意识到在没有qemu干预的情况下,通知和中断都在vhost-user库之间来回转发。

2、它没有实现实际的virtio数据路径,而是在vhost-user协议中充当卸载数据处理的角色,将卸载该处理工作到DPDK流程中的vhost-user库中。

3、它处理来自控制虚拟队列的请求,在某些情况下,将其转换为虚拟主机用户请求并转发给vhost-user后端。

下图显示了作为DPDK-APP(OVS-DPDK)的一部分运行的虚拟主机用户如何使用virtio-device-model和virtio-pci设备与qemu和客户机进行交互:

《摘自A journey to the vhost-users realm》

几个要点:
1、virtio内存区域最初是由客户机分配的。

2、相应的virtio驱动程序通常通过virtio规范中定义的PCI BARs配置接口与virtio设备进行交互。

3、virtio-device-model(位于QEMU内部)使用vhost-user协议配置vhost-user库,以及设置irqfd和ioeventfd文件描述符。

4、客户机分配的virtio内存区域由vhost用户库(即DPDK应用程序)映射(使用mmap 系统调用)。

5、结果是,DPDK应用程序可以直接在客户机内存中读取和写入数据包,并使用irqfd和ioeventfd机制直接对客户机发出通知。

参考

1、A journey to the vhost-users realm

https://www.redhat.com/en/blog/journey-vhost-users-realm

文章来自个人专栏
网络前后端
1 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0