All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kai Huang <kai.huang@linux.intel.com>
To: Xiao Guangrong <guangrong.xiao@linux.intel.com>, pbonzini@redhat.com
Cc: gleb@kernel.org, mtosatti@redhat.com, kvm@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH 04/11] KVM: page track: add the framework of guest page tracking
Date: Wed, 16 Dec 2015 15:33:18 +0800	[thread overview]
Message-ID: <567113BE.2000207@linux.intel.com> (raw)
In-Reply-To: <566FD377.8040903@linux.intel.com>



On 12/15/2015 04:46 PM, Xiao Guangrong wrote:
>
>
> On 12/15/2015 03:06 PM, Kai Huang wrote:
>> Hi Guangrong,
>>
>> I am starting to review this series, and should have some comments or 
>> questions, you can determine
>> whether they are valuable :)
>
> Thank you very much for your review and breaking the silent on this 
> patchset. ;)
>
>
>>> +static void page_track_slot_free(struct kvm_memory_slot *slot)
>>> +{
>>> +    int i;
>>> +
>>> +    for (i = 0; i < KVM_PAGE_TRACK_MAX; i++)
>>> +        if (slot->arch.gfn_track[i]) {
>>> +            kvfree(slot->arch.gfn_track[i]);
>>> +            slot->arch.gfn_track[i] = NULL;
>>> +        }
>>> +}
>>> +
>>> +int kvm_page_track_create_memslot(struct kvm_memory_slot *slot,
>>> +                  unsigned long npages)
>>> +{
>>> +    int  i, pages = gfn_to_index(slot->base_gfn + npages - 1,
>>> +                  slot->base_gfn, PT_PAGE_TABLE_LEVEL) + 1;
>>> +
>>> +    for (i = 0; i < KVM_PAGE_TRACK_MAX; i++) {
>>> +        slot->arch.gfn_track[i] = kvm_kvzalloc(pages *
>>> +                        sizeof(*slot->arch.gfn_track[i]));
>>> +        if (!slot->arch.gfn_track[i])
>>> +            goto track_free;
>>> +    }
>>> +
>>> +    return 0;
>>> +
>>> +track_free:
>>> +    page_track_slot_free(slot);
>>> +    return -ENOMEM;
>>> +}
>> Is it necessary to use the 'unsigned long npages' pareameter? In my 
>> understanding you are going to
>
> The type, 'int', is used here as I followed the style of 'struct 
> kvm_lpage_info'.
>
> 4 bytes should be enough to track all users and signed type is good to 
> track
> overflow.
>
>> track all GFNs in the memory slot anyway, right? If you want to keep 
>> npages, I think it's better to
>> add a base_gfn as well otherwise you are assuming you are going to 
>> track the npages GFN starting
>> from slot->base_gfn.
>
> Yes, any page in the memslot may be tracked so that there is a index 
> for every
> page.
>
>>
>>> +
>>> +void kvm_page_track_free_memslot(struct kvm_memory_slot *free,
>>> +                 struct kvm_memory_slot *dont)
>>> +{
>>> +    if (!dont || free->arch.gfn_track != dont->arch.gfn_track)
>>> +        page_track_slot_free(free);
>>> +}
>>> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
>>> index c04987e..ad4888a 100644
>>> --- a/arch/x86/kvm/x86.c
>>> +++ b/arch/x86/kvm/x86.c
>>> @@ -7838,6 +7838,8 @@ void kvm_arch_free_memslot(struct kvm *kvm, 
>>> struct kvm_memory_slot *free,
>>>               free->arch.lpage_info[i - 1] = NULL;
>>>           }
>>>       }
>>> +
>>> +    kvm_page_track_free_memslot(free, dont);
>>>   }
>>>   int kvm_arch_create_memslot(struct kvm *kvm, struct 
>>> kvm_memory_slot *slot,
>>> @@ -7886,6 +7888,9 @@ int kvm_arch_create_memslot(struct kvm *kvm, 
>>> struct kvm_memory_slot *slot,
>>>           }
>>>       }
>>> +    if (kvm_page_track_create_memslot(slot, npages))
>>> +        goto out_free;
>>> +
>> Looks essentially you are allocating one int for all GFNs of the slot 
>> unconditionally. In my
>> understanding for most of memory slots, we are not going to track 
>> them, so isn't it going to be
>> wasteful of memory?
>>
>
> Yes, hmm... maybe we can make the index as "unsigned short" then 1G 
> memory only needs 512k index
> buffer. It is not so unacceptable.
Those comments are really minor and don't bother on this :)

