qemu_init_vcpu //创建一个入口为kvm_vcpu_thread_fn的线程 create_vcpu_thread kvm_start_vcpu_thread //创建vcpu线程,线程名为"CPU %d/KVM" qemu_thread_create //调用pthread_create创建vcpu线程,入口为kvm_vcpu_thread_fn (kvm_vcpu_thread_fn) //kvm_vcpu_thread_fn是vcpu的本体,后面重点分析 ^_^ [...
static void *qemu_kvm_cpu_thread_fn(void *arg) { CPUState *cpu = arg; cpu->thread_id = qemu_get_thread_id(); cpu->can_do_io = 1; current_cpu = cpu; kvm_init_vcpu(cpu); //KVM_CREATE_VCPU kvm_init_cpu_signals(cpu); /* signal CPU creation */ cpu->created = true; qemu...
pc_init1的函数调用关系如下图所示,对于每一个即将创建的VCPU(个数由命令行传入smp_cpus),执行cpu_x86_init,逐层调用后,由qemu_kvm_start_vcpu创建一个VCPU线程,新的VCPU线程将执行qemu_kvm_cpu_thread_fn函数,逐层调用后经过kvm_vcpu_ioctl系统调用切换到核心态,由KVM执行VCPU的创建工作,包括创建VMCS等非根模...
上面是qemu效仿glib 实现的主循环,但主循环存在一些缺陷,比如在主机使用多CPU的情况下伸缩性受到限制,同时主循环使用了qemu全局互斥锁,从而导致vCPU线程和主循环存在锁竞争,导致性能下降。为了解决这个问题,qemu引入了iothread 事件循环,把一些IO操作分配给iothread,从而提高IO性能。 Iothread的创建方式是在qemu启动的时...
上面是qemu效仿glib 实现的主循环,但主循环存在一些缺陷,比如在主机使用多CPU的情况下伸缩性受到限制,同时主循环使用了qemu全局互斥锁,从而导致vCPU线程和主循环存在锁竞争,导致性能下降。为了解决这个问题,qemu引入了iothread 事件循环,把一些IO操作分配给iothread,从而提高IO性能。
main_impl()//vl.cmachine_class->init()::pc_init1()//pc_piix.cpc_new_cpu()//pc_piix.cx86_cpu_realizefn()//cpu.cqemu_init_vcpu()//cpus.cqemu_hax_start_vcpu()//cpus.cqemu_hax_cpu_thread_fn()//cpus.chax_init_vcpu()//hax-all.chax_vcpu_creat()//hax-all.chax_host_create...
kernel_bootstrap_thread/bsd 中,主要是启动其他的系统维护线程构筑 MacOS 的运行时环境,如初始化 I/O Kit 框架,初始化 BSD 子系统。其间还会根据 DTB 的配置来设置 SMP,唤醒其他 VCPU;其中, I/O Kit 是MacOS XNU 内核为设备驱动程序提供的完整的运行时环境,用户可以基于 I/O Kit 提供的面向对象能力来快速...
int vcpu_fd; // vCPU 句柄 pthread_t vcpu_thread; // vCPU 线程句柄struct kvm_run *kvm_run; // KVM 运行时结构,也可以看做是上下文 int kvm_run_mmap_size; // 运行时结构大小struct kvm_regs regs; // vCPU的寄存器struct kvm_sregs sregs; // vCPU的特殊寄存器 ...
显示vcpu 脏速率信息。 infosgx 显示英特尔 SGX 信息。 infovia 显示来宾 mos6522 VIA 设备。 stats 显示运行时收集的统计信息 整数表达式 监视器理解每个整数参数的整数表达式。您可以使用寄存器名称来获取特定 CPU 寄存器的值,方法是在它们前面加上 $前缀。
qemu中一个tcg线程可以模拟多个vcpu,也可以多个tcg线程每个对应模拟一个vcpu,后者称为Multi-Threaded TCG (MTTCG),是否为MTTCG由全局变量bool mttcg_enabled决定。对于此处的示例MTTCG是开启状态,不过简单起见这里假设机器只有一个vcpu。 先来看一下TCG的一些重要数据结构: ...