浅析DPDK驱动管理:vhost

2024-02-17 21:36
文章标签 驱动 管理 浅析 dpdk vhost

本文主要是介绍浅析DPDK驱动管理:vhost,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 概述
    • DPDK vhost工作机制
      • DPDK vhost工作模式
    • DPDK vhost管理结构
    • DPDK vhost接口
      • 注册vhost驱动:rte_vhost_driver_register
      • 启动vhost:rte_vhost_driver_start
        • vhost消息处理
    • 相关参考

概述

DPDK提供了一套vhost库,用于加速virtio后端,对比于内核态的vhost方案,由于DPDK vhost是在用户态空间实现,因而也称作vhost-user。

DPDK vhost工作机制

DPDK vhost方案的核心是将数据面的处理放到用户空间中,而控制面的逻辑则通过Unix域套接字进行配置。DPDK vhost的整体框架如下:
在这里插入图片描述

DPDK应用程序作为单独的进程运行在宿主机上,通过Unix domain socket与QEMU完成设备控制信息的交互,包括设备属性、功能以及virtqueue配置等。virtio设备的模拟仍然由QEMU处理;在完成virtio设备的配置后,DPDK应用程序会以轮询的方式从VM的virtqueue中获得请求并进行处理。

DPDK vhost工作模式

DPDK vhost使用UNIX域套接字传输控制消息,根据vhost是作为server或client运行,vhost-user支持两种配置模式:

  • vhost-user:vhost-user作为服务端运行,创建Unix域套接字服务文件,并监听来自前端的连接。这是最初vhost-user支持的模式,但存在一旦DPDK业务进程挂掉,就会对所有VM造成影响;
  • vhost-user-client:vhost-user作为客户端运行,由DPDK业务进程负责发起对服务端的连接。

DPDK vhost管理结构

DPDK vhost核心数据结构关联如下:
在这里插入图片描述

其中:

  • vhost_user:vhost-user全局管理结构,维护所有vhost驱动
  • vhost_user_socket:对于每个vhost驱动,都维护着一个Unix domain socket,负责与外部应用进行通信;
  • vhost_user_connection:

DPDK vhost接口

DPDK本身提供的是一套vhost库接口,由上层应用通过调用对应的接口实现特定的vhost驱动,目前已有的实现包括DPDK自带的vhost-net驱动、SPDK基于DPDK vhost接口实现的vhost-blk和vhost-scsi驱动等。DPDK vhost提供的几个关键接口如下:

  • rte_vhost_driver_register:注册vhost驱动;
  • rte_vhost_driver_set_features:设置vhost驱动的feature信息;
  • rte_vhost_driver_callback_register:注册vhost驱动特定的回调,由vhost-user在合适的流程中进行调用;
  • rte_vhost_driver_start:启动vhost;
  • rte_vhost_enqueue_burst:从Host向Guest传输数据;
  • rte_vhost_dequeue_burst:从身体Guest接收数据。

注册vhost驱动:rte_vhost_driver_register

在这里插入图片描述

启动vhost:rte_vhost_driver_start

在这里插入图片描述

vhost消息处理

vhost_user_read_cb负责接收Unix domain socket的消息,并进行处理。
在这里插入图片描述

相关参考

  • Vhost Library

这篇关于浅析DPDK驱动管理:vhost的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/719052

相关文章

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

Python中bisect_left 函数实现高效插入与有序列表管理

《Python中bisect_left函数实现高效插入与有序列表管理》Python的bisect_left函数通过二分查找高效定位有序列表插入位置,与bisect_right的区别在于处理重复元素时... 目录一、bisect_left 基本介绍1.1 函数定义1.2 核心功能二、bisect_left 与

Spring中管理bean对象的方式(专业级说明)

《Spring中管理bean对象的方式(专业级说明)》在Spring框架中,Bean的管理是核心功能,主要通过IoC(控制反转)容器实现,下面给大家介绍Spring中管理bean对象的方式,感兴趣的朋... 目录1.Bean的声明与注册1.1 基于XML配置1.2 基于注解(主流方式)1.3 基于Java

基于Python+PyQt5打造一个跨平台Emoji表情管理神器

《基于Python+PyQt5打造一个跨平台Emoji表情管理神器》在当今数字化社交时代,Emoji已成为全球通用的视觉语言,本文主要为大家详细介绍了如何使用Python和PyQt5开发一个功能全面的... 目录概述功能特性1. 全量Emoji集合2. 智能搜索系统3. 高效交互设计4. 现代化UI展示效果

Mysql中的用户管理实践

《Mysql中的用户管理实践》:本文主要介绍Mysql中的用户管理实践,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录13. 用户管理13.1 用户 13.1.1 用户信息 13.1.2 创建用户 13.1.3 删除用户 13.1.4 修改用户

linux服务之NIS账户管理服务方式

《linux服务之NIS账户管理服务方式》:本文主要介绍linux服务之NIS账户管理服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、所需要的软件二、服务器配置1、安装 NIS 服务2、设定 NIS 的域名 (NIS domain name)3、修改主

浅析Java如何保护敏感数据

《浅析Java如何保护敏感数据》在当今数字化时代,数据安全成为了软件开发中至关重要的课题,本文将深入探讨Java安全领域,聚焦于敏感数据保护的策略与实践,感兴趣的小伙伴可以了解下... 目录一、Java 安全的重要性二、敏感数据加密技术(一)对称加密(二)非对称加密三、敏感数据的访问控制(一)基于角色的访问

如何在Ubuntu上安装NVIDIA显卡驱动? Ubuntu安装英伟达显卡驱动教程

《如何在Ubuntu上安装NVIDIA显卡驱动?Ubuntu安装英伟达显卡驱动教程》Windows系统不同,Linux系统通常不会自动安装专有显卡驱动,今天我们就来看看Ubuntu系统安装英伟达显卡... 对于使用NVIDIA显卡的Ubuntu用户来说,正确安装显卡驱动是获得最佳图形性能的关键。与Windo

Python+PyQt5开发一个Windows电脑启动项管理神器

《Python+PyQt5开发一个Windows电脑启动项管理神器》:本文主要介绍如何使用PyQt5开发一款颜值与功能并存的Windows启动项管理工具,不仅能查看/删除现有启动项,还能智能添加新... 目录开篇:为什么我们需要启动项管理工具功能全景图核心技术解析1. Windows注册表操作2. 启动文件

嵌入式Linux之使用设备树驱动GPIO的实现方式

《嵌入式Linux之使用设备树驱动GPIO的实现方式》:本文主要介绍嵌入式Linux之使用设备树驱动GPIO的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、设备树配置1.1 添加 pinctrl 节点1.2 添加 LED 设备节点二、编写驱动程序2.1