![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
虚拟化
文章平均质量分 77
leoufung
Linux Kernel,Virtualization
展开
-
用crash在线调试内核(1)
crash linux-5.4.0/vmlinux /proc/kcore struct vring_virtqueue ffff987036195740struct vring_used 0xffff987027091000crash linux-5.4.0/vmlinux /proc/kcorestruct vring_virtqueue ffff987036194d80struct vring_avail 0xffff987027280000struct vring_used 0...原创 2021-12-14 21:11:47 · 738 阅读 · 0 评论 -
关于DPU设备DP的透传分析
问题目前虚机场景下,关于设备适配到虚拟机有两种思路,一种是通过VFIO透传,一种是通过kernel VDPA进行适配,无论使用哪种,最终都要把数据平面直接透给VM,以便进行高效的数据传输。其实透传这是针对控制面而言,数据面只是设置对应的地址即可VDPA的模式控制面上,厂商的HOST驱动控制面 HDRV-CP 适配到VDPA框架,通过VDPA转换给vhost设备,QEMU使用VHOST模拟virito设备给虚拟机VM,virito 前端驱动控制面 virito FE-CP即可通过virito标原创 2021-12-06 15:58:19 · 1132 阅读 · 0 评论 -
关于dma_alloc_coherent的用法
目录概述DMA映射建立一致性DMA映射DMA池建立流式DMA映射单页流式映射分散/聚集映射PCI双重地址周期映射 DAC简单的PCI DMA例子ISA设备DMA概述DMA的操作是需要物理地址的,但是在linux内核中使用的都是虚拟地址,如果想要用DMA对一段内存进行操作,如何得到这一段内存的物理地址和虚拟地址的映射呢?dma_alloc_coherent这个函数实现了这种机制。1、函数原型: void *dma_alloc_coherent( struct原创 2021-11-26 08:37:16 · 12799 阅读 · 1 评论 -
MLX5 VDPA 实现分析
关键流程分析原创 2021-11-16 13:55:18 · 1214 阅读 · 0 评论 -
vdpa中set_map接口iotlb参数的理解
1. 只有vhost_vdpa的情况,iotlb 才的管理会放在vdpa_device中, 也就是iotlb不为空,因为vhost_vdpa device 中有iotlb,真正的映射关系在userspace的qemu中管理,所以需要通过vhost的iotlb将映射关系下发到硬件中;除此之外,vhost还负责从VA到PA的映射转换;真个过程是 vhost_vdpa 将iotbl请求转发给了 vdpa device 触发的2. 在 virtio_vdpa 的情况下,iotlb是virtio_driver同k原创 2021-11-10 09:09:48 · 399 阅读 · 0 评论 -
[RFC,18/24] vhost-vdpa: support ASID based IOTLB API
[RFC,18/24] vhost-vdpa: support ASID based IOTLB APIMessage ID 20200924032125.18619-19-jasowang@redhat.com (mailing list archive) State New, archived Headers show Series Control VQ support in vDPA|expand Commit MessageJason WangS...转载 2021-11-06 18:00:32 · 181 阅读 · 0 评论 -
[RFC] vhost: basic device IOTLB support
[RFC] vhost: basic device IOTLB supportMessage ID 1451546025-15955-1-git-send-email-jasowang@redhat.com (mailing list archive) State New, archived Headers show Commit MessageJason WangDec. 31, 2015, 7:13 a.m. UTCThis patch tries to i.转载 2021-11-06 17:29:47 · 470 阅读 · 0 评论 -
BF2 swithdev representor 方案介绍
背景传统virtio 半虚拟化模型SRIOV 模型,需要单独离管理存在的问题:1. 无论kernel状态下还是dpdk情况下,SRIOV 口没有通过bridge直接进行管理,而是直接嵌入了eswitch2. 这种模式叫做 legacy 模式3. 需要为sr-iov增加软件的 representation 模型4. representation 模型需要无缝接入ovs, tc,可以通过已有方式对硬件进行 traffic rules 下发VF 的 represen..原创 2021-10-30 10:51:19 · 2630 阅读 · 0 评论 -
通过 auxiliary bus 管理 multifunction 设备
引言设备驱动通常存在于单个内核子系统中。然而,有时开发人员需要处理此模块之外的功能。例如,一个暴露以太网和 RDMA 功能的网络接口卡 (NIC)。只有一个硬件,但有两个驱动用于这两个功能。这些驱动程序需要在各自的子系统内工作,但它们也必须共享对相同硬件的访问方法。当前内核中没有将这些驱动程序连接在一起的标准方法,因此开发人员发明了ad-hoc方法来处理它们之间的交互。最近,Dave Ertman 发布了一个补丁集,介绍了一种称为“auxiliary bus”的新型总线,以解决这个问题。Comple翻译 2021-10-22 22:35:07 · 880 阅读 · 0 评论 -
Auxiliary Bus
Auxiliary 总线在某些子系统中,核心设备(PCI/ACPI/其他)的功能对于单个设备来说过于复杂,无法由单个某驱动程序(例如 Sound Open Firmware)管理,多个设备可能会实现共同的功能交集(例如 NIC+ RDMA),或者驱动程序可能想导出一个接口供另一个子系统驱动(例如 SIOV Physical Function export Virtual Function management)。将功能拆分为代表sub-domains功能的child- devices,可以通过 Lin.翻译 2021-10-22 21:17:18 · 1020 阅读 · 0 评论 -
virtio协议1.0 -- 网络设备
引子virtio network device 是一种虚拟以太网卡 迄今为止virtio支持的最复杂的设备(其他设备可挖掘的内容很多) 空缓冲区被提前放置在RX virtqueue中用于接收数据包,收包一个队列 发送的数据包被排队到TX virtqueue中以便按该顺序传输,发送一个队列 控制队列用于控制和高级过滤功能Device ID1Virtqueues队列分布布局 如果VIRTIO_NET_F_MQ 没有协商,N = 1 如果VIRTIO_NET_F_MQ 协商了,..原创 2021-10-12 16:22:55 · 2263 阅读 · 0 评论 -
virtio协议1.0 -- PCIe 类型的 Virtio 设备
引子virtio 可以使用不同类型的总线,这里讲解PCIe类型的virtio设备 virtio通常实现为PCIe类型 virtio可以是PCI设备也可以是PCIe设备 设备 设备暴露给客户机的接口需要符合PCI/PCIe规范 PCI 设备发现vendor id: 0x1af4 device id: 0x1040 + ${Virtio Device ID},确定具体设备类型,Legacy的是0x1000 到 0x103F 设备 PCI Vendor ID 必须是0x1AF...原创 2021-10-11 09:19:02 · 2916 阅读 · 1 评论 -
vDPA kernel fmk: vDPA bus drivers for kernel subsystem interactions
vhost-vDPA bus driverdesign of vhost-vDPA bus driversdf原创 2021-10-08 13:48:28 · 286 阅读 · 0 评论 -
virtio协议1.0 -- 设备初始和操作
设备初始化 驱动初始化步骤 Reset 设备 设置ACKNOWLEDGE 状态,通知设备:客户机设别了设备 设置DRIVER 状态,客户机找到了对应的驱动 读取设备的feature bit并写会驱动支持的feature bit 子集到设备,接收feature bit前驱动可能读取device-specific configuration 进行细粒度校验 设置FEATURES_OK,此后,驱动不能在接受更多新的feature bit 读取设备状态,确保...原创 2021-09-29 15:23:03 · 497 阅读 · 0 评论 -
vDPA kernel fmk: vDPA bus for abstracting HW
目的dive into the technical details of the architecture use cases for kernel vDPA fmk with containers and VMs Review design and implementation vDPA bus vDPA bus driver vDPA device driver vDPA devicesdatapath complies with virtio specification.原创 2021-09-29 13:32:56 · 320 阅读 · 0 评论 -
virtio协议1.0 -- 基础组件
这里描述符的是virito的通用基础组件,不依赖于总线类型,如PCI,MMIO, Channel IO 等0. virtio基本基础组件Device status 域 Feature bits Device Configuration space 一个或多个 virtqueues1.Device status 域驱动在发现和加载设备过程中,会经历一系列加载步骤,device status 就是在底层提示加载步骤的完成状态,底层设备通过这些状态值,知道需要完成的事情状态 ACKN.原创 2021-09-28 08:41:47 · 1408 阅读 · 0 评论 -
virtio 协议1.0 -- 介绍
1. 介绍virtio 是一族设备 用在虚拟化环境中 在虚拟机中看起来是PF设备 virito 协议要求 通用性:使用通用的总线协议和通用的中断方式 高效:设备需要保证cacheline的一致性 标准化:标准化的操作,不依赖于总线的类型,如PCI, MMIO, Channel IO等等 可扩展:设备和客户系统在设备初始化阶段通过feature bit进行协商保证前后版本兼容 2. 协议术语Legacy Interface:0.95版本的接口定义 Legacy Dev..原创 2021-09-27 13:49:37 · 1485 阅读 · 1 评论 -
用MMAP分配内存
背景知识 MAP_ANONYMOUS The mapping is not backed by any file; its contents are initialized to zero. The fd and offset arguments are ignored; however, some implementations require fd to be -1 if MAP_ANONYMOUS (or MAP_ANO...原创 2021-05-13 09:39:30 · 1263 阅读 · 0 评论 -
白话 virtio DMA 过程 (三) -- DMA在desc中成链问题
在virtio数据传输中,如果一个报文使用多个desc,那么这些desc会通过VRING_DESC_F_NEXT进行成链动作。在virtio中有一个can_push的参数,如果can_push为0,那么virtio_net_hdr会单独真用一个desc(sg或mbuf),报文pkt占用一个单独的desc(sg或mbuf),virtio_net_hdr和pkt的两个desc通过VRING_DESC_F_NEXT形成链。也就是说,不论报文的大小,如果can_push为0,都会存在发送端成链的现象,下面是相关的不原创 2021-04-26 14:11:31 · 942 阅读 · 0 评论 -
白话 virtio DMA 过程 (二)
上一篇里面,我们讲述了DMA的过程,本文里面,我们讲述virtio报文的格式和处理工作。virtio 报文如下图所示除了我们常见的报文头 + 报文载荷以外(蓝色部分),以网络为例,还会增加一个virtio_net_hdr,这个virtio_net_hdr 主要用在virtio前后端传输使用,前端用这个头告诉后端一些信息,如buffer数量,特殊卸载过程、参数等等,这些都可以是自定义的。所以我们在代码里面会看到,在报文的头部会追加virtio_net_hdr。virtio_net_hdr 在DPD原创 2021-03-29 09:50:06 · 958 阅读 · 0 评论 -
白话 virtio DMA 过程 (一)
进行VIRTIO DMA相关工作,看过的同学都知道,VIRTIO DMA 中非常复杂的其实不是desc表什么的,而是index的更新,什么index,last_xx_index等等,搞得人云里雾里,而且网上大部分都是前后端分开描述,而且都是基于代码讲解,更让入门的同学不知所踪。今天我们就在这个文章里面,对virtio DMA的过程进行白话描述,不涉及具体代码,只讲清原理和设计原因为目的虚拟化模拟的就是后端的虚拟硬件,我们在这里就认为他们是硬件,所以本位把后端成为HW;前端驱动在本文里面成为SW。我们原创 2021-03-23 20:55:09 · 2238 阅读 · 4 评论 -
利用qemu触发short设备/dev/shortint中断的方法
记得2007年的时候,第一次开始学习ldd3这本书,到书的后面需要设计到真实硬件才可以验证学习的内容,当时废了好大的力气。为了验证书里面并口的内容,专门买了电脑、LED灯、电焊、锡、面包板什么的,然后把LED灯焊接在并口的9号和10号引脚并接到面包板上,通过拉高电平触发并口中断,看输出也要看LED灯的闪烁,费死劲了。这几天叫我弟驱动变成,突然想到用虚拟化设备来触发中断,让他验证short设备,于是就改了一下qemu,来从hypervisor里主动触发中断,这样妈妈再也不用担心我的电烙铁烫到我了。这样就大大降原创 2021-03-13 11:58:25 · 1715 阅读 · 4 评论 -
VIRTIO-BLK-DATA-PLANE的配置使用
原文地址:http://smilejay.com/2016/06/virtio-blk-data-plane-configuration/virtio-blk-data-plane是qemu/kvm中的一种高性能的块设备I/O方式,它最初在qemu 1.4版本中被引入。virtio-blk-data-plane与传统virtio-blk相比,它为每个块设备单独分配一个线程用于I/O处理,virtio-blk-data-plane线程不需要与原qemu执行线程同步和竞争锁,而且它使用 ioeventfd/转载 2021-01-21 10:26:23 · 924 阅读 · 0 评论 -
qemu: virtio 设备 VIRTIO_PCI_QUEUE_NOTIFY 寄存器处理
目录1. 问题描述2. 问题跟踪及解释1. 问题描述VIRTIO_PCI_QUEUE_NOTIFY 是前端驱动进行 KICK 的接口,前端驱动写完报文,就要通过VIRTIO_PCI_QUEUE_NOTIFY 发送 KICK 消息给qemu以便发送出来,我们以0.95为例,在QEMU中抓取对VIRTIO_PCI_QUEUE_NOTIFY 的写操作,发现只有一次VIRTIO_PCI_QUEUE_NOTIFY 的IO写操作,和预期是不符合的但从前端驱动打印来看,确实每个报文都...原创 2021-01-05 17:22:50 · 971 阅读 · 1 评论 -
qemu: 内存初始化
1. 基本数据结构原创 2020-12-29 16:24:16 · 1057 阅读 · 0 评论 -
用户态进行PIO读写
在用户态进行设备PIO的读写API接口,原文地址:https://man7.org/linux/man-pages/man2/outl.2.htmlUTB(2) Linux Programmer's Manual OUTB(2)NAME top outb, outw, outl, outsb, outsw, outsl, inb, inw, inl, insb, insw, insl...原创 2020-12-25 17:53:17 · 276 阅读 · 0 评论 -
qemu: 命令行查找接口
我们经常知道qemu如何使用,但是很难找到对应的处理入口,这时候,我们只要在 main 中查找qemu_opts_foreach 就可以找到对应的入口函数了,比如我们可以看到 -device 选项的帮助函数是device_help_func,处理函数是device_init_func...原创 2020-12-24 15:11:33 · 359 阅读 · 0 评论 -
BA-VCP-DEBUG.txt
################################################################################HOST 安装必要包################################################################################yum -y install fuse fuse-develyum -y install kernel-modules-extravim /etc/grub2.c原创 2020-12-21 10:10:45 · 198 阅读 · 0 评论 -
qemu: 设备后端模拟
1. 网卡模拟参数:-netdev type=tap,id=eth0,ifname=tap30,script=no,downscript=no -device e1000,netdev=eth0,mac=12:03:04:05:06:08或-net nic,model=e1000,netdev=eth0 -netdev tap,ifname=tap30,script=no,downscript=no,id=eth02. 网卡参数解析解析完的参数放到QemuOptsList ...原创 2020-12-21 09:42:51 · 1461 阅读 · 1 评论 -
qemu: PCI 设备模拟
1. PCI设备可以参考 :PCI/PCIe基础——配置空间分布_vc66vcc的博客-CSDN博客_pcie配置空间2. PCI设备模拟PCI 设备类型pci_device_type_info原创 2020-12-10 21:05:12 · 2829 阅读 · 1 评论 -
qemu: 设备虚拟化概述
1. 总线类型类:BusClass对象:BusState类型:TYPE_BUSTYPE_BUSbus_infoTYPE_PCI_BUSBUS 类初始化:bus_class_init对象实例化函数:qbus_initfnbus 具现化函数bus_get_realized2. 总线的创建qbus_create_inplaceqbus_createqbus_realizedevice_set_real...原创 2020-11-28 20:48:39 · 1038 阅读 · 0 评论 -
Qemu: virtio 对象模型 QOM(进行中)
3. 类型层次结构可以通过通过TypeInfo找到类的继承关系PCI DEVICE 类的父类是DEVICEDEVICE类的父类是OBJECTOBJECT 没有父类,是顶层类所有接口的顶层类是 TYPE_INTERFACEtype_initialize 中分配class类型的结构,等于C++中的一个类,类型信息PCIDeviceClass 是 PCI Devcie 类DeviceClass 是设备类的信息通过device_type_in...原创 2020-11-26 15:02:13 · 715 阅读 · 0 评论 -
qemu: VFIO 设备直通(进行中)
目录1. VFIO 实例化1. VFIO 实例化实例化入口函数为:vfio_realizevfio_get_group 打开/dev/vfio/$groupid设备并连接到container,创建container并将group添加到container之中vfio_get_device 得到直通设备的fdvfio_populate_device 将直通设备的内存区域信息取出来,vfio_region_setup 用直通设备的BAR空间建立VFIO虚拟设备的BAR...原创 2020-11-20 09:26:08 · 2480 阅读 · 1 评论 -
setup_vm.sh
!/bin/sh/home/liufeng/tools/bin/qemu-system-x86_64 -machine accel=kvm -hda ./test.img -m 2048 -cdrom ./RHEL6.3-20120613.2-Server-x86_64-DVD1.iso -boot d -vnc 10.238.153.194:0 -monitor telnet:10.238.153.194:6666,server,nowaitmodprobe tuntunctl -t tap1原创 2020-09-24 20:58:44 · 207 阅读 · 0 评论 -
OVS-DPDK-VHOSTUSER CLINET-VM 环境搭建
################################################################################# OVS DPDK VM 安装################################################################################vim ~/.bash_profile>>>>>>>>>>>>>>.原创 2020-09-24 20:57:08 · 601 阅读 · 0 评论 -
OVS-DPDK环境搭建
################################################################################# OVS DPDK 安装################################################################################vim .bash_profile>>>>>>>>>>>>>>>.原创 2020-09-24 20:56:04 · 1033 阅读 · 1 评论 -
CentOS虚拟机调试标准模板
<domain type='kvm' id='16'> <name>t1_vm</name> <memory unit='KiB'>4097152</memory> <currentMemory unit='KiB'>4097152</currentMemory> <vcpu placement='static'>4</vcpu> <cpu mode='host-model'...原创 2020-09-21 16:27:01 · 276 阅读 · 0 评论 -
Virtio implementation principle analysis diagram
my virtio implementation principle analysis diagram原创 2020-07-09 10:12:59 · 210 阅读 · 0 评论 -
KVM环境初搭建【工作笔记】
######################################################################################安装系统###################################################################################### 按F2进入BIOS# 在CPU 配置中的socket1和socket0中查看是否激活了Inter vt-d的功能# 网络配置接口 ens117f3原创 2020-06-30 13:18:50 · 1194 阅读 · 0 评论 -
Understand Qemu TCG
The whole executing process of QEMUmain() //vl.c main_loop() //vl.c x86_cpu_realizefn() //实例化虚拟机CPU设备模型qemu_init_vcpu() //KVM没有enable,并且启用了TCG的情况下,tcg_enabled()qemu_tcg_init_vcpu()//启动VCPU线程,线程处原创 2015-09-28 09:54:47 · 1905 阅读 · 0 评论