All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nitesh Narayan Lal <nitesh@redhat.com>
To: Alexander Duyck <alexander.duyck@gmail.com>
Cc: kvm list <kvm@vger.kernel.org>,
	LKML <linux-kernel@vger.kernel.org>,
	Paolo Bonzini <pbonzini@redhat.com>,
	lcapitulino@redhat.com, pagupta@redhat.com, wei.w.wang@intel.com,
	Yang Zhang <yang.zhang.wz@gmail.com>,
	Rik van Riel <riel@surriel.com>,
	david@redhat.com, "Michael S. Tsirkin" <mst@redhat.com>,
	dodgen@google.com, Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	dhildenb@redhat.com, Andrea Arcangeli <aarcange@redhat.com>
Subject: Re: [RFC][Patch v8 2/7] KVM: Enabling guest free page hinting via static key
Date: Fri, 8 Feb 2019 13:22:20 -0500	[thread overview]
Message-ID: <eac2187a-e6e3-878a-7acc-f9963a61e6dc@redhat.com> (raw)
In-Reply-To: <CAKgT0UfqtRigPwUaN=H_MrLgeXErkeOcpuPy6ys6A3UCLnMBPg@mail.gmail.com>


[-- Attachment #1.1: Type: text/plain, Size: 4632 bytes --]

On 2/8/19 1:07 PM, Alexander Duyck wrote:
> On Mon, Feb 4, 2019 at 2:11 PM Nitesh Narayan Lal <nitesh@redhat.com> wrote:
>> This patch enables the guest free page hinting support
>> to enable or disable based on the STATIC key which
>> could be set via sysctl.
>>
>> Signed-off-by: Nitesh Narayan Lal <nitesh@redhat.com>
>> ---
>>  include/linux/gfp.h          |  2 ++
>>  include/linux/page_hinting.h |  5 +++++
>>  kernel/sysctl.c              |  9 +++++++++
>>  virt/kvm/page_hinting.c      | 23 +++++++++++++++++++++++
>>  4 files changed, 39 insertions(+)
>>
>> diff --git a/include/linux/gfp.h b/include/linux/gfp.h
>> index e596527284ba..8389219a076a 100644
>> --- a/include/linux/gfp.h
>> +++ b/include/linux/gfp.h
>> @@ -461,6 +461,8 @@ static inline struct zonelist *node_zonelist(int nid, gfp_t flags)
>>  #define HAVE_ARCH_FREE_PAGE
>>  static inline void arch_free_page(struct page *page, int order)
>>  {
>> +       if (!static_branch_unlikely(&guest_page_hinting_key))
>> +               return;
>>         guest_free_page(page, order);
>>  }
>>  #endif
>> diff --git a/include/linux/page_hinting.h b/include/linux/page_hinting.h
>> index b54f7428f348..9bdcf63e1306 100644
>> --- a/include/linux/page_hinting.h
>> +++ b/include/linux/page_hinting.h
>> @@ -14,4 +14,9 @@ struct hypervisor_pages {
>>         unsigned int order;
>>  };
>>
>> +extern int guest_page_hinting_flag;
>> +extern struct static_key_false guest_page_hinting_key;
>> +
>> +int guest_page_hinting_sysctl(struct ctl_table *table, int write,
>> +                             void __user *buffer, size_t *lenp, loff_t *ppos);
>>  void guest_free_page(struct page *page, int order);
>> diff --git a/kernel/sysctl.c b/kernel/sysctl.c
>> index ba4d9e85feb8..5d53629c9bfb 100644
>> --- a/kernel/sysctl.c
>> +++ b/kernel/sysctl.c
>> @@ -1690,6 +1690,15 @@ static struct ctl_table vm_table[] = {
>>                 .extra1         = (void *)&mmap_rnd_compat_bits_min,
>>                 .extra2         = (void *)&mmap_rnd_compat_bits_max,
>>         },
>> +#endif
>> +#ifdef CONFIG_KVM_FREE_PAGE_HINTING
>> +       {
>> +               .procname       = "guest-page-hinting",
>> +               .data           = &guest_page_hinting_flag,
>> +               .maxlen         = sizeof(guest_page_hinting_flag),
>> +               .mode           = 0644,
>> +               .proc_handler   = guest_page_hinting_sysctl,
>> +       },
>>  #endif
>>         { }
>>  };
> Since you are adding a new sysctl shouldn't you also be updating
> Documentation/sysctl/vm.txt?
Indeed I will be doing that.
However, I would first like to close other major issues with the design.
>
>> diff --git a/virt/kvm/page_hinting.c b/virt/kvm/page_hinting.c
>> index 818bd6b84e0c..4a34ea8db0c8 100644
>> --- a/virt/kvm/page_hinting.c
>> +++ b/virt/kvm/page_hinting.c
>> @@ -1,6 +1,7 @@
>>  #include <linux/gfp.h>
>>  #include <linux/mm.h>
>>  #include <linux/kernel.h>
>> +#include <linux/kvm_host.h>
>>
>>  /*
>>   * struct kvm_free_pages - Tracks the pages which are freed by the guest.
>> @@ -31,6 +32,28 @@ struct page_hinting {
>>
>>  DEFINE_PER_CPU(struct page_hinting, hinting_obj);
>>
>> +struct static_key_false guest_page_hinting_key  = STATIC_KEY_FALSE_INIT;
>> +EXPORT_SYMBOL(guest_page_hinting_key);
>> +static DEFINE_MUTEX(hinting_mutex);
>> +int guest_page_hinting_flag;
>> +EXPORT_SYMBOL(guest_page_hinting_flag);
> I'm not entirely sure this flag makes sense to me. What is to prevent
> someone from turning this on when there is no means of actually using
> the hints. I understand right now that guest_free_page doesn't
> actually do anything, but when it does I would assume it has to
> interact with a device. If that device is not present would it still
> make sense for us to be generating hints?
Fair point, I will address this issue.
>
>> +
>> +int guest_page_hinting_sysctl(struct ctl_table *table, int write,
>> +                             void __user *buffer, size_t *lenp,
>> +                             loff_t *ppos)
>> +{
>> +       int ret;
>> +
>> +       mutex_lock(&hinting_mutex);
>> +       ret = proc_dointvec(table, write, buffer, lenp, ppos);
>> +       if (guest_page_hinting_flag)
>> +               static_key_enable(&guest_page_hinting_key.key);
>> +       else
>> +               static_key_disable(&guest_page_hinting_key.key);
>> +       mutex_unlock(&hinting_mutex);
>> +       return ret;
>> +}
>> +
>>  void guest_free_page(struct page *page, int order)
>>  {
>>  }
>> --
>> 2.17.2
>>
-- 
Regards
Nitesh


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  reply	other threads:[~2019-02-08 18:22 UTC|newest]

Thread overview: 116+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-02-04 20:18 [RFC][Patch v8 0/7] KVM: Guest Free Page Hinting Nitesh Narayan Lal
2019-02-04 20:18 ` [RFC][Patch v8 1/7] KVM: Support for guest free page hinting Nitesh Narayan Lal
2019-02-05  4:14   ` Michael S. Tsirkin
2019-02-05 13:06     ` Nitesh Narayan Lal
2019-02-05 16:27       ` Michael S. Tsirkin
2019-02-05 16:34         ` Nitesh Narayan Lal
2019-02-04 20:18 ` [RFC][Patch v8 2/7] KVM: Enabling guest free page hinting via static key Nitesh Narayan Lal
2019-02-08 18:07   ` Alexander Duyck
2019-02-08 18:22     ` Nitesh Narayan Lal [this message]
2019-02-04 20:18 ` [RFC][Patch v8 3/7] KVM: Guest free page hinting functional skeleton Nitesh Narayan Lal
2019-02-04 20:18 ` [RFC][Patch v8 4/7] KVM: Disabling page poisoning to prevent corruption Nitesh Narayan Lal
2019-02-07 17:23   ` Alexander Duyck
2019-02-07 17:56     ` Nitesh Narayan Lal
2019-02-07 18:24       ` Alexander Duyck
2019-02-07 19:14         ` Michael S. Tsirkin
2019-02-07 21:08   ` Michael S. Tsirkin
2019-02-04 20:18 ` [RFC][Patch v8 5/7] virtio: Enables to add a single descriptor to the host Nitesh Narayan Lal
2019-02-05 20:49   ` Michael S. Tsirkin
2019-02-06 12:56     ` Nitesh Narayan Lal
2019-02-06 13:15       ` Luiz Capitulino
2019-02-06 13:24         ` Nitesh Narayan Lal
2019-02-06 13:29           ` Luiz Capitulino
2019-02-06 14:05             ` Nitesh Narayan Lal
2019-02-06 18:03       ` Michael S. Tsirkin
2019-02-06 18:19         ` Nitesh Narayan Lal
2019-02-04 20:18 ` [RFC][Patch v8 6/7] KVM: Enables the kernel to isolate and report free pages Nitesh Narayan Lal
2019-02-05 20:45   ` Michael S. Tsirkin
2019-02-05 21:54     ` Nitesh Narayan Lal
2019-02-05 21:55       ` Michael S. Tsirkin
2019-02-07 17:43         ` Alexander Duyck
2019-02-07 19:01           ` Michael S. Tsirkin
2019-02-07 20:50           ` Nitesh Narayan Lal
2019-02-08 17:58             ` Alexander Duyck
2019-02-08 20:41               ` Nitesh Narayan Lal
2019-02-08 21:38                 ` Michael S. Tsirkin
2019-02-08 22:05                   ` Alexander Duyck
2019-02-10  0:38                     ` Michael S. Tsirkin
2019-02-11  9:28                       ` David Hildenbrand
2019-02-12  5:16                         ` Michael S. Tsirkin
2019-02-12 17:10                       ` Nitesh Narayan Lal
2019-02-08 21:35               ` Michael S. Tsirkin
2019-02-04 20:18 ` [RFC][Patch v8 7/7] KVM: Adding tracepoints for guest page hinting Nitesh Narayan Lal
2019-02-04 20:20 ` [RFC][QEMU PATCH] KVM: Support for guest free " Nitesh Narayan Lal
2019-02-12  9:03 ` [RFC][Patch v8 0/7] KVM: Guest Free Page Hinting Wang, Wei W
2019-02-12  9:24   ` David Hildenbrand
2019-02-12 17:24     ` Nitesh Narayan Lal
2019-02-12 19:34       ` David Hildenbrand
2019-02-13  8:55     ` Wang, Wei W
2019-02-13  9:19       ` David Hildenbrand
2019-02-13 12:17         ` Nitesh Narayan Lal
2019-02-13 17:09           ` Michael S. Tsirkin
2019-02-13 17:22             ` Nitesh Narayan Lal
     [not found]               ` <286AC319A985734F985F78AFA26841F73DF6F1C3@shsmsx102.ccr.corp.intel.com>
2019-02-14  9:34                 ` David Hildenbrand
2019-02-13 17:16         ` Michael S. Tsirkin
2019-02-13 17:59           ` David Hildenbrand
2019-02-13 19:08             ` Michael S. Tsirkin
2019-02-14  9:08         ` Wang, Wei W
2019-02-14 10:00           ` David Hildenbrand
2019-02-14 10:44             ` David Hildenbrand
2019-02-15  9:15             ` Wang, Wei W
2019-02-15  9:33               ` David Hildenbrand
2019-02-13  9:00 ` Wang, Wei W
2019-02-13 12:06   ` Nitesh Narayan Lal
2019-02-14  8:48     ` Wang, Wei W
2019-02-14  9:42       ` David Hildenbrand
2019-02-15  9:05         ` Wang, Wei W
2019-02-15  9:41           ` David Hildenbrand
2019-02-18  2:36             ` Wei Wang
2019-02-18  2:39               ` Wei Wang
2019-02-15 12:40           ` Nitesh Narayan Lal
2019-02-14 13:00       ` Nitesh Narayan Lal
2019-02-16  9:40 ` David Hildenbrand
2019-02-18 15:50   ` Nitesh Narayan Lal
2019-02-18 16:02     ` David Hildenbrand
2019-02-18 16:49   ` Michael S. Tsirkin
2019-02-18 16:59     ` David Hildenbrand
2019-02-18 17:31       ` Alexander Duyck
2019-02-18 17:41         ` David Hildenbrand
2019-02-18 23:47           ` Alexander Duyck
2019-02-19  2:45             ` Michael S. Tsirkin
2019-02-19  2:46             ` Andrea Arcangeli
2019-02-19 12:52               ` Nitesh Narayan Lal
2019-02-19 16:23               ` Alexander Duyck
2019-02-19  8:06             ` David Hildenbrand
2019-02-19 14:40               ` Michael S. Tsirkin
2019-02-19 14:44                 ` David Hildenbrand
2019-02-19 14:45                   ` David Hildenbrand
2019-02-18 18:01         ` Michael S. Tsirkin
2019-02-18 17:54       ` Michael S. Tsirkin
2019-02-18 18:29         ` David Hildenbrand
2019-02-18 19:16           ` Michael S. Tsirkin
2019-02-18 19:35             ` David Hildenbrand
2019-02-18 19:47               ` Michael S. Tsirkin
2019-02-18 20:04                 ` David Hildenbrand
2019-02-18 20:31                   ` Michael S. Tsirkin
2019-02-18 20:40                     ` Nitesh Narayan Lal
2019-02-18 21:04                       ` David Hildenbrand
2019-02-19  0:01                         ` Alexander Duyck
2019-02-19  7:54                           ` David Hildenbrand
2019-02-19 18:06                             ` Alexander Duyck
2019-02-19 18:31                               ` David Hildenbrand
2019-02-19 21:57                                 ` Alexander Duyck
2019-02-19 22:17                                   ` Michael S. Tsirkin
2019-02-19 22:36                                   ` David Hildenbrand
2019-02-19 19:58                               ` Michael S. Tsirkin
2019-02-19 20:02                                 ` David Hildenbrand
2019-02-19 20:17                                   ` Michael S. Tsirkin
2019-02-19 20:21                                     ` David Hildenbrand
2019-02-19 20:35                                       ` Michael S. Tsirkin
2019-02-19 12:47                         ` Nitesh Narayan Lal
2019-02-19 13:03                           ` David Hildenbrand
2019-02-19 14:17                             ` Nitesh Narayan Lal
2019-02-19 14:21                               ` David Hildenbrand
2019-02-18 20:53                     ` David Hildenbrand
2019-02-23  0:02 ` Alexander Duyck
2019-02-25 13:01   ` Nitesh Narayan Lal

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=eac2187a-e6e3-878a-7acc-f9963a61e6dc@redhat.com \
    --to=nitesh@redhat.com \
    --cc=aarcange@redhat.com \
    --cc=alexander.duyck@gmail.com \
    --cc=david@redhat.com \
    --cc=dhildenb@redhat.com \
    --cc=dodgen@google.com \
    --cc=konrad.wilk@oracle.com \
    --cc=kvm@vger.kernel.org \
    --cc=lcapitulino@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mst@redhat.com \
    --cc=pagupta@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=riel@surriel.com \
    --cc=wei.w.wang@intel.com \
    --cc=yang.zhang.wz@gmail.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.