![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
KVM
文章平均质量分 95
papaofdoudou
我的藏经阁
展开
-
基于MDEV的PCI设备虚拟化DEMO实现
mdev受控直通体现了架构设计中的控制平面和数据平面分离的思想,平面可以理解为动作发生的地方,也就是让控制信号和数据流动发生在不同的地方,通过mdev设备虚拟化,让访问配置空间,MMIO寄存器这种低带宽配置面操作走trap-and-emulation路径,这是控制路径,而让设备存储访问(比如网络内存,GPU数据存储)以IOMMU DMA MAP的方式直通进行,控制和数据两个方向正交,彼此可以独立变化互不影响,同时兼顾了划分灵活性和访问性能。原创 2024-06-29 19:06:48 · 274 阅读 · 0 评论 -
QEMU如何模拟目标机上的原子指令?
关于QEMU对原子操作的指令,社区答疑汇总如下,说明的和文中分析基本一致。基本说明了通过HOST Native atomic 指令替代实现和stop-the-world两种方法实现,和分析是一致的。原创 2024-05-04 00:17:37 · 255 阅读 · 0 评论 -
Qemu添加自定义PCI设备
QEMU中添加新设备的核心是将设备描述TypeInfo对象注册进QEMU,将注册函数本身作为QEMU系统设备初始化链表中的一个接点注册进QEMU设备链表,而后者代表的注册函数则通过gcc attribute constructor注册进QEMU应用,在启动过程中执行。设备本身的注册函数将在QEMU启动过程中执行设备链表中的初始化会调完成。原创 2024-02-07 23:51:44 · 808 阅读 · 1 评论 -
mdev虚拟化PCI串口试验
本篇参考实践Linux 内核文档 :Documentation/driver-api/vfio-mediated-device.rstDocumentation/driver-api/vfio.rstThis step creates a dummy device, /sys/devices/virtual/mtty/mtty/.打开内核CONFIG_SAMPLE_VFIO_MDEV_MTTY配置项,重新编译内核生成mtty.ko.重启系统,加载mtty.ko, Files in this devic原创 2024-01-28 23:43:52 · 200 阅读 · 0 评论 -
理解PCIE设备透传
1.透传场景下,设备内存映射给VCPU,不会通过DMAR映射给设备自身,设备内存本身就在设备上,设备可以直接访问(通过设备内部的IOMMU),不需要映射给DMAR。资源内存映射给DMAR的情况一般是三方外设通过自身IOMMU DOMAIN(自身设备绑定)访问其他设备上的存储资源。2.透传的设备访问主存仅仅需要一次映射,由DMAR完成IOVA到HPA的翻译。原创 2024-01-19 23:33:40 · 969 阅读 · 0 评论 -
KSM Demo 分析
KSM是“Kernel SamePage Merging ”的缩写,中文可称为“内核同页合并 ”。它是一种节省内存的技术,从2.6.32版开始获得支持,内核需要打开CONFIG_KSM=y选项使用KSM机制。KSM允许内核在两个或多个进程(包括虚拟客户机)之间共享完全相同的内存页。KSM让内核扫描检查 正在运行中的程序 并比较它们的内存 ,如果发现它们有完全相同的内存区域或内存页 ,就将多个相同的内存合并为一个单一的内存页,并将其标识为“写时复制 ”。这样可以起到节省系统内存使用量的作用。原创 2023-12-28 23:58:09 · 790 阅读 · 0 评论 -
qemu 启动ARM虚拟机的几点释惑
1.hw/arm/boot.c是各类BOOT的集散地,另一个之前接触过的BOOT为smpboot(为某款双核A7设计SMP版的FREERTOS,在这里得到启动灵感)。2.QEMU虚拟机本身对系统行为的模拟是完备的,不需要修改GUEST内核,所以基本上,QEMU启动命令的每个选项,背后都有文章,主要分成两个方面进行模拟,第一是对CPU的模拟,这是靠TCG翻译完成的,对于算力密集型程序,TCG会很忙很忙。第二个是对IO行为的模拟,而这个是依赖对各类IO支持完成的。原创 2022-05-01 12:06:46 · 2377 阅读 · 0 评论 -
Qemu在ARM和X86平台上的运行机制初探
当QEMU进行IO操作时,将触发QEMU从指令翻译模式切换到HELPER模式,控制权将从QEMU切换到HELPER函数,HELPER函数截获IO端口地址,读写值,数据宽度等相关信息,并将这些信息传递给模拟设备,由模拟设备完成具体的IO操作。HELPER函数充当的角色之一类似于地址译码电路,HELPER函数需要根据地址信息,判断出选择那个外设。原创 2022-08-23 23:06:42 · 966 阅读 · 1 评论 -
qemu中断model虚拟化是如何实现的?
当系统调用CPSR指令关闭ARM IRQ/FIQ中断的时候,QEMU模拟器将其转换为HOST的HELPER cpsr_write调用,调用中修改env->daif值关闭中断标志位CPSR_I/CPSR_F.之后在每次的中断执行入口函数arm_cpu_exec_interrupt中,如果检测到外设有CPU_INTERRUPT_HARD或者CPU_INTERRUPT_FIQ类型的中断请求,则继续检测daif的中断标志状态,如果中断被DISABLE,则退出中断处理,继续执行线程代码。如果使用qemu-$原创 2022-09-11 23:44:21 · 637 阅读 · 0 评论 -
KVM虚拟机迁移原理与实践
热迁移环境需要满足的几个必要条件:1.热迁移之前,虚拟机安装文件必须要在源主机和目标主机都可以访问的位置上,并且具有相同的访问路径。实现方式可以是通过独立的NFS共享服务,或者是离线拷贝虚拟机镜像文件到目标主机相同的路径下。2.源主机和目标主机必须可以互相访问(SSH,TCP等协议)。3.迁移过程中经常会出现迁移进度条回滚的现象,这可能就是由迁移算法和逻辑决定的,回滚的目的是迁移上把进度条迁移过程中产生的脏页。原创 2023-11-11 23:48:31 · 1474 阅读 · 0 评论 -
ubuntu18.04下pass-through直通PCIe设备到qemu-kvm虚拟机实践
设备直通是一种虚拟化资源分配方式,通过将物理设备直通给虚拟机环境,达到使虚拟机可以直接访问物理设备的目的,直通功能对设备的要求不高,不需要设备支持SR-IOV PF/VF,目前市面上的显卡/网卡一般都支持直通。直通典型场景比如主机上有两块显卡,可以一块分配给主机用,另一块给虚拟机用,主板有集成显卡的可以采用将集成显卡给宿主机,PCIe的独立显卡给虚拟机用。原创 2023-05-07 10:50:18 · 1874 阅读 · 0 评论 -
CPU虚拟化技术及QEMU/KVM虚拟机安装实践
计算机可虚拟化的原因是因为计算机是一个离散的系统,由于资源有限,计算机只能描述有限数量的事务,只能计算到某个固定数,然后就会用尽计算机上的所有东西。在离散系统上,让另外一个事务去虚拟化一个已经存在的事物,只不过是复制创造一个和已存在事务完全一样的事件序列。现代物理告诉我们,我们的宇宙是离散和有限的,人们首先发现了自然数,接着是0,然后又发现了自然数的对立面负数,进而宣告整数的发现。后来人们觉得整数还是不够用,就发明了比例,也就是分数,所有之前发现的数在一起构成有理数集合。原创 2022-11-21 22:47:25 · 5047 阅读 · 0 评论 -
KVM虚拟化之小型虚拟机kvmtool的使用
分配给虚拟机大于4GB的RAM需要在RAM中留下一个GAP,用于PCI MMIO、热插拔和未配置的设备(详细信息请参阅e820_setup_gap())。原创 2023-01-27 13:42:06 · 2103 阅读 · 1 评论 -
Linux内核进程,线程,进程组,会话组织模型以及进程管理
唤醒睡眠状态任意的线程可以用wake_up_process,它可和唤醒处于深度睡眠状态的线程。结合最开始的图和代码,我们可以得到如下结论:1.kthead衍生的内核线程没有session pid,说人话就是所有的内核线程没有都没有操作控制台,不能通过控制台去操作控制。2.idle任务不会出现在for_each_process的处理循环中。3.每cpu_rq就绪队列中,不会将idle统计到nr_running中。原创 2022-11-27 15:33:56 · 2004 阅读 · 0 评论 -
QEMU&KVM 虚拟机实例demo以及RISCV上KVM的实现分析
KVM通过一组IOCTL向用户空间导出接口,这些接口能够用于虚拟机的创建,虚拟机内存的设置,虚拟机VCPU的创建与运行等,按照接口所使用的文件描述符不同,KVM的这组IOCTL接口可以分为三类:0./dev/kvm节点对应全局kvmfd, 通过kvmfd创建每个虚拟机对应的vmfd, 再由vmfd为每个虚拟VCPU创建一个vcpufd,vcpufd通过vmfd暴露的接口获取。KVM全局管理用kvmfd,虚拟机管理用vmfd, vcpu运行用vcpufd. 内核对应三套chrdev的fops.原创 2022-05-02 10:36:06 · 2715 阅读 · 0 评论