超帅浩浩
looking for a job, 要求:年薪百万。请私信联系
展开
-
QEMU的内存虚拟化[1]——基本数据结构理解
kvm_set_phys_mem中的start_addr为该MemoryRegionSection在AddressSpace中的起始地址,对address_space_memory而言,其表示的就是虚拟机的物理地址,kvm_set_phys_mem(kml, &u1->section调用kvm_set_user_memory_region进行物理内存HVA和GPA关系的的注册和映射。system_memory和system_io是所有MemoryRegion的root节点。原创 2024-03-14 16:35:03 · 222 阅读 · 0 评论 -
qemu虚拟机内存分配 -m size参数解析
visit_type_MemorySizeConfiguration 中获取了-m size到mem->size中。machine->memdev是在create_default_memdev里赋值的。1373代码行处将ms->ram_size作为memdev backend的大小。完成了memdev的MR ram_block主机内存分配和MR初始化。将machine->ram的一部分添加到system_memory中。原创 2024-03-13 15:23:28 · 375 阅读 · 0 评论 -
QEMU开启vIOMMU的VFIO设备直通下的地址翻译流程
此处,iova是GIOVA,vaddr是HVA,这次的ioctl(container->fd, VFIO_IOMMU_MAP_DMA, &map)最终完成了在Host IOMMU页表中的GIOVA到HPA的PFN的映射。IOMMU映射[786432,size=2146697216]IOVA->[0x7ffecfec0000]HVA。IOMMU映射[786432,size=131072]IOVA->[0x7fffd8400000]HVA。4G GPA地址区间和HVA的IOMMU映射关系已全部建立。原创 2024-03-12 14:13:28 · 487 阅读 · 0 评论 -
dpdk-vdpa中QEMU热迁移脏页log内存的分配和传递流程
QEMU:dev->vhost_ops->vhost_set_log_base调用vhost_user_set_log_base,传递fd和mmap size给dpdk-vdpa进程;log是通过vhost_log_alloc调用log->log = qemu_memfd_alloc分配的,这个会在Host上创建一个共享文件和fd;dpdk-vdpa中,调用rte_vfio_container_dma_map做IOVA到log_base(HVA)的IOMMU页表映射关系。原创 2024-03-07 18:12:44 · 271 阅读 · 0 评论 -
在QEMU中实现一个PCIe仿真设备
以qemu自带的edu设备为基础,实现一个直通PCIe设备。原创 2024-03-06 17:51:42 · 843 阅读 · 0 评论 -
Features/VT-d vIOMMU介绍
本页介绍QEMU中的VT-d仿真(guest-vIOMMU)以及所有相关内容。有关该技术的详细信息,请参阅参考资料部分。下图显示了QEMU中的一个基本设备分配用例。让我们考虑上面的一个通用PCI设备,它是连接到主机系统的真实硬件。主机可以使用通用内核驱动程序来驱动设备。在这种情况下,该设备的所有读/写都将受到主机IOMMU的保护,这是安全的。受保护的DMA如绿色箭头所示。PCI设备也可以分配给guest。通过利用主机内核中的VFIO驱动程序,设备可以由任何用户空间程序(如QEMU)独占管理。原创 2024-03-06 16:58:21 · 195 阅读 · 0 评论 -
QEMU设备直通pass through的地址映射转换
DMA内存是有Guest driver通过dma_alloc_coherent等DMA API接口分配,由于Guest中没有开启IOMMU,多以dma_alloc_coherent分配的内存的物理地址GPA就是DMA地址。GPA地址被写到Host device的寄存器中,Host device从而可以访问GPA地址。在__domain_mapping里,将IOVA(即GPA)和HVA对应的物理地址HPA的PFN填充到IOMMU的二级翻译页表项的PTE中,实现GPA->HPA的转换。第六列:映射的文件名。原创 2024-03-05 17:53:44 · 244 阅读 · 0 评论 -
iommu=pt内核参数解析
PCI总线的地址位宽是32位,所以可能存在设备无法访问到4GB以上内存地址空间的问题。但是,PCIe 3.0的总线地址位宽是64位。这意味着它可以支持高达8TB(2^64字节)的寻址空间。完全可以覆盖目前的内存地址空间范围。在linux内核中,iommu=pt是一个默认项,不添加改参数也是开启的pt模式。即device访问的DMA地址就是内存物理地址。没有iommu二级翻译转换(IOVA->PA),所以性能比开启iommu二级翻译转换高。原创 2024-03-04 15:50:17 · 2636 阅读 · 0 评论 -
IOMMU的PASID
所以CPU这边的接口就只有dma=dma_alloc(dev, size),分配了物理地址,然后映射为内核的va,然后把pa作为dma地址,CPU提供给设备,设备访问这个dma地址,就得到内存里面的那个数据了。我这个需要提醒一句,iommu用的页表,和mmu用的页表,不是同一个页表,为了容易区分,我们把前者叫做iopt,后者叫pt。等你从VFIO上detach,把你的domain删除了,这个iommu就会恢复原来的default_domain,这样你就可以继续用你的内核的dma API了。原创 2024-02-26 16:52:00 · 565 阅读 · 0 评论 -
vDPA测试环境搭建
运行 Linux 发行版的计算机。本指南使用 CentOS 9-stream,但对于其他 Linux 发行版,特别是对于 Red Hat Enterprise Linux 7,命令不应有重大变化。具有 sudo 权限的用户~ 主目录中有 25 GB 的可用空间至少 8GB 内存。原创 2024-02-23 11:04:34 · 684 阅读 · 0 评论 -
vDPA资料/文档/博客 链接
vDPA Support in Linux Kernel - Jason Wang, Red Hat原创 2024-02-19 17:11:03 · 595 阅读 · 0 评论