02 2021 档案

摘要:READMSR和CPUID指令在Guest中的代码执行路径学习 内核版本:5.3.0 qemu版本:4.2.0 READMSR指令 作用 读MSR,MSR由ECX(RCX)的内容指定,读出的内容保存在EDX(RDX):EAX(RAX)中. VMX相关 如果guest中执行rdmsr指令,并且以下情况 阅读全文 »
posted @ 2021-02-24 13:42 EwanHai 阅读(1549) 评论(0) 推荐(0) 编辑
摘要:VFIO(Virtual Function IO)研究 主要研究VFIO在虚拟化中的应用,但VFIO的应用不止于虚拟化. VFIO的全称是Virtual Function IO,但这个名字并不能反应它的特点,以下两个假名字更能反应VFIO的特点: Very Fast IO 由于VFIO是将设备直接透 阅读全文 »
posted @ 2021-02-24 13:39 EwanHai 阅读(5587) 评论(0) 推荐(0) 编辑
摘要:KGDB-双物理机调试内核 author: Ewan 准备工作 搭建双物理机调试Linux内核环境之前,需要: 2台物理机,均装有Linux操作系统,下文以Host和Target区分调试机和被调试机 一份需要调试的Linux源码 一根串口转USB线 attention:本文使用Target的ttyS 阅读全文 »
posted @ 2021-02-24 13:35 EwanHai 阅读(1009) 评论(0) 推荐(0) 编辑
摘要:# 在现有文件中安装操作系统 author: Ewan 创建一个镜像文件作为虚拟机操作系统的文件系统 # 创建一个镜像文件,大小为40G, 名为ubuntu18_04.img qemu-img create -f raw ubuntu18_04.img 40G 准备一个系统安装镜像,我的系统安装镜像 阅读全文 »
posted @ 2021-02-24 13:02 EwanHai 阅读(816) 评论(0) 推荐(1) 编辑
摘要:利用qemu+kgdb调试Linux系统 author:Ewan 在Guest上编译并安装需要debug的内核,需要将以下选项加入编译配置中。 CONFIG_DEBUG_KERNEL=y CONFIG_DEBUG_INFO=y CONFIG_CONSOLE_POLL=y CONFIG_KDB_CON 阅读全文 »
posted @ 2021-02-24 13:01 EwanHai 阅读(996) 评论(0) 推荐(0) 编辑
摘要:iommu-spec 要点 术语和硬件结构 Context 状态的硬件表示,用于标识设备和设备分配到的domain. PCI-E连接在北桥上,北桥内部也有可能集成设备. PCI legacy设备连接在南桥上. DMA & Interrupt Remapping就发生在北桥中,PCI-E & 南桥与处 阅读全文 »
posted @ 2021-02-24 12:59 EwanHai 阅读(1249) 评论(1) 推荐(0) 编辑
摘要:通常external-interrupt会引起vmexi,如果该external-interrupt就是给Guest的,那么hypervisor就会向Guest注入一个virtual Interrupt,那么哪个irq会被注入呢?(即在Guest IDT indexing的Interrupt vec 阅读全文 »
posted @ 2021-02-24 12:58 EwanHai 阅读(459) 评论(0) 推荐(0) 编辑
摘要:VFIO QOM对象的构造 Everything in QOM is a device QOM(Qemu Object Model)是QEMU最新的设备模型。QEMU一开始采用ad hoc,每种设备都有不同的表示方式,非常混乱。于是开发了qdev,将所有的模拟设备进行了整合,变成了一种单根结点(系统 阅读全文 »
posted @ 2021-02-24 12:57 EwanHai 阅读(906) 评论(0) 推荐(1) 编辑
摘要:IOMMU历史知识及与VFIO的联系 在虚拟化普及之前,IOMMU主要提供2种功能,避免bounce buffers的功能,创建连续DMA操作功能。 Bounce Buffers 如果外设的寻址空间小于平台(如PC)的寻址空间,例如外设只支持寻址4GB空间,但是PC支持寻址8GB,如果PC中的驱动程 阅读全文 »
posted @ 2021-02-24 12:56 EwanHai 阅读(1122) 评论(0) 推荐(0) 编辑
摘要:QTAILQ队列数据结构 这种数据结构由两种基本结构构成,分别是QTAILQ_ENTRY和QTAILQ_HEAD,前者表示队列的元素,后者表示队列的头。 #define QTAILQ_ENTRY(type) \ union { \ struct type *tqe_next; /* next ele 阅读全文 »
posted @ 2021-02-24 12:54 EwanHai 阅读(703) 评论(1) 推荐(0) 编辑
摘要:vfio_realize实际运行过程观测 使用的工具为gdb,将测试网卡通过vfio的形式透传到虚拟机中,查看vfio_realize中对于memory,中断的分配是怎样的。 用gdb启动qemu 在启动qemu之前,已经完成了以下工作: 启动host时添加了intel_iommu=on vfio- 阅读全文 »
posted @ 2021-02-24 12:53 EwanHai 阅读(2010) 评论(3) 推荐(1) 编辑
摘要:qemu-kvm的ioeventfd机制 Guest一个完整的IO流程包括从虚拟机内部到KVM,再到QEMU,并由QEMU最终进行分发,IO完成之后的原路返回。这样的一次路径称为同步IO,即指Guest需要等待IO操作的结果才能继续运行,但是存在这样一种情况,即某次IO操作只是作为一个通知事件,用于 阅读全文 »
posted @ 2021-02-24 12:52 EwanHai 阅读(3036) 评论(0) 推荐(0) 编辑
摘要:Linux的eventfd机制 eventfd初始化 Linux继承了UNIX”everything is a file”的思想,所有打开的文件都有一个fd与之对应,与QEMU一样,很多程序都是事件驱动的,也就是select/poll/epoll等系统调用在一组fd上进行监听,当fd状态发生变化时, 阅读全文 »
posted @ 2021-02-24 12:50 EwanHai 阅读(4678) 评论(0) 推荐(1) 编辑
摘要:qemu-kvm的irqfd机制 irqfd机制与ioeventfd机制类似,其基本原理都是基于eventfd。 ioeventfd机制为Guest提供了向qemu-kvm发送通知的快捷通道,对应地,irqfd机制提供了qemu-kvm向Guest发送通知的快捷通道。 irqfd机制将一个event 阅读全文 »
posted @ 2021-02-24 12:47 EwanHai 阅读(3514) 评论(0) 推荐(0) 编辑
摘要:BAR寄存器内容被BIOS修改 通过trace Intel网卡的VFIO透传过程,发现在透传到虚拟机之后,该网卡的BAR0中的内容从0xdf200000变为了0xfdba0000,这说明一定在透传的某个环节中,改变了该网卡的虚拟配置空间中的BAR0的内容。 为什么改变的不是该网卡的实际配置空间中的内 阅读全文 »
posted @ 2021-02-24 12:44 EwanHai 阅读(1225) 评论(0) 推荐(0) 编辑
摘要:中断虚拟化-内核端 由于历史原因,QEMU和KVM均独立实现了PIC、APIC(IOAPIC+LAPIC).本文档试图说明清楚KVM中实现的PIC和APIC的逻辑。 本文档首先针对PIC、APIC、“Interrupt-Window Exiting”、“Virtual Interrupt Deliv 阅读全文 »
posted @ 2021-02-24 11:36 EwanHai 阅读(2665) 评论(3) 推荐(0) 编辑
摘要:background 在以5.3为内核的ubuntu中编译3.10的内核时,出现: include/linux/compiler-gcc.h:106:30: fatal error: linux/compiler-gcc5.h错误 尝试了网上说的将当前内核(5.3)的compiler-gcc.h复制 阅读全文 »
posted @ 2021-02-24 11:19 EwanHai 阅读(3295) 评论(0) 推荐(0) 编辑
摘要:以5.3.8(最新)Linux 内核为例 下载内核源码 从https://mirrors.edge.kernel.org/pub/linux/kernel下载所需的内核源码. wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/lin 阅读全文 »
posted @ 2021-02-24 11:17 EwanHai 阅读(1130) 评论(0) 推荐(0) 编辑
摘要:编译内核 修改配置文件 本文使用的内核为linux-5.3.8,以下命令在源码根目录下执行. 生成针对x86_64架构的配置文件: make ARCH=x86_64 x86_64_defconfig 如果编译时所处的平台架构为x86,则无需添加ARCH=x86_64 选择需要编译的x86_64架构的 阅读全文 »
posted @ 2021-02-24 11:15 EwanHai 阅读(2726) 评论(0) 推荐(0) 编辑
摘要:以kvm为例 编译 当前系统内核版本: 5.3.8 当前系统内核版本对应的源代码目录: ~/下载/linux-5.3.8/ 当前系统内核版本对应的源代码目录中kvm module源码的位置: ~/下载/linux-5.3.8/arch/x86/kvm/ 当前系统存放module文件的位置: /lib 阅读全文 »
posted @ 2021-02-24 11:14 EwanHai 阅读(1348) 评论(0) 推荐(0) 编辑
摘要:最近在看《x86_x64体系探索及编程》,在制作可供bochs使用的硬盘镜像时出了一些问题,主要有以下几个: 步骤 如书中所说,做了: 使用bximage生成了硬盘镜像 对bochs的配置文件进行了配置 利用dd工具将uboot, setup, lib16二进制文件导入到hello.img中,使用的 阅读全文 »
posted @ 2021-02-24 11:09 EwanHai 阅读(2579) 评论(0) 推荐(0) 编辑
摘要:当guest software读取TSC的值时, 加上TSC_offset. VMM可以利用TSC offsetting feature, 提供给guest software错觉, 让它觉得自己运行在当前TSC之前或之后的时间. 利用TSC offset, guest software可以感知到某个 阅读全文 »
posted @ 2021-02-24 11:06 EwanHai 阅读(606) 评论(0) 推荐(0) 编辑
摘要:配置网桥 在host上查看可用网络资源 ifconfig 有enp0s31f6、enp3s0u2c4i2、lo 3个网络资源。 lo用于网络自回环的,不管 enp0s31f6是连接公司网的,但是公司linux无法上网,不管 enp3s0u2c4i2连接着我的手机,可以上网,因此使用该eth配置网桥模 阅读全文 »
posted @ 2021-02-24 11:04 EwanHai 阅读(5373) 评论(0) 推荐(0) 编辑
摘要:本文翻译自https://www.linux-kvm.org/page/Memory 主要内容为qemu/kvm的内存虚拟化的架构描述(的梗概)。 这是官网十年前的一篇文章,细节大家不要细扣,大概了解内存虚拟化和EPT的相关架构就行。 guest修改页表对host的影响 由于Linux内核的layz 阅读全文 »
posted @ 2021-02-24 11:01 EwanHai 阅读(878) 评论(0) 推荐(0) 编辑
摘要:在5.3.0-45-generic内核上,使用5.3.0的源码编译kvm,在modprobe kvm时,出现了错误: modprobe: ERROR: could not insert ‘kvm’: Exec format error 使用dmesg发现以下log: kvm: version mag 阅读全文 »
posted @ 2021-02-24 10:59 EwanHai 阅读(2602) 评论(0) 推荐(0) 编辑
摘要:kvm模块的加载 arch/x86/kvm/vmx/vmx.c 载入kvm模块时,调用顺序为module_init()->vmx_init()->kvm_init(),所以kvm_init()为核心函数 int kvm_init() { ... /* /* 1. 将vmx_x86_ops重命名为kv 阅读全文 »
posted @ 2021-02-24 10:57 EwanHai 阅读(1218) 评论(0) 推荐(0) 编辑
摘要:Linux源码版本: 5.3.0 相关数据结构 #define KVM_DEFAULT_PLE_GAP 128 // ple_gap #define KVM_VMX_DEFAULT_PLE_WINDOW 4096 //ple_window // ple_window的增大系数,每次调用grow_pl 阅读全文 »
posted @ 2021-02-24 10:53 EwanHai 阅读(1183) 评论(0) 推荐(0) 编辑
摘要:Linux源码版本: 5.3.0 guest os中的kvmclock驱动 kvmclock_init()函数主要做了以下几件事: 确定了各vcpu要使用的MSR 将各vcpu在kvmclock中实际使用的数据结构pvclock_vsyscall_time_info的物理地址利用write_msr写 阅读全文 »
posted @ 2021-02-24 10:51 EwanHai 阅读(1557) 评论(0) 推荐(0) 编辑
摘要:KSM: Kernel SamePage Merging 内核同页合并 简介 KSM允许内核在两个或多个进程(包括虚拟客户机)之间共享完全相同的内存页. KSM让内核扫描检查正在运行中的程序,并比较他们的内存,如果发现他们有内存区域或内存页是完全相同的,就将多个相同的内存合并为一个单一的内存页,并将 阅读全文 »
posted @ 2021-02-24 10:42 EwanHai 阅读(759) 评论(0) 推荐(0) 编辑
摘要:相关SDM章节: 27.2.3- Information About NMI Unblocking Due to IRET 最近收到同事发来的一个问题,即: VMCS 中的 Guest Interruptibility State field 的 bit3-Blocking by NMI 和 VM- 阅读全文 »
posted @ 2021-02-08 16:56 EwanHai 阅读(507) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示