虚拟化
jongwu3
这个作者很懒,什么都没留下…
展开
-
vCPU hotplug on Arm
vcpu hotplug在Arm上的支持原创 2022-11-07 12:35:06 · 366 阅读 · 0 评论 -
linux内核随机数初探
根据测试在系统时钟是200M的机器上samples_per_bit的值是1,也就是每次都会调用credit_init_bits.在系统时钟频率是25M的机器上samples_per_bit是2,也即每两次entropy_timer调用,调用一次credit_init_bits.系统时钟频率越高此值越大。根据测试,采样的用数量大约在250次左右,不同机器差异不大,如此,影响随机数初始化时间的因素包括硬件:系统时钟的频率;本机上大部分的调用都是entropy_timer, 即大部分的熵的来源是时钟中断。原创 2022-09-28 09:10:29 · 2402 阅读 · 0 评论 -
gdb 调试qemu
虽然打log非常方便但是gdb功能强大,有很多print不及的功能,比如找到某个函数的调用栈。gdb调试qemu其实很简单,就是 gdb --arg qemu-system-aarch64 -S + 命令行,加上-S是为了禁掉虚拟机的输出,这样就可以调试了。用b设置断点,r来run,c连续执行,bt来回溯调用栈。但是会出现一些意想不到的状况,比如出现:Thread 6 "qemu-syst...原创 2019-01-03 16:19:05 · 3050 阅读 · 0 评论 -
qemu monitor qom-get 获取device property
加上-monitor unix:qemu-monitor-socket,server,nowait启动qemu,从另一个shell进入monitor。info qom-tree可以看到所有的device以qom格式展示。通过qom-get可以得到对应设备的指定propoty。info qom-tree大概长这个样子:(qemu) info qom-treeinfo qom-tree/machine (virt-6.2-machine) /device-memory[0] (memory-r原创 2022-03-25 16:12:40 · 1562 阅读 · 0 评论 -
在arm64上基于qemu的vhost user blk设备hotplug
在kata中,vhost user blk设备是hotplug进去的。本文记录一下如果在qemu中hotplug一个vhost user blk设备。首先准备一个设备,以spdk设备为例。build spdkgit clone https://github.com/spdk/spdk.gitcd spdk; ./configure; make -j `nproc`制作vhost user blkmkdir -p block/socketsbuild/bin/spdk_tgt -原创 2022-03-19 15:52:26 · 1854 阅读 · 0 评论 -
挂载qcow2 image
如何挂载qcow2镜像翻译 2022-02-14 17:51:42 · 608 阅读 · 0 评论 -
如何给用containerd启动的kata容器添加网络
如果直接用ctr创建容器,那么容器内部是没有网络的。这是因为containerd属于CRI模块,网络是由CNI组件去完成的,因此要想有网先要搞定cni。好消息是已经有个非常好的工具可以像docker一样使用containerd的service启动有网络的容器。这就是nerdctl, 使用方法参见https://github.com/containerd/nerdctl可惜这个工具虽好但是对kata容器支持的不够完善,只能启动kata但是却没有给kata容器建立网络。我发现一个办法可以给kata添加网原创 2021-10-27 18:13:30 · 937 阅读 · 0 评论 -
GIC ITS在snapshot之后的恢复顺序
snapshot是VMM的一个特性。原理是将处于某个节点运行的VM stop并保存所有内存和寄存器的状态,然后在恢复运行时再将所有上下文restore到相应的寄存器中。本文基于kernel文档记录一下GIC ITS的恢复顺序。在kernel文档virt/kvm/devices/arm-vgic-its.rst的记录中,对gic its的恢复顺序如下:1、恢复所有客户机内存并创建vcpu;2、恢复所有gicr_*寄存器;3、提供ITS的基地址;4、恢复ITS: a、恢复...原创 2021-06-27 22:33:02 · 145 阅读 · 0 评论 -
在qemu虚拟机中使用vhost-net时如何创建多个vhost线程
本文参考了https://gist.github.com/mcastelino/43cc733e53d65ef67452ecaf78e936c2vhost-net是一种较virtio-net更为高效的网络虚拟化技术。在qemu中使用vhost-net非常容易,只需在-netdev tap,之后加上vhost=on。但是默认情况下host只会产生一个vhost线程,当虚拟机有多个核心时无法发挥最大的效率。下面展示一下如何创建与vcpu数量匹配的vhost线程数。qemu \...-netdev.原创 2021-03-03 21:42:20 · 896 阅读 · 1 评论 -
Armv8架构虚拟化介绍
https://calinyara.github.io/technology/2019/11/03/armv8-virtualization.htmlNOVEMBER-3-20191 综述本文描述了Armv8-A AArch64的虚拟化支持。包括stage 2页表转换,虚拟异常,以及陷阱。本文介绍了一些基础的硬件辅助虚拟化理论以及一些Hypervisor如何利用这些虚拟化特性的例子。文本不会讲述某一具体的Hypervisor软件是如何工作的以及如何开发一款Hypervisor软件。通过阅读本文转载 2021-01-05 22:02:19 · 1163 阅读 · 1 评论 -
编译qemu/arm64的uefi
在arm64上启动qemu虚拟机有两种方式,一种是通过-kernel 的方式直接direct kernel boot,另一种是先启动uefi在bootkernel。本文记录一下怎么编译qemu/arm64 的uefi。uefi可以大概理解为bios的升级版。它是一个开放的标准,并没有官方的实现。目前用的比较多的实现是intel开源的https://github.com/tianocore/edk2。这个edk2是一个可以跨平台编译uefi的项目,arm64也是用的这个代码。编译主要是参照arm的开发原创 2021-01-05 15:31:54 · 4105 阅读 · 0 评论 -
vfio设备直通虚拟机
vfio设备直通虚拟机可以使虚拟机直接与虚拟机交互获得较好的性能。关于vfio的详细讲解我觉得李强的《qemu/kvm源码分析与应用》讲的很好。本文只讲一下如何使用。环境要求:host kernel:设置如下configCONFIG_VFIO_IOMMU_TYPE1=m CONFIG_VFIO=mCONFIG_VFIO_PCI=m关闭 CONFIG_VFIO_NOIOMMU重新编译安装kernel后重新启动。绑定设备到vfio,以网卡设备为例 lspci -D | grep原创 2020-10-16 15:53:16 · 1963 阅读 · 0 评论 -
如何在arm64 host上创建arm32 kvm虚拟机
大约在今年五六月份(kernel 5.7),arm kernel社区的maintainer Marc Zyngier移除了对arm32 kvm的支持,也就是在kernel 5.7以后不能在arm32的host上创建kvm虚拟机。但是在arm64的host上还是可以创建arm32 kvm虚拟机的,本文就介绍一下如何在arm64的host上创建arm32虚机。arm64的host最容易获得的是树莓派,最好在树莓派4上安装64位的ubuntu。本文以树莓派4-ubuntui系统为例。创建虚机需要的原料原创 2020-09-14 13:45:48 · 1160 阅读 · 0 评论 -
linux的ksm特性的使用限制
ksm(kernel same-page merging)是Linux kernel合并相同内存页面的特性,初期为虚拟化所用,在非虚拟化下也有类似的场景。ksm的使用是有限制的。ksm只能用来合并私有匿名映射(文档是这么写的).但是查看kernel源码我没发现对文件映射的限制。在很多场景下,私有文件映射也是会产生大量相同页面的,用来进行合并是很合适的,所以我猜测ksm是可以用来对私有文件映射进行合并。此外,对于dax的页面,ksm也是不能合并的。这些限制从code中很容易找到:case MADV.原创 2020-07-13 14:57:47 · 689 阅读 · 0 评论 -
qemu虚拟机的实时时钟从哪里来
对于物理机而言时间是实时时钟(rtc)+启动后时间(boot up time)的和。rtc一般是存在于cmos存储中,它是一个类似于flash的东西,掉电不失,可读写的存储空。rtc存储在里面,每次机器启动的时候读一次就知道机器刚刚启动时的时间了。对于虚机要想知道启动时的时间就需要vmm提供类似于rtc的东西。也就是模拟rtc设备。对于qemu-kvm虚拟机,qemu就负责模拟rtc。qe...原创 2020-03-12 15:10:50 · 3297 阅读 · 1 评论 -
Linux中的dax特性
在Linux中由于块设备一般属于低速设备,访问成本很高,为了减少访问块设备的次数内核一般会将访问磁盘的内容缓存起来,等下次访问时直接从内存中获得结果,这大大提高了系统的性能。所以说缓存是个好东西。但是随着技术进步,一些类似于内存的块设备出现了,主要的有Intel的nvdimm设备,它是一种既可以当磁盘又可以当内存使用的存储设备,它的名字是非易失性内存,速度可以比肩内存,而又不会掉电丢数据。如果...原创 2020-03-10 18:13:07 · 2705 阅读 · 0 评论 -
armv8虚拟内存架构简述
粗略看了一下armv8的虚拟内存的文档。记录一下,细节留待以后用到时再去细究。程序在运行的时候使用的内存一般是虚拟内存,需要经过转换才能接触到物理内存。其中的底层支持就是硬件架构,现代架构都是支持硬件虚拟内存转换的,一般就是说提供MMU。armv8架构作为现代架构也不例外,但是不太一样的是armv8架构支持两级转换:stage 1 和stage 2.上图包含了安全世界和非安全世界的东西...原创 2020-03-01 17:00:25 · 2341 阅读 · 0 评论 -
virtio前端驱动详解
前段时间大致整理了下virtIO后端驱动的工作模式以及原理,今天就从前端驱动的角度描述下目前Linux内核代码中的virtIO驱动是如何配合后端进行工作的。注:本节代码参考Linux 内核3.11.1代码virtIO驱动从架构上来讲可以分为两部分,一个是其作为PCI设备本身的驱动,此驱动需要提供一些基本的操作PCI设备本身的函数比如PCI设备的探测、删除、配置空间的设置和寄存器空间的读写等...转载 2020-02-17 11:00:24 · 2066 阅读 · 0 评论 -
virtio后端驱动详解
virtIO是一种半虚拟化驱动,广泛用于在XEN平台和KVM虚拟化平台,用于提高客户机IO的效率,事实证明,virtIO极大的提高了VM IO 效率,配备virtIO前后端驱动的情况下,客户机IO效率基本达到和宿主机一样的水平。咱们本次的分析以qemu-kvm架构的虚拟化平台为基础,分析virtIO前后端驱动。当然后端就指有qemu实现的虚拟PCI设备,而前端自然就是客户操作系统中的virtIO驱...转载 2020-02-17 10:59:04 · 921 阅读 · 0 评论 -
转载:virtIO前后端notify机制详解
本来这是在前端驱动后期分析的,但是这部分内容比较多,且分析了后端notify前端的机制,所以还是单独拿出一节分析比较好!还是拿网络驱动部分做案例,网络驱动部分有两个队列,(忽略控制队列):接收队列和发送队列;每个队列都对应一个virtqueue,两个队列之间是互不影响的。前后端利用virtqueue的方式如下图所示:这里再详细的描述下,当两个queue都需要客户机填充buffer,...转载 2020-02-17 10:57:37 · 281 阅读 · 0 评论 -
转载:virtIO前后端notify机制详解
本来这是在前端驱动后期分析的,但是这部分内容比较多,且分析了后端notify前端的机制,所以还是单独拿出一节分析比较好!还是拿网络驱动部分做案例,网络驱动部分有两个队列,(忽略控制队列):接收队列和发送队列;每个队列都对应一个virtqueue,两个队列之间是互不影响的。前后端利用virtqueue的方式如下图所示:这里再详细的描述下,当两个queue都需要客户机填充buffer,...转载 2020-02-17 10:57:07 · 654 阅读 · 0 评论 -
转载:virtIO前后端notify机制详解
本来这是在前端驱动后期分析的,但是这部分内容比较多,且分析了后端notify前端的机制,所以还是单独拿出一节分析比较好!还是拿网络驱动部分做案例,网络驱动部分有两个队列,(忽略控制队列):接收队列和发送队列;每个队列都对应一个virtqueue,两个队列之间是互不影响的。前后端利用virtqueue的方式如下图所示:这里再详细的描述下,当两个queue都需要客户机填充buffer,...转载 2020-02-17 10:56:36 · 237 阅读 · 0 评论 -
armv8虚拟化架构简述
x86的虚拟化资料很多,与之相对的arm的虚拟化的讲解较少,这几天通过查找arm的官方文档稍微对arm的虚拟化架构有些了解,记下来留给以后查看。由于arm的虚拟化主要体现在armv8-a架构上,我们就只讲这个架构上的东西。下面就简称arm架构。虚拟化技术包括cpu、memory和device的虚拟化,了解了这三个就基本涵盖了虚拟化各方面。在讲arm虚拟化方案之前我们先讲一下armv8的ex...原创 2020-02-16 23:07:49 · 1870 阅读 · 0 评论 -
浅说ksm的适用范围
ksm(Kernel Samepage Merging)是linux内核中一个feature,通过合并内存中的相同页面来减小内存占用,常用语虚拟化中。ksm合并的一般是用户分配的内存(能不能用在内核页面我还不清楚)。关键的是它只能合并私有的匿名页面。想了解更多的有关页面的分类可以查看man mmap。如果想让自己分配的页面可以被ksm优化,那就必须显示声明出来。方法是使用madvise接口,一...原创 2020-02-14 10:32:11 · 499 阅读 · 0 评论 -
runc容器中的”钓鱼执法“
如今最流行的容器运行时就是runc和kata-container。一般而言runc比kata效率高,kata比runc安全。我在测试中发现他们之间不易察觉的另一个隐秘的区别, 我把它叫“钓鱼执法”举个例子:docker run -d -m 4G tensorflow tensorflow这个例子我没运行过,我的意思是当我们给容器设定一个内存限制时,对于runc和kata将有不同的表现...原创 2019-12-24 12:03:21 · 351 阅读 · 0 评论 -
转载: QEMU深入浅出: guest物理内存管理
作 者:Stefan Hajnoczi领 域:Open source and virtualization适宜读者:对虚拟化有一定了解背景知识:KVM,Qemu前言:众所周知,内存是计算机系统的一个关键组成部分。使用Qemu-kvm方式创建虚拟机时,guest物理内存是由几个不同层面共同管理的。本篇基于Qemu2.5的代码对管理guest物理内存的这几个重要层面...转载 2019-12-16 20:07:58 · 820 阅读 · 0 评论 -
转: qemu-kvm内存管理
记得很早之前分析过KVM内部内存虚拟化的原理,仅仅知道KVM管理一个个slot并以此为基础转换GPA到HVA,却忽略了qemu端最初内存的申请,而今有时间借助于qemu源码分析下qemu在最初是如何申请并管理虚拟机内存的,坦白讲,还真挺复杂的。一、概述qemu-kvm 模型下的虚拟化引擎,内存虚拟化部分要说简单也挺简单,在虚拟机启动时,有qemu在qemu进程地址空间申请内存,即内存的申请...转载 2019-12-16 18:53:52 · 899 阅读 · 0 评论 -
给qemu虚拟机创建网络
这个文档写的很好有时间翻译一下https://gist.github.com/extremecoders-re/e8fd8a67a515fee0c873dcafc81d811c原创 2019-11-13 15:58:22 · 375 阅读 · 0 评论 -
使用Qemu在x86_64机器上安装aarch64的ubuntu server 16.04
转载自https://morningd.github.io/2018/01/08/how-to-run-aarch64-ubuntu-server-cloudimg-on-x86-64/0. 安装Qemu & 下载ubuntu我就说说Ubuntu的镜像吧,我下载是xenial-server-cloudimg-arm64-uefi1.img,下载地址。选择arm64和uefi1结尾的img镜...转载 2018-05-17 17:18:12 · 6788 阅读 · 0 评论 -
x86 kvm 基本原理
转自http://blog.chinaunix.net/uid-14528823-id-4133210.htmlKVM:Kernel-based Virtual Machine,是基于Linux内核的开源虚拟化解决方案,从2.6.20版本开始被合入kernel主分支维护。最初只支持X86平台的上支持VMX或者SVM的CPU,不久后被确认为标准Linux内核的虚拟化方案并逐步支持S390、IA64和...转载 2018-05-18 13:33:15 · 611 阅读 · 0 评论 -
一种简单的qemu网络配置方法
qemu上网是一件头疼的事,搜索了很多方法都是不可靠的,最终想到了一种权宜之计。qemu上网的一种主要的方式是在host上配置好网桥,将tap设备添加到网桥上,在起qemu虚拟机的时候用tap作为网络设备,这种方法的关键是怎么在host上配置可以上网的网桥。利用现成的可以用的网桥就是我要讲的权宜之计,docker0就是这种可以用的网桥。docker默认的网络模式是桥接,就是在host上创建一个do...原创 2018-05-29 16:12:11 · 12527 阅读 · 5 评论 -
acpi memory hotplug文档链接
https://events.static.linuxfound.org/sites/events/files/lcjp13_chen.pdf这篇文章讲acpi memory hotplug,讲得挺好有时间翻译一下。转载 2019-01-03 18:10:28 · 278 阅读 · 0 评论 -
基于qemu的虚拟机迁移(migration)
在云计算中,热迁移是一项比较重要的feature。它的应用场景比较多也比较重要,比如负载均衡。在qemu中,热迁移(live migration)只是其多种迁移(migration)功能的一项。经过一个月的有关migration的调试,也算对migration有了一个大体上的了解。在我初次接触虚拟机迁移时发现网上的资料多事热迁移相关的,足见其在所有迁移方式中是最为重要的,但是我所调试的并非热迁...原创 2019-03-04 13:47:24 · 4288 阅读 · 1 评论 -
qemu起arm64虚拟机
参考https://gist.github.com/oznu/ac9efae7c24fd1f37f1d933254587aa4首先下载image,https://cloud-images.ubuntu.com/本文以ubuntu-16.04-server-cloudimg-arm64-uefi1.img为例。wgetubuntu-16.04-server-cloudimg-arm...原创 2019-05-17 11:14:45 · 5928 阅读 · 1 评论 -
qemu起虚拟机的网络配置
来自https://gist.github.com/extremecoders-re/e8fd8a67a515fee0c873dcafc81d811cSetting up Qemu with a tap interfaceThere are two parts to networking within QEMU:The virtual network device that is pr...转载 2019-05-23 16:47:27 · 2833 阅读 · 0 评论 -
虚拟机挂载9pfs的时间不一致问题
在kata的实现中是利用9pfs将host上的rootfs挂载成容器的rootfs,这可能会引起一个时间不一致问题。当虚拟机和host的时间没有高度同步时,由于在9p文件系统中进行文件创建时实际上是在host上创建,这样时间戳就是host的时间,也就是这个文件的时间与当前guest系统是不一致的。...原创 2019-08-21 13:54:32 · 520 阅读 · 0 评论 -
qemu的cpu 和内存虚拟化
转载:https://www.cnblogs.com/sammyliu/p/4543597.htmlKVM 介绍(2):CPU 和内存虚拟化学习 KVM 的系列文章: (1)介绍和安装(2)CPU 和 内存虚拟化(3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton)(4)I/O PCI/PCIe设备直接分配和 SR-IOV(5)libvirt 介绍(6)Nova 通过 ...转载 2018-05-10 16:38:58 · 7620 阅读 · 2 评论