虚拟队列(Virtqueue)是连接guest操作系统中virtio前端驱动和宿主机vhostuser后端驱动的实际数据链路。网络设备有 2 个 virtqueue,一个用于发送数据包,一个用于接收数据包。

每个虚拟队列主要由三部分组成:

  • 描述符数组(descriptor table)用于存储一些关联的描述符,每个描述符都是一个对 buffer 的描述,包含一个address/length 的配对。
  • 可用的 ring(available ring)用于 guest 端表示那些描述符链当前是可用的。
  • 使用过的 ring(used ring)用于表示 Host 端表示那些描述符已经使用。

描述符列表指向实际要传输的数据,两个环表指向描述符列表,标记前端和后端驱动对描述符列表中的描述符处理进度。

当virtqueue用于发送报文时,前端驱动将待发送报文加入avail ring等待后端的处理,后端处理完后,会将其放入used ring,并由前端将其释放desc中,最后通过try_fill_recv重新装入avail ring中; 当virtqueue用于接收报文时,前端将空白物理块加入avail ring中,提供给后端用来接收报文,后端接收完报文会放入used ring。

整个收包流程如下:

  1. 前端填充好desc(addr/len),并更新vring->avail(ring[0])
  2. 后端读取avail ring索引,拿到desc(if ring[0]=2,then desctable[2] 记录的就是一个逻辑buffer的首个物理块的信息),填充buffer数据;将buffer索引存在desc,将desc索引存放在used ring中
  3. 前端读取used ring索引,找到desc,获取buffer数据

原文链接:https://www.pianshen.com/article/3940460016/

OVS DPDK--virtqueue(十七)相关推荐

  1. OVS DPDK vhost-user详解(十三)

    vhost user协议的控制和数据通道 所有的控制信息通过UNIX套接口(控制通道)交互.包括为进行直接内存访问而交换的内存映射信息,以及当数据填入virtio队列后需要出发的kick事件和中断信息 ...

  2. OVS DPDK与QEMU之间如何通过vhost user协议通信 vhost user协议的控制和数据通道

    netdev_dpdk_vhost_construct定义在文件openvswitch-2.9.2/lib/netdev-dpdk.c1058 static int 1059 netdev_dpdk_ ...

  3. OVS DPDK vs OVS Deep Dive(十六)

    背景 OvS(Open vSwitch)是云计算平台的重要连接组件,为虚拟机提供网络连,被各大云平台,基础设施供应商广泛使用,比如OpenStack, OpenNebula.vSwitch–Virtu ...

  4. OVS+DPDK Datapath 包分类技术

    本文主体内容译于[DPDK社区文档],但并没有逐字翻译,在原文的基础上进行了一些调整,增加了对TSS分类器的详细阐述. 1. 概览 本文描述了OVS+DPDK中的包分类器(datapath class ...

  5. OVS DPDK vhost-user详解(十二)

    在软件实现的网络I/O半虚拟化中,vhost-user在性能.灵活性和兼容性等方面达到了近乎完美的权衡.虽然它的提出已经过了四年多,也已经有了越来越多的新特性加入,但是万变不离其宗,那么今天就从整个v ...

  6. OVS DPDK vhost-user详解(十一)

    这篇文章是对vhost-user / virtio-pmd架构的深入技术研究,该架构针对基于DPDK的高性能用户空间网络,面向所有有兴趣了解这些基本细节的架构师和开发人员. 介绍 本文将在读者熟悉vh ...

  7. OVS DPDK vhost-user搭建全过程(四十四)

    系统:ubuntu14.04.1 系统:centos7 内核:4.4.0 qemu : >=2.7 Install DPDK 1. Download DPDK cd /usr/src/ wget ...

  8. ovs+dpdk场景下的tx checksum offload

    一.checksum: tcp checksum包括三部分: 1).伪头部校验和:    伪头部包括: 源ip .宿ip. 协议号.tcp 长度,主要用于校验是正确的目的机器接收到数据包 2).tcp ...

  9. 使用DPDK优化VirtIO和OVS网络

    2019独角兽企业重金招聘Python工程师标准>>> 准备测试环境 一共有2个节点,配置基本相同.节点A用于运行虚拟机,节点B用于测试性能. 查看系统信息 发行版版本: $ cat ...

最新文章

  1. Python 学习笔记 - 字典
  2. Keil 5出现Error: L6218E: Undefined symbol解决方法
  3. 活动结束|金融圈第19期分享:数据系统如何防范金融非统性风险?
  4. SQL SERVER提供了大量的WINDOWS和SQLSERVER专用的排序规则
  5. 2009最后一天,为了期盼而祝福
  6. Leet Code OJ 28. Implement strStr() [Difficulty: Easy]
  7. android开启服务器配置,Android基于XMPP开发(一)【openfire服务器配置】
  8. office professional 2010 key
  9. a good website to test OTP
  10. WCDMA,CDMA2000,TD_SCDMA
  11. sql between 效率高吗_整个SQL语句的执行效率都靠它了...
  12. 32个参数累加_「机械设计教程」滚珠丝杠选型过程中考虑的9个参数
  13. VC++ MFC 经典教程 – 基础篇
  14. CSS font-family 各字体一览表
  15. 解决Win10系统使用暴风激活导致的劫持浏览器主页问题
  16. 什么是IT行业? IT行业都有哪些职位?
  17. pycharm 用鼠标滑轮控制代码放大缩小的设置
  18. 递归实现二叉树的前序遍历
  19. Cortex-M处理器指令集详解
  20. 股票 - - 常用指标【中】

热门文章

  1. 自学python推荐书籍2019-2019年Python入门书籍推荐
  2. python编程从入门到精通pdf-跟老齐学Python:从入门到精通 完整版PDF[7MB]
  3. python小程序-【Python精华】100个Python练手小程序
  4. python计算每月工资-[Python] 2018新税法下工资计算
  5. 学python买什么电脑-程序员,买了台破Apple电脑,用来学Python
  6. python编程案例教程书籍-清华大学出版社-图书详情-《Python开发案例教程》
  7. python入门到精通需要学多久-python学习从入门到精通要多久
  8. python3项目-把项目从Python2.x移植到Python3.x的经验总结
  9. Linux上整体迁移Anaconda环境,所有的库包、虚拟环境均可用,同时让所有的用户访问
  10. windows的.bat批处理文件运行Python脚本程序