虚拟化及云计算
文章平均质量分 87
虚拟化/云计算/DPU,希望做到:从全局框架和主干思路入手,脉络组织清晰,原理讲解透彻。
light_forest
这个作者很懒,什么都没留下…
展开
-
ATS capability
ATS capability的格式很简单,只有两个寄存器,cap和ctrl。原创 2023-01-12 21:21:21 · 165 阅读 · 0 评论 -
Vt-d Device-TLB原理和实现
Device-TLB的出现是为了减轻DMA访问地址映射单元(intel命名VT-d,amd命名iommu,后面习惯于称呼iommu)的压力。我们简单想一下IOMMU和MMU的区别,IOMMU负责设备访问映射,MMU负责CPU访问映射。MMU为CPU上运行的每个软件实体(进程)维护一份页表,起到进程间地址隔离的作用;IOMMU为每个设备提供一份页表,起到设备间地址隔离的作用。原创 2022-12-23 21:14:40 · 725 阅读 · 0 评论 -
IOMMU_GROUP创建流程
内核的iommu驱动在drivers/iommu下,因为虚拟化相关的设计与硬件体系架构强相关,所以iommu的驱动包含软件提取的通用框架层代码和各体系结构相关代码,包括intel/amd/arm等。原创 2022-12-22 18:46:52 · 884 阅读 · 1 评论 -
Mellanox网卡驱动——representor框架学习
背景:DPU多是参考mellanox网卡软硬件框架。对于ovs快速转发路径硬化的场景,网络报文进入进入FPGA的网口,如果流表匹配,直接通过快速路径送到主机。如果不能匹配,则需要soc上的ovs慢速路径创建新的流表项,然后下发给FPGA。云场景下,一般都是虚拟机和容器的场景,网卡会开启VF,每个VF都可以作为一个网卡设备使用。mellanox的网卡针对这种场景使用了representor的概念。在soc上为每个representor口虚拟出了一个representor,每个representor都对应一原创 2021-12-06 19:02:21 · 4108 阅读 · 0 评论 -
VIRTIO后端框架QEMU与VHOST分析
virtio设备的前端是guest的内核驱动,后端是qemu中的virtio模块。virtio分为控制通道和数据通道,控制通道用于协商创建数据通道,数据通道为真正的原创 2022-02-23 19:39:43 · 3897 阅读 · 0 评论 -
VIRTIO-BLK设备SERIAL ID
一、需求从云的管理面来看,对每个设备的管理都要有一个id来作为唯一标识,这个id会通过管理面下发给每个终端,后续使用该id对终端的设备进行管理。比如net设备的端口号,block设备的by-id。当前的需求,云管控面向DPU卡的管理面发起创建block设备的请求,同时传入block设备的管理ID,要求主机侧实际看到的block设备在/dev/disk/by-id下绑定下发的管理ID。云管理面下发ID:主机侧显示ID:二、实现这个ID如何提供给主机的?在控制面的bloc原创 2022-01-10 14:58:30 · 1227 阅读 · 0 评论 -
VIRTIO协议——split queue与packed queue
一、概述virtio的数据通道主体是virt queue,在virtio1.0及之前的版本,virtio协议只支持split queue,packed queue是virtio1.1引入的。virtqueue的主体是一块VM和VMM之间的共享内存,客户机通过这片内存向host发送和接收数据,这片内存在内核中的数据结构称为vring。packed queue与split queue相比,精简了vring的结构,将原来的avail ring和used ring合并为一个ring,通过提升软件的处理算法达原创 2021-12-27 17:33:36 · 3004 阅读 · 3 评论 -
QOM(QEMU)设备管理机制概述
QEMU的对象管理是很重要的一个部分,linux中一切皆文件,作为整个虚拟机的后端,qemu中虚拟的一切实体皆Object,不管是CPU、设备还是KVM的使用都离不开QOM框架(Qemu Object Module)。本文对QOM设备管理机制做简单清晰的介绍,然后以VIRTIO设备举例说明,方便更好的理解。一、关键数据结构QOM采用了C++里面向对象的命令方式,每一类对象会实例化一个Class,类的成员是这类对象通用的内容,比如一些统一的操作接口(方法)、VIRTIO设备的PCI VENDOR/原创 2022-05-07 18:43:41 · 2746 阅读 · 0 评论 -
DPDK内存管理——iova地址模式(虚拟/ 物理 地址)
1、rte_eal_init()2、rte原创 2021-11-13 15:59:20 · 5330 阅读 · 2 评论 -
VIRTIO0.95与1.1控制面协议简析
virtio最初的设计目的就是在guest和host之间建立一个通道,达到更高效的数据传输。传统的模拟io的方式,guest可以不感知,称为全虚拟化,但是guest每次向设备写入数据都需要做一次VM-exit,效率极低;virtio称为半虚拟化的方式,guest是会感知的,因为他需要专门的内核驱动(前端VIRTIO驱动),而不是原本的网卡驱动。在guest侧,virtio模拟的设备显示出来是virtio-net/virtio-blk这样的设备类型。所以本质上,VIRTIO就是一种协议,目的就是令原创 2022-01-14 17:55:21 · 3104 阅读 · 0 评论 -
DPDK内存管理——mempool和mbuf的理解
DPDK针对高性能pcie设备,设计了专门的mempool内存管理模型,具体的数据结构形式是rte_mempool和rte_mbuf。在mempool的实现中,每个elem称为mbuf,驱动从mempool中申请每个mbuf使用。每个mempool在创建的时候指定了mbuf的个数和大小,每个mbuf大小是一样的,所以mempool占用多少空间在申请的时候就是确定的,这种模式不同于heap的动态扩展。在mempool申请的空间里,所有的mbuf依次排列,具体的内存拓扑及软件组织形式见下图。一、m.原创 2021-11-15 18:25:52 · 6137 阅读 · 0 评论