r = kvm_dev_ioctl_create_vm(arg); break; case KVM_CHECK_EXTENSION: r = kvm_vm_ioctl_check_extension_generic(NULL, arg); break; case KVM_GET_VCPU_MMAP_SIZE: if (arg) goto out; r = PAGE_SIZE; /* struct kvm_run */ #ifdef CONFIG_X86 r += PAGE_SIZE; /* pio data page */ ...
1、QEMU创建虚拟机发起:kvm_ioctl(s, KVM_CREATE_VM, type); KVM中kvm_dev_ioctl判断参数-》kvm_dev_ioctl_create_vm-》kvm_create_vm该函数中创建并初始化了对应qemu模拟的内存条模型kvm->memslots【kvm结构体】 2、QEMU创建vcpu发起:kvm_vm_ioctl(s, KVM_CREATE_VCPU, (void *)kvm_arch_vcpu_id(cpu...
主要创建流程就是dev->vm->vcpu,这期间最重要的数据结构为kvm_x86_ops(在vmx.c中定义),但是在ioctl函数中展现的形式与实际调用的函数形式有些许不同. 如在创建vm时,函数调用流程为: kvm_dev_ioctl_create_vm()->kvm_create_vm()->kvm_arch_alloc_vm() 在kvm_arch_alloc_vm()中,具体实现只有一句return...
unsigned int ioctl, unsigned long arg) { long r = -EINVAL; switch (ioctl) { case KVM_GET_API_VERSION: if (arg) goto out; r = KVM_API_VERSION; break; case KVM_CREATE_VM: r = kvm_dev_ioctl_create_vm(arg); 可以看到,这里ioctl需要提供KVM_CREATE_VM,之后内核调用函数kvm_dev_ioctl_cr...
r = kvm_dev_ioctl_create_vm(arg); break; case KVM_CHECK_EXTENSION: r = kvm_vm_ioctl_check_extension_generic(NULL, arg); break; ... } 核心API 介绍了KVM设备对象和通信方式后,这里会介绍KVM API的三个调用层次,并列举说明核心的API:
r = kvm_dev_ioctl_create_vm(arg); break; case KVM_CHECK_EXTENSION: r = kvm_vm_ioctl_check_extension_generic(NULL, arg); break; case KVM_GET_VCPU_MMAP_SIZE: if (arg) goto out; r = PAGE_SIZE; /* struct kvm_run */ #ifdef CONFIG_X86 ...
root@host:virsh create test.xml 其中“test.xml”指定步骤(2)中创建的xml文件 这样一个虚拟机便创建起来了。 1.2.3 xml配置文件的编写 利用virsh工具创建虚拟机必须编写xml配置文件,该文件指定虚拟机的各项参数,比如虚拟机名称、磁盘镜像的位置、内存大小、显示配置等等。下面给出一个简单的配置文件的例子。
kvm_dev_ioctl代码如下: staticlongkvm_dev_ioctl(struct file *filp,unsignedintioctl,unsignedlongarg){intr = -EINVAL; switch(ioctl) {caseKVM_GET_API_VERSION:if(arg)gotoout;r = KVM_API_VERSION;break;caseKVM_CREATE_VM:r = kvm_dev_ioctl_create_vm(arg);break;caseKVM_CHECK_EXTENSION:r = kvm...
一个VM(虚拟机)就是一个传统的Linux进程,VM运行于Qemu-KVM进程的地址空间中; VMM向上层提供/dev/kvm接口,/dev/kvm是一个标准的字符设备,通过ioctl接口控制;Qemu-kvm通过调用/dev/kvm设备的ioctl接口,对虚拟机进行相关控制,比如创建虚拟机、创建VCPU、运行虚拟机等; 为提升KVM虚拟机中的IO性能,KVM还提供了Virtio...
kvm_dev_ioctl_create_vm 首先创建vm,然后挂载vmfd的ioctl接口来提供vm的控制 staticintkvm_dev_ioctl_create_vm(unsignedlongtype){ kvm = kvm_create_vm(type);//创建VMr = get_unused_fd_flags(O_CLOEXEC); file = anon_inode_getfile("kvm-vm", &kvm_vm_fops, kvm, O_RDWR);//挂载vmfd的ioctl...