1、Split virtqueue

组成结构:

• Descriptor Table

• Available Ring

• Used Ring

数据结构:

Descriptor Table

Available Ring

Used Ring

Size & aligment方式:

注:queue size指每个virtqueue具备buffer的深度,queue size=descriptor table num,queue size大小会影响到virtqueue的性能,可以权衡资源和性能选择大小;不同于queue num,queue num表示virtqueue数量。

Split virtqueue一次数据传输的基本操作流程:

When the driver wants to send a buffer to the device, it fills in a slot in the descriptor table (or chains several together), and writes the descriptor index into the available ring. It then notifies the device. When the device has finished a buffer, it writes the descriptor index into the used ring, and sends an interrupt.

Figure 1: Driver writes a buffer in descriptor ring

Figure 2: Driver offers the buffer with avail ring

Figure 3: Device sees chained buffers

Figure 4: Device returns buffer chain

学习地址: Dpdk/网络协议栈/vpp/OvS/DDos/NFV/虚拟化/高性能专家-学习视频教程-腾讯课堂
更多DPDK相关学习资料有需要的可以自行报名学习,免费订阅,久学习,或点击这里加qun免费
领取,关注我持续更新哦! !

Descriptor head idx & avail idx计算方法:

2、Control q

control q的命令结构如下:

正常controlq操作会占用3个描述符,第一个描述符用来传输上图中的class & command,第二个描述符传输command-specific-data[],第三个描述符传输ack信号。

以controq 配置mvp为例:

ctrl_mq结构体如下:

可以看到对应:class=4;command=0来表示ctrl_mq的vq paris set。

ctrl mq配置总共5个字节,驱动分三次来操作,第一次传输class 和command 2个Byte,第二次传输data ,2个byte,就是mvp值,第三次传输ack,1个byte。

三次操作使用三个描述符,组成一个sgl。

原文链接:https://zhuanlan.zhihu.com/p/492959563

virtio split ctrl virtqueue相关推荐

  1. virtio系列-packed virtqueue

    virtio packed virtqueue spilt virtqueue因其简约的设计而备受欢迎,但是它有一个基本的问题:avail, used ring 是分离的,cpu cache miss ...

  2. virtio vring原理

    文章目录 vring原理 Virtqueues Descriptor Table Available Ring Used Ring vring数据结构 vring_virtqueue vring_vi ...

  3. Virtio: An I/O virtualization framework for Linux | 原文

    <Virtio: An I/O virtualization framework for Linux> <KVM Virtio: An I/O virtualization fram ...

  4. Virtio原理简介

    目录 Virtio规范简介 相关数据结构 Vring机制简介 相关文章 实现IO虚拟化主要有三种方式:全虚拟化.半虚拟化和透传.全虚拟化Guest OS不会感知到自己是虚拟机,也无需修改Guest O ...

  5. Linux虚拟化:Virtio: 一个 I/O 虚拟化框架

    <Virtio: An I/O virtualization framework for Linux> 目录 什么是 virtio# 为什么是 virtio# virtio 的架构# vi ...

  6. Linux虚拟化KVM-Qemu分析(九)之virtio设备

    目录 1. 概述 2. 流程分析 3. tap创建 - 网卡后端设备 4. virtio-net创建 4.1 数据结构 4.2 流程分析 4.2.1 class_init 4.2.2 instance ...

  7. VIRTIO PCI 设备

    Virtio的代码主要分两个部分:QEMU和内核驱动程序.Virtio设备的模拟就是通过QEMU完成的,QEMU代码在虚拟机启动之前,创建虚拟设备.虚拟机启动后检测到设备,调用内核的virtio设备驱 ...

  8. 网络虚拟化——virtio

    前言 在上一篇文章(网络虚拟化--QEMU虚拟网卡)中,讨论了经典的网络设备全虚拟化技术.这种技术不需要guest内核对虚拟网络设备有任何的感知和特殊处理,但性能较差,一次读写操作可能会产生多次需要H ...

  9. DPDK vhost-user研究(十三)

    本文会重点讨论下vhost pmd和lib库中的api如何使用. 在前面的章节中描述过virtio-net设备的生命周期包括设备创建.配置.服务启动和设备销毁几个阶段. 我们先回忆下整个生命周期: 设 ...

最新文章

  1. android 不重新加载,android – 返回Activity而不重新创建(不调用onCreate())
  2. 写代码时发现......还得是 SpringBoot !一篇拿下
  3. html5摒弃的标记,全新改进的HTML5表单创建
  4. Markdown:数学公式(4)
  5. 《Python3网络爬虫开发实战(第二版)》上市了!!!!
  6. 今天网站都变成灰色了,这其中是怎么实现的?
  7. linux nfs 无法写入,无法写入挂载点(nfs-server),获得“权限被拒绝”
  8. Extjs TextField扩展
  9. python哪个版本支持xp_windows支持哪个版本的python
  10. Selenium之利用Excel实现参数化
  11. Java项目——Everything 开发思路
  12. instagram授权流程(第二篇)
  13. 肠道菌群失衡的症状、原因和自然改善
  14. 洛谷B2099 矩阵交换行(swap函数)
  15. 推荐一款免费的内网穿透工具ngrok
  16. web前端知识总结二(css(其他)+移动web网页开发)
  17. 不建议轻易做量化玩高频
  18. C++指针详解2_typedef函数声明类型、sizeof特性简介与数组指针间关系说明
  19. 网页html通过隐藏域传送数据给web服务器
  20. c++QT笔记,windows毛玻璃窗口实现封装

热门文章

  1. uboot学习 0.1
  2. 搜索引擎的基本工作流程
  3. 秋菊打官司---菜农2012争名夺利
  4. 浙大 丨 PTA 习题2-2 阶梯电价 (15 分)
  5. BetterAndBetter 2.2.2 全局手势多功能软件
  6. 年少青春聊作狂,且作豪歌志四方
  7. 集成无线收发器8位RISC(精简指令集)MCU SOC芯片Ci2451
  8. C++ 使用 tinyxml2 解析创建 xml
  9. 前端,移动开发者,UI须懂: 不同设备的之间的尺寸
  10. linux 怎么查看内核日志,怎样查看Linux系统日志?