qemu-kvmから追う仮想マシンの一生
前回はLinux KVMのソースコードを読んできましたが,
qemu-kvmは,
qemu-kvmの入手先
qemu-kvmの開発プロジェクトによる一次成果物は,
- kernel virtual machine - SourceForge.
net - URL:http://
sourceforge. net/ projects/ kvm/
本記事は,
qemu-kvmの一生 = 仮想マシンの一生
qemu-kvmは,
qemu-kvmプロセスは,
qemu-kvm-0.
149 int kvm_init(void)
150 {
151 int fd;
152 int r, gsi_count;
153
154
155 fd = open("/dev/kvm", O_RDWR);
156 if (fd == -1) {
157 perror("open /dev/kvm");
158 return -1;
159 }
《中略》
211 return kvm_create_context();
212
213 out_close:
214 close(fd);
215 return -1;
216 }
kvm_
qemu-kvm-0.
308 int kvm_create_vm(kvm_context_t kvm)
309 {
310 int fd;
311 #ifdef KVM_CAP_IRQ_ROUTING
312 kvm->irq_routes = qemu_mallocz(sizeof(*kvm->irq_routes));
313 kvm->nr_allocated_irq_routes = 0;
314 #endif
315
316 fd = kvm_ioctl(kvm_state, KVM_CREATE_VM, 0);
317 if (fd < 0) {
318 fprintf(stderr, "kvm_create_vm: %m\n");
319 return -1;
320 }
321 kvm_state->vmfd = fd;
322 return 0;
323 }
この後,
qemu-kvmのスレッドモデル
以下に,
qemu-kvmは,
仮想プロセッサの生成
仮想プロセッサの初期化処理は,
qemu-0.
942 void pc_cpus_init(const char *cpu_model)
943 {
944 int i;
945
946 /* init CPUs */
947 for(i = 0; i < smp_cpus; i++) {
948 pc_new_cpu(cpu_model);
949 }
950 }
pc_
265 void qemu_init_vcpu(void *_env)
266 {
267 CPUState *env = _env;
268
269 env->nr_cores = smp_cores;
270 env->nr_threads = smp_threads;
271 if (kvm_enabled())
272 kvm_init_vcpu(env);
273 return;
274 }
kvm_
qemu-kvm-0.
1470 int kvm_init_vcpu(CPUState *env)
1471 {
1472 pthread_create(&env->kvm_cpu_state.thread, NULL, ap_main_loop, env);
1473
1474 while (env->created == 0) {
1475 qemu_cond_wait(&qemu_vcpu_cond);
1476 }
1477
1478 return 0;
1479 }
上記の過程により,