virtio split ctrl virtqueue
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相关推荐
- virtio系列-packed virtqueue
virtio packed virtqueue spilt virtqueue因其简约的设计而备受欢迎,但是它有一个基本的问题:avail, used ring 是分离的,cpu cache miss ...
- virtio vring原理
文章目录 vring原理 Virtqueues Descriptor Table Available Ring Used Ring vring数据结构 vring_virtqueue vring_vi ...
- Virtio: An I/O virtualization framework for Linux | 原文
<Virtio: An I/O virtualization framework for Linux> <KVM Virtio: An I/O virtualization fram ...
- Virtio原理简介
目录 Virtio规范简介 相关数据结构 Vring机制简介 相关文章 实现IO虚拟化主要有三种方式:全虚拟化.半虚拟化和透传.全虚拟化Guest OS不会感知到自己是虚拟机,也无需修改Guest O ...
- Linux虚拟化:Virtio: 一个 I/O 虚拟化框架
<Virtio: An I/O virtualization framework for Linux> 目录 什么是 virtio# 为什么是 virtio# virtio 的架构# vi ...
- Linux虚拟化KVM-Qemu分析(九)之virtio设备
目录 1. 概述 2. 流程分析 3. tap创建 - 网卡后端设备 4. virtio-net创建 4.1 数据结构 4.2 流程分析 4.2.1 class_init 4.2.2 instance ...
- VIRTIO PCI 设备
Virtio的代码主要分两个部分:QEMU和内核驱动程序.Virtio设备的模拟就是通过QEMU完成的,QEMU代码在虚拟机启动之前,创建虚拟设备.虚拟机启动后检测到设备,调用内核的virtio设备驱 ...
- 网络虚拟化——virtio
前言 在上一篇文章(网络虚拟化--QEMU虚拟网卡)中,讨论了经典的网络设备全虚拟化技术.这种技术不需要guest内核对虚拟网络设备有任何的感知和特殊处理,但性能较差,一次读写操作可能会产生多次需要H ...
- DPDK vhost-user研究(十三)
本文会重点讨论下vhost pmd和lib库中的api如何使用. 在前面的章节中描述过virtio-net设备的生命周期包括设备创建.配置.服务启动和设备销毁几个阶段. 我们先回忆下整个生命周期: 设 ...
最新文章
- android 不重新加载,android – 返回Activity而不重新创建(不调用onCreate())
- 写代码时发现......还得是 SpringBoot !一篇拿下
- html5摒弃的标记,全新改进的HTML5表单创建
- Markdown:数学公式(4)
- 《Python3网络爬虫开发实战(第二版)》上市了!!!!
- 今天网站都变成灰色了,这其中是怎么实现的?
- linux nfs 无法写入,无法写入挂载点(nfs-server),获得“权限被拒绝”
- Extjs TextField扩展
- python哪个版本支持xp_windows支持哪个版本的python
- Selenium之利用Excel实现参数化
- Java项目——Everything 开发思路
- instagram授权流程(第二篇)
- 肠道菌群失衡的症状、原因和自然改善
- 洛谷B2099 矩阵交换行(swap函数)
- 推荐一款免费的内网穿透工具ngrok
- web前端知识总结二(css(其他)+移动web网页开发)
- 不建议轻易做量化玩高频
- C++指针详解2_typedef函数声明类型、sizeof特性简介与数组指针间关系说明
- 网页html通过隐藏域传送数据给web服务器
- c++QT笔记,windows毛玻璃窗口实现封装