Thanks,
-Kai

  reply	other threads:[~2015-12-16  7:33 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-30 18:26 [PATCH 00/11] KVM: x86: track guest page access Xiao Guangrong
2015-11-30 18:26 ` [PATCH 01/11] KVM: MMU: rename has_wrprotected_page to mmu_gfn_lpage_is_disallowed Xiao Guangrong
2015-11-30 18:26 ` [PATCH 02/11] KVM: MMU: introduce kvm_mmu_gfn_{allow,disallow}_lpage Xiao Guangrong
2015-11-30 18:26 ` [PATCH 03/11] KVM: MMU: introduce kvm_mmu_slot_gfn_write_protect Xiao Guangrong
2015-11-30 18:26 ` [PATCH 04/11] KVM: page track: add the framework of guest page tracking Xiao Guangrong
2015-12-15  7:06   ` Kai Huang
2015-12-15  8:46     ` Xiao Guangrong
2015-12-16  7:33       ` Kai Huang [this message]
2015-11-30 18:26 ` [PATCH 05/11] KVM: page track: introduce kvm_page_track_{add,remove}_page Xiao Guangrong
2015-12-15  7:15   ` Kai Huang
2015-12-15  7:56     ` Kai Huang
2015-11-30 18:26 ` [PATCH 06/11] KVM: MMU: let page fault handler be aware tracked page Xiao Guangrong
2015-12-15  8:11   ` Kai Huang
2015-12-15  9:03     ` Xiao Guangrong
2015-12-16  7:31       ` Kai Huang
2015-12-16  8:23         ` Xiao Guangrong
2015-11-30 18:26 ` [PATCH 07/11] KVM: page track: add notifier support Xiao Guangrong
2015-12-16  5:53   ` Jike Song
2015-12-16  6:26     ` Xiao Guangrong
2015-11-30 18:26 ` [PATCH 08/11] KVM: MMU: use page track for non-leaf shadow pages Xiao Guangrong
2015-12-15  7:52   ` Kai Huang
2015-12-15  7:59     ` Kai Huang
2015-12-15  9:10     ` Xiao Guangrong
2015-12-16  7:51       ` Kai Huang
2015-12-16  8:39         ` Xiao Guangrong
2015-12-17  2:44           ` Kai Huang
2015-12-17  4:07             ` Xiao Guangrong
2015-11-30 18:26 ` [PATCH 09/11] KVM: MMU: simplify mmu_need_write_protect Xiao Guangrong
2015-12-15  8:43   ` Kai Huang
2015-12-15  8:47     ` Kai Huang
2015-12-15  9:26       ` Xiao Guangrong
2015-12-15  9:25     ` Xiao Guangrong
2015-12-16  8:05       ` Kai Huang
2015-12-16  8:48         ` Xiao Guangrong
2015-12-17  2:51           ` Kai Huang
2015-11-30 18:26 ` [PATCH 10/11] KVM: MMU: clear write-flooding on the fast path of tracked page Xiao Guangrong
2015-11-30 18:26 ` [PATCH 11/11] KVM: MMU: apply page track notifier Xiao Guangrong
2015-12-01 10:17 ` [PATCH 00/11] KVM: x86: track guest page access Paolo Bonzini
2015-12-01 15:02   ` Andrea Arcangeli
2015-12-01 15:08     ` Paolo Bonzini
2015-12-01 17:00   ` Xiao Guangrong
2015-12-05 16:56     ` Xiao Guangrong
  -- strict thread matches above, loose matches on Subject: below --
2016-02-24  9:51 [PATCH v4 " Xiao Guangrong
2016-02-24  9:51 ` [PATCH 04/11] KVM: page track: add the framework of guest page tracking Xiao Guangrong

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=567113BE.2000207@linux.intel.com \
    --to=kai.huang@linux.intel.com \
    --cc=gleb@kernel.org \
    --cc=guangrong.xiao@linux.intel.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mtosatti@redhat.com \
    --cc=pbonzini@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.