From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wang Hui Subject: Re: [PATCH] KVM/X86: vpmu migration, make perf_event associated with vcpu thread Date: Sat, 30 Nov 2013 19:42:38 +0800 Message-ID: <5299CF2E.2060802@gmail.com> References: <5298D5FC.8030709@gmail.com> <20131130105419.GC21068@minantech.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Cc: Paolo Bonzini , kvm To: Gleb Natapov Return-path: Received: from mail-pd0-f195.google.com ([209.85.192.195]:50985 "EHLO mail-pd0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751579Ab3K3Lmq (ORCPT ); Sat, 30 Nov 2013 06:42:46 -0500 Received: by mail-pd0-f195.google.com with SMTP id v10so4806625pde.2 for ; Sat, 30 Nov 2013 03:42:45 -0800 (PST) In-Reply-To: <20131130105419.GC21068@minantech.com> Sender: kvm-owner@vger.kernel.org List-ID: On 2013/11/30 18:54, Gleb Natapov wrote: > On Sat, Nov 30, 2013 at 01:59:24AM +0800, Wang Hui wrote: >> After applying Paolo's patch, vpmu's data was migrated correctly. >> https://patchwork.kernel.org/patch/2850813/ >> >> But when I wrote a test module to make IA32_PMC1 to count the event of unhalted >> cpu-cycles, after migration the value of IA32_PMC1 never grows up again. I found >> that after migration perf_event was created exactly, but when it was created, >> "current" is qemu's main thread which won't enter no-root mode, so the count of >> perf_event will never increase. >> >> I have tried pid in the struct of kvm_vcpu to get the vcpu thread's task_struct, >> but after migration when create perf_event, pid is pointed to qemu's main thread >> but not vcpu thread because of the pid switching in vcpu_load. I don't understand >> this very well, I think vcpu is created in qemu_kvm_cpu_thread_fn, which is the >> vcpu thread, use the pid of current is enough, why switch is needed? >> > > Because the fact that thread that creates vcpu is the one that will > "run" the vcpu is QEMU implementation detail. Other userspace may create > all vcpus in one thread and then handle each one to a dedicated thread. Your > code will not work for such userspace. You need to use pid and reprogram all mmu > counters when it changes. > Thank you Gleb, my thought was too simple, I will try pid.