From: Fengguang Wu <fengguang.wu@intel.com> To: Andrew Morton <akpm@linux-foundation.org> Cc: Linux Memory Management List <linux-mm@kvack.org>, Fengguang Wu <fengguang.wu@intel.com> Cc: Peng DongX <dongx.peng@intel.com> Cc: Liu Jingqi <jingqi.liu@intel.com> Cc: Dong Eddie <eddie.dong@intel.com> Cc: Dave Hansen <dave.hansen@intel.com> Cc: Huang Ying <ying.huang@intel.com> Cc: Brendan Gregg <bgregg@netflix.com> Cc: kvm@vger.kernel.org Cc: LKML <linux-kernel@vger.kernel.org> Subject: [RFC][PATCH 1/5] [PATCH 1/5] kvm: register in task_struct Date: Sat, 01 Sep 2018 19:28:19 +0800 [thread overview] Message-ID: <20180901124811.469883138@intel.com> (raw) In-Reply-To: 20180901112818.126790961@intel.com [-- Attachment #1: 0001-kvm-register-in-task_struct.patch --] [-- Type: text/plain, Size: 1976 bytes --] The added pointer will be used by the /proc/PID/idle_bitmap code to quickly identify QEMU task and walk EPT/NPT accordingly. For virtual machines, the A bits will be set in guest page tables and EPT/NPT, rather than the QEMU task page table. This costs 8 bytes in task_struct which could be wasteful for the majority normal tasks. The alternative is to add a flag only, and let it find the corresponding VM in kvm vm_list. Signed-off-by: Fengguang Wu <fengguang.wu@intel.com> --- include/linux/sched.h | 10 ++++++++++ virt/kvm/kvm_main.c | 1 + 2 files changed, 11 insertions(+) diff --git a/include/linux/sched.h b/include/linux/sched.h index 43731fe51c97..26c8549bbc28 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -38,6 +38,7 @@ struct cfs_rq; struct fs_struct; struct futex_pi_state; struct io_context; +struct kvm; struct mempolicy; struct nameidata; struct nsproxy; @@ -1179,6 +1180,9 @@ struct task_struct { /* Used by LSM modules for access restriction: */ void *security; #endif +#if IS_ENABLED(CONFIG_KVM) + struct kvm *kvm; +#endif /* * New fields for task_struct should be added above here, so that @@ -1898,4 +1902,10 @@ static inline void rseq_syscall(struct pt_regs *regs) #endif +#if IS_ENABLED(CONFIG_KVM) +static inline struct kvm *task_kvm(struct task_struct *t) { return t->kvm; } +#else +static inline struct kvm *task_kvm(struct task_struct *t) { return NULL; } +#endif + #endif diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 8b47507faab5..0c483720de8d 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -3892,6 +3892,7 @@ static void kvm_uevent_notify_change(unsigned int type, struct kvm *kvm) if (type == KVM_EVENT_CREATE_VM) { add_uevent_var(env, "EVENT=create"); kvm->userspace_pid = task_pid_nr(current); + current->kvm = kvm; } else if (type == KVM_EVENT_DESTROY_VM) { add_uevent_var(env, "EVENT=destroy"); } -- 2.15.0
WARNING: multiple messages have this Message-ID (diff)
From: Fengguang Wu <fengguang.wu@intel.com> To: Andrew Morton <akpm@linux-foundation.org> Cc: Linux Memory Management List <linux-mm@kvack.org>, Fengguang Wu <fengguang.wu@intel.com>, Peng DongX <dongx.peng@intel.com>, Liu Jingqi <jingqi.liu@intel.com>, Dong Eddie <eddie.dong@intel.com>, Dave Hansen <dave.hansen@intel.com>, Huang Ying <ying.huang@intel.com>, Brendan Gregg <bgregg@netflix.com>, kvm@vger.kernel.org, LKML <linux-kernel@vger.kernel.org> Subject: [RFC][PATCH 1/5] [PATCH 1/5] kvm: register in task_struct Date: Sat, 01 Sep 2018 19:28:19 +0800 [thread overview] Message-ID: <20180901124811.469883138@intel.com> (raw) In-Reply-To: 20180901112818.126790961@intel.com [-- Attachment #1: 0001-kvm-register-in-task_struct.patch --] [-- Type: text/plain, Size: 1973 bytes --] The added pointer will be used by the /proc/PID/idle_bitmap code to quickly identify QEMU task and walk EPT/NPT accordingly. For virtual machines, the A bits will be set in guest page tables and EPT/NPT, rather than the QEMU task page table. This costs 8 bytes in task_struct which could be wasteful for the majority normal tasks. The alternative is to add a flag only, and let it find the corresponding VM in kvm vm_list. Signed-off-by: Fengguang Wu <fengguang.wu@intel.com> --- include/linux/sched.h | 10 ++++++++++ virt/kvm/kvm_main.c | 1 + 2 files changed, 11 insertions(+) diff --git a/include/linux/sched.h b/include/linux/sched.h index 43731fe51c97..26c8549bbc28 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -38,6 +38,7 @@ struct cfs_rq; struct fs_struct; struct futex_pi_state; struct io_context; +struct kvm; struct mempolicy; struct nameidata; struct nsproxy; @@ -1179,6 +1180,9 @@ struct task_struct { /* Used by LSM modules for access restriction: */ void *security; #endif +#if IS_ENABLED(CONFIG_KVM) + struct kvm *kvm; +#endif /* * New fields for task_struct should be added above here, so that @@ -1898,4 +1902,10 @@ static inline void rseq_syscall(struct pt_regs *regs) #endif +#if IS_ENABLED(CONFIG_KVM) +static inline struct kvm *task_kvm(struct task_struct *t) { return t->kvm; } +#else +static inline struct kvm *task_kvm(struct task_struct *t) { return NULL; } +#endif + #endif diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 8b47507faab5..0c483720de8d 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -3892,6 +3892,7 @@ static void kvm_uevent_notify_change(unsigned int type, struct kvm *kvm) if (type == KVM_EVENT_CREATE_VM) { add_uevent_var(env, "EVENT=create"); kvm->userspace_pid = task_pid_nr(current); + current->kvm = kvm; } else if (type == KVM_EVENT_DESTROY_VM) { add_uevent_var(env, "EVENT=destroy"); } -- 2.15.0
next prev parent reply other threads:[~2018-09-02 2:21 UTC|newest] Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-09-01 11:28 [RFC][PATCH 0/5] introduce /proc/PID/idle_bitmap Fengguang Wu 2018-09-01 11:28 ` Fengguang Wu 2018-09-01 11:28 ` Fengguang Wu [this message] 2018-09-01 11:28 ` [RFC][PATCH 1/5] [PATCH 1/5] kvm: register in task_struct Fengguang Wu 2018-09-01 11:28 ` [RFC][PATCH 2/5] [PATCH 2/5] proc: introduce /proc/PID/idle_bitmap Fengguang Wu 2018-09-01 11:28 ` Fengguang Wu 2018-09-04 19:02 ` Sean Christopherson 2018-09-06 14:12 ` Dave Hansen 2018-09-01 11:28 ` [RFC][PATCH 3/5] [PATCH 3/5] kvm-ept-idle: HVA indexed EPT read Fengguang Wu 2018-09-01 11:28 ` Fengguang Wu 2018-09-04 7:57 ` Nikita Leshenko 2018-09-04 8:12 ` Peng, DongX 2018-09-04 8:15 ` Fengguang Wu 2018-09-01 11:28 ` [RFC][PATCH 4/5] [PATCH 4/5] kvm-ept-idle: EPT page table walk for A bits Fengguang Wu 2018-09-01 11:28 ` Fengguang Wu 2018-09-06 14:35 ` Dave Hansen 2018-09-01 11:28 ` [RFC][PATCH 5/5] [PATCH 5/5] kvm-ept-idle: enable module Fengguang Wu 2018-09-01 11:28 ` Fengguang Wu 2018-09-04 19:14 ` Sean Christopherson 2018-09-02 8:24 ` [RFC][PATCH 0/5] introduce /proc/PID/idle_bitmap Fengguang Wu 2018-09-03 14:10 [RFC][PATCH 1/5] [PATCH 1/5] kvm: register in task_struct Nikita Leshenko 2018-09-03 14:10 ` Nikita Leshenko 2018-09-03 16:03 ` Christian Borntraeger 2018-09-04 0:28 ` Fengguang Wu 2018-09-04 0:46 ` Fengguang Wu 2018-09-04 6:37 ` Nikita Leshenko 2018-09-04 7:15 ` Fengguang Wu 2018-09-04 7:43 ` Christian Borntraeger 2018-09-04 7:43 ` Christian Borntraeger 2018-09-04 8:31 ` Fengguang Wu 2018-09-04 8:31 ` Fengguang Wu
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=20180901124811.469883138@intel.com \ --to=fengguang.wu@intel.com \ --cc=akpm@linux-foundation.org \ --cc=linux-mm@kvack.org \ /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: linkBe 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.