摘要:
一. virtio_net设备创建流程 阅读全文
摘要:
一: 创建过程关键函数 1. virtblk_probe 虚拟机在启动过程中,virtio bus上检测到有virtio块设备,就调用probe函数来插入这个virtio block设备(前端创建的virtio设备都是PCI设备,因此,在对应的virtio设备的probe函数调用之前,都会调用vir 阅读全文
摘要:
1. QEMU pipe介绍 Qemu-pipe是一个通用的虚拟设备,完成guest OS和emulator的通信功能。它为通信提供了四种服务: Tcp Unix Opengles Qemud Qemud也提供了一些子服务 "gsm" service "gps" service "hw-contro 阅读全文
摘要:
简介: 中断虚拟化中不可避免需要接触到APIC的虚拟化,其中包括IOAPIC和LAPIC。这里挖个坑,准备逐步写一下从硬件原型到软件模拟的知识,谨作学习记录。 LAPIC硬件 1. LAPIC内部寄存器布局可参考下图 大体按照功能分类如下: Timer related: CCR: Current C 阅读全文
摘要:
简介: 前几节分析了virtio机制和现有的balloon设备实现,至此我们已经知道了virtio是什么、怎么使用的,本节我们就自己实现一个virtio纯虚设备。 功能: QEMU模拟的设备启动一个定时器,每5秒发送一次中断通知GUEST GUEST对应的驱动接收到中断后讲自身变量自增,然后通过vr 阅读全文
摘要:
1.概述 根据前一章信息,virtio设备分为前端设备/通信层/后端设备,本章从后端设备设备(qemu的balloon设备为例)的初始化开始分析。 从启动到balloon设备开始初始化基本调用流程如下: balloon代码执行流程如下: 2. 关键结构 2.1 balloon设备结构 typedef 阅读全文
摘要:
一: 概要 在后端模拟出balloon设备后,gustos在启动时会扫描到此设备,遵循linux设备模型调用设备的初始化工作。Virtio-balloon属于 virtio体系,很多工作的细节需要再分析virtio的工作流程,本章暂且只分析balloon的行为,涉及virtio的部分插桩分析向后再补 阅读全文
摘要:
前言: 要进行指令模拟,我们先需要了解X86架构下的指令是长什么样子的。根据intel的编程手册我们找到了如下信息。 Intel CPU的机器指令格式如下图所示: e.g.:图片位于intel开发手册第二卷第二章的2.1 根据开发手册,一条指令由 指令前缀(Instruction Prefixes) 阅读全文
摘要:
Qemu Object Model QOM (Qemu Object Model)是Qemu实现的面向对象编程模式。Qemu是用C语言编写的,而C语言是面向过程的编程语言,无法享受面向对象编程模式针对复杂软件系统在设计模式上的优越性。为解决该问题,Qemu社区通过C语言实现了一套面向对象的编程接口, 阅读全文
摘要:
1. 概述 在传统的设备模拟中,虚拟机内部设备驱动完全不知道自己处在虚拟化环境中,所以I/O操作会完整的走 虚拟机内核栈->QEMU->宿主机内核栈,产生很多VM Exit和VM Entry,导致性能很差。Virtio方案旨在提高I/O性能。在改方案中虚拟机能够感知到自己处于虚拟化环境中,并且会加载 阅读全文