水平有限,纯属扯淡,
dpdk虚拟化,有很多资料就从虚拟化开始不辣不辣的开始讲,CPU虚拟化,内存虚拟化,然后io虚拟化,咔咔咔半天你早已没有兴趣了,以上描述跟dpdk有毛关系,我说的毛,是有点毛关系的,不许理会,记得当初以为做linux内核肯定有前途那可是内核呀,学习1.0版本那本书,某人写的狗屁剖析,光讲内存段模式用了16页,最后本来懂了大体怎么回事又被他收回去了,最后才知道人家linux根本就不用段模式,羊驼飘过,咱也不知道,咱也不敢问
直奔主题
io 虚拟化是我们关注的,因为dpdk就是io的一个平台吧,我就这么说了,怎么滴吧,如有不爽直接撞墙,其实我不懂,
io全虚拟化,就是VMware那样,全模拟,win10不知道在vmware中被安装,你以为你是自由的,实际上你是被圈养的。(设备枚举,识别,中断,dma,我也不知道我为啥写出这四个东西,背下来就是,时间久了就懂了)
io半虚拟化,就是有通敌的步骤了,win10里面的io软件知道自己是处在虚拟机中的,(间谍就是前端驱动),实体机中的间谍叫后端驱动,(前后端通信过程就是理解成翻墙的意思就行,一个vpn客户端一个vpn服务器)
io透传 win10直接可以使用物理硬盘不用VMware给你假装模拟一块,(就是不用翻墙就能访问的国外网站)
这时候应该来张图:
图是歪的,所以手机拍照的时候一定要竖着拍,凑活着看吧,反正是抄的。
我也不知道里面画的啥,透传需要pci和pci-e设备支持intel vt-d才行
最后介绍一个东东 跟以上没有关系但也属于虚的那块,SR-IOV能把物理网卡虚拟出好几个,当物理网卡用,我想说中国人说的哪个牛词,无限的敬仰,太厉害了
intel vt-d,(我也不知道为啥要贴这个,书上这个地方贴的,此处我觉得跟dpdk没关系)
io透传的一个难点:设备DMA操作物理地址,而虚拟机给的是虚拟机以为的物理地址,所以需要换到真的
GPA------->HPA(vt-d就是干这个的)
GPA----------------|-------------->HPA(vt-d就是干这个的)
dma重映射硬件截获然后根据IO页表(同样支持4k,2M,1g的大页)也有IOTLB,就转了,启用vt-d只能访问指定域的内存,
最后vt-d有以下功能:第一,IO设备分配 , DMA映射,中断映射,可靠,完了。
pcie SR-IOV(单根IO虚拟化,啥意思咱也不知道,咱也不敢问),功能就是能把一个物理网卡搞出多个,ifconfig 只有一个eth0,开启以后就能有eth1,或者更多(网卡虚拟只是 它的一个小功能而已,)
PF(配置管理SR-IOV,有所有的资源,不能被干掉,理解成老大就行了)
VF(精简的,可以通过PF干掉的或者创建)
此时有图:
开启vt-d 1,开bios中的vt-d和vt-x,内核启动加intel_iommu=on,这样才能透传
但是透传环境下运行dpdk会有问题,这时候内核启动项添加iommu=pt,这样就不会被翻译了,或者绑定vfio-pci驱动,
vfio-pci是一个IOMMU用户态驱动可以用户态配置IOMMU,当使用时,DPDK就会设置DMA映射,直接物理地址作为映射,说白了就是映射成跟不被映射一样,直接冲过IOMMU地址翻译