dpdk课程学习之练习笔记六(虚拟化理解vhost和virtio)

简介: dpdk课程学习之练习笔记六(虚拟化理解vhost和virtio)

学习,简单了解dpdk的一些基础知识,这里主要学习虚拟化相关基础知识。(个人课堂笔记,理性参考)

1:硬件支持 多队列网卡

1.1:多队列网卡:

===》网卡内部有多个队列,与CPU进行绑定,通过PCI总线进行数据分发。

===》1:数据先进行hash

===》2:根据hash后的结果,放入对应的队列中。

===》3:多队列网卡中的数据会触发中断,由PCI和CPU进行处理。

1.2:多队列网卡的发送与接收:

===>1:多队列网卡中数据的接收,需要知道网卡中有数据,通过硬件中断的方式,硬件中断在数据量小的时候可以满足。

=======》使用NAPI对单纯的硬件中断进行优化,有中断触发,数据就一直读, 因此rte_eth_rc_burst读出来得到数据是多个数组(多个队列即多个NAPI)。

===》2:多队列网卡数据的发送:send()和实际网卡的发送时两个步骤。

=======》通过队列,把send()接口和网卡发送进行拆分,对应的QDisc就是队列,可以是多个队列。

=======》多个QDIsc队列设计方案:FIFO,可以四元组检索对应放数据。 (可以设置)

多队列网卡队列可以与CPU进行绑定,使专门的CPU处理专门的队列。

1.3:dpdk与多队列网卡

配置:rte_eth_dev_configure() ===》对网卡进行配置

启动: rte_eth_rx_queue_setup() ===> 对RX队列的配置

rte_eth_tx_queue_setup() ===> 对TX队列的配置

接收: rte_eth_rx_burst()

发送:rte_eth_tx_burst()

2:虚拟化

2.1:主要从三个方面了解虚拟化:

1:CPU虚拟化

2:内存虚拟化

3:IO虚拟化(磁盘的虚拟化,网卡的虚拟化)

2.2:CPU虚拟化(共享)

CPU完全虚拟化: vmware虚拟工具创建的虚拟机

CPU的硬件辅助虚拟化:一个物理硬件(vsphere)上多个虚拟机,需要硬件指令的支持。

CPU的半虚拟化:docker虚拟机(使用的宿主机的CPU)

==>vt-x (主要针对CPU和内存的虚拟化)与vx-d (针对外设(DMA,网卡,IO)的虚拟化),对应南桥和北桥的概念。

2.3:内存虚拟化

这里涉及到的概念如图:

参考网址:一文看懂影子页表和扩展页表 - 51CTO.COM

2.3.1:影子页表技术:(维护页表)

虚拟机虚拟地址 《=》 物理机虚拟地址《》物理机物理地址

虚拟机的页表和物理机页表建立关联,访问虚拟机页表,通过关联找到物理机页表,然后找到实际物理地址。

2.3.2:EPT(扩展页表):(物理地址偏移)

虚拟机物理地址和宿主机物理地址有一个偏移量,直接通过虚拟机物理地址+偏移可以找到实际物理地址。

dpdk只是使用内存,这里的内存方案与dpdk无关。

2.4:I/O虚拟化

例如:虚拟机需要联网,网卡是如何使用的。

===》虚拟机可以直接使用网卡(透传),也可以虚拟机网卡数据转为物理机网卡数据,用网卡发送。

===》桥接和net模式只是逻辑上的差异,与I/O虚拟化无关。

===》虚拟机可以用vmxnet3虚拟出多队列网卡。

1:I/O半虚拟化 :不通过虚拟网卡,直接发给网卡数据取。(CS模型)

2:I/O全虚拟化: 虚拟出一个网卡,网卡数据发给物理机网卡进行发送。(性能不高)

3:I/O透传: 如插入一个硬件设备,虚拟机直接能识别,透传。

vmware的磁盘虚拟化:全虚拟化

vmware的网络:更偏向于透传。

这里区分i/o:磁盘i/o, 网络i/o, 其他外设鼠标键盘等i/o

3:dpdk的虚拟化

3.1:virtio 虚拟交换机,半虚拟化技术

对于不同的io,制定统一标准 virtio,针对外设,针对io。

读和写,宿主机和虚拟机之间设备的读和写,使用中间队列(可以是环设计)进行交互。

3.2:vhost 加速包处理

vhost: 适配针对的是所有的操作系统虚拟机。

DPDK vhost支持vhost-cuse(用户态字符设备)和vhost-user(用户态socket服务)两种消息机制,它负责为客户机中的virtio-net创建、管理和销毁vhost设备。

如图:该图来自网络:Vhost-user详解 - 简书 (jianshu.com)

相关demo源码和课程:C/C++Linux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂 (qq.com)

目录
相关文章
|
安全 IDE KVM
[ 云计算相关 ] KVM虚拟化平台windows虚拟机迁移到openstack虚拟化平台(KVM虚拟化环境中Windows虚拟机安装Virtio驱动程序)
KVM虚拟化平台windows虚拟机迁移到openstack虚拟化平台(KVM虚拟化环境中Windows虚拟机安装Virtio驱动程序) 因为这也不是我的本职工作,只是这次恰巧碰到了,帮着解决了以下,我就没深究原理了,问我原理可能我也不知道,只是这个操作步骤吧,亲测有效。
457 0
[ 云计算相关 ] KVM虚拟化平台windows虚拟机迁移到openstack虚拟化平台(KVM虚拟化环境中Windows虚拟机安装Virtio驱动程序)
|
10月前
|
存储 Shell KVM
KVM虚拟化进阶学习
命令安装KVM
164 0
|
安全 虚拟化 云计算
【操作系统学习】(九)虚拟化
虚拟化技术实际上并不是一个新奇的概念,它的思想可以追溯到上世纪60年代; 1974年,就已经有人列出了**计算机体系结构有效支持虚拟化所需满足的条件**,(同期起源的还有x86结构,但后者一直未满足这个条件?);1999年虚拟机技术突然受到了广泛关注。
210 0
|
Linux 虚拟化 云计算
virtio 1.2 来了!龙蜥社区携手业界打造新版虚拟化 IO 标准
Per-virtqueue reset特性是解决virtio-net不支持队列级别的reset操作的问题。
virtio 1.2 来了!龙蜥社区携手业界打造新版虚拟化 IO 标准