
虚拟化问题解决
文章平均质量分 59
Jorhson_Deng
这个作者很懒,什么都没留下…
展开
-
关于qemu进程的一些思考
1. VM中的进程和线程是如何在物理机(宿主机)上体现的?在Qemu进程中,通过对每个vCPU创建线程,然后调用ioctl_kvm系统调用陷入VMEntry,进入到non-root模式,去执行Guest操作系统代码。从物理机视角,对每个vCPU都是一个物理机上的线程,并且在qemu的进程中。但从Guest的角度来看,进入到锈迹中之后,仍然可以创建很多进程和线程,这些进程和线程在宿主机上是如何表现的?即若虚拟机中创建一个进程,宿主机上的qemu进程中的线程数量会增加吗?答案是否定的,因为在宿主原创 2022-04-12 17:57:03 · 2447 阅读 · 0 评论 -
libvirt初始化流程分析
libvirtd daemon初始化流程比较复杂,本文对代码流程进行初步分析,可能有不对的地方,随时会进行更新和补充。总体代码流程main{remote/remote_deamon.c} | |--daemonConfigLoadFile{读取libvid.conf配置项} | |--Decided on pid file path '/usr/local/var/run/libvirtd.pid' | |--virDaemonUnixSocketPaths{获取unix对应的sock原创 2022-04-01 17:29:10 · 1237 阅读 · 2 评论 -
Libvirt的job机制3--基本原理
在Job机制简介中介绍了在libvirt中调用接口时如何使用Job机制;在条件变量基本原理中介绍了条件变量的一些基本原理,这个是Job机制的基础。本文主要介绍Job机制中用到的一些函数、结构体等变量,分析其具体的原理和用法。在Job机制简介中已经介绍了Job中condition的类型:分别是asynchronous, agent and normal.参数变量定义:qemuDomainJobtypedef enum { QEMU_JOB_NONE = 0, /* Alwa原创 2022-01-22 22:06:35 · 797 阅读 · 2 评论 -
Libvirt的job机制2--条件变量基本原理
上篇介绍了libvirt中的job机制是如何使用的,在介绍job机制的原理之前,需要介绍条件变量是如何使用的,因为在libvirt中使用的job机制,是基于条件变量的。条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待“条件变量的条件成立”;另一个线程使得“条件成立”(即发出条件变量)。为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起。条件变量创建int pthread_cond_init(pthread_cond_t *cond, pthread_co原创 2022-01-22 16:12:24 · 609 阅读 · 0 评论 -
Libvirt的job机制1--Job机制简介
本文章针对libvirt job机制做了一些说明和介绍,后续会随着认识的不断增加,更新该内容!Job机制简介QEMU driver 使用三种job conditions: asynchronous, agent and normal.Async job 条件变量(condition)用于长时间运行的jobs(eg:migration),通常包含多个monitor command,允许在这些jobs运行时调用有限的monitor command sets。 这允许客户端,例如,查询统计数据(que原创 2022-01-21 17:52:46 · 789 阅读 · 0 评论 -
libvirt save接口扩展
背景想让libvirt在执行save之后,能够处于paused状态,而不是直接关机;对接口进行扩展,增加flags位,实现该功能。代码实现需要支持python API调用和virsh 命令执行,改变的文件如下: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory原创 2022-01-19 09:21:56 · 380 阅读 · 0 评论 -
Centos8开启大页内存方法
在计算节点上修改/etc/default/grub文件,在GRUB_CMDLINE_LINUX中加上:hugepagesz=<pagesize>hugepages=<pagenumber> default_hugepagesz=< pagesize >保存退出;然后执行grub2-mkconfig -o /boot/grub2/grub.cfg若是efi启动执行grub2-mkconfig -o /boot/efi/EFI/centos/gr原创 2022-01-12 10:50:59 · 2364 阅读 · 4 评论 -
虚拟化问题定位--无法热挂载和热卸载磁盘
问题背景:在环境中执行磁盘添加和卸载的命令时,发现会报出如下的错误:virsh detach-disk vm1 vdberror: Failed to detach diskerror: internal error: unable to execute QEMU command 'device_del': Bus 'pci.0' does not support hotplugging原因是在虚拟机的xml文件中缺少features的属性: <features>原创 2022-01-03 16:05:30 · 1201 阅读 · 0 评论 -
虚拟化问题定位--存在持续IO的情况无法卸载云硬盘
问题背景介绍:虚拟机操作系统centos挂载数据盘vdb(将数据盘进行格式化,并挂载到文件中)执行命令数据copy命令:time dd if=/dev/zero of=vdb/test bs=1M count=100000 通过命令卸载云硬盘发现卸载不成功,命令如下:virsh detach-disk domain vdb --livevirsh qemu-monitor-command domain --hmp info block代码分析virDomainDeta原创 2021-12-24 15:09:53 · 505 阅读 · 0 评论 -
虚拟化问题定位--内存恢复之后无法挂卸载ISO文件
问题背景:对虚拟机执行save和restore,或者managedsave之后,再start,则系统起来之后,无法挂载ISO文件,报出的错误是:libvirtError:internal error:unable to execute QEMU command ‘blockdev-remove-medium’:Tray of device 'ide0-1-0' is not open。挂载ISO和卸载ISO的命令是:domain.updateDeviceFlags(device_xml, f原创 2021-11-19 14:47:50 · 1673 阅读 · 0 评论