History

xen/balloon: add runtime control for scrubbing ballooned out pages

Scrubbing pages on initial balloon down can take some time, especially in nested virtualization case (nested EPT is slow). When HVM/PVH guest is started with memory= significantly lower than maxmem=, all the extra pages will be scrubbed before returning to Xen. But since most of them weren't used at all at that point, Xen needs to populate them first (from populate-on-demand pool). In nested virt case (Xen inside KVM) this slows down the guest boot by 15-30s with just 1.5GB needed to be returned to Xen. Add runtime parameter to enable/disable it, to allow initially disabling scrubbing, then enable it back during boot (for example in initramfs). Such usage relies on assumption that a) most pages ballooned out during initial boot weren't used at all, and b) even if they were, very few secrets are in the guest at that time (before any serious userspace kicks in). Convert CONFIG_XEN_SCRUB_PAGES to CONFIG_XEN_SCRUB_PAGES_DEFAULT (also enabled by default), controlling default value for the new runtime switch.

Marek Marczykowski-Górecki committed 8 years ago

Commit 197ecb31 parent 87dffe86 files · +33 −6Browse files

Unified · Split

6 files
  1. Documentation/ABI/stable/sysfs-devices-system-xen_memory +9 −0
  2. Documentation/admin-guide/kernel-parameters.txt +6 −0
  3. drivers/xen/Kconfig +7 −3
  4. drivers/xen/mem-reservation.c +4 −0
  5. drivers/xen/xen-balloon.c +3 −0
  6. include/xen/mem-reservation.h +4 −3
Documentation/ABI/stable/sysfs-devices-system-xen_memory+9−0
@@ -75,3 +75,12 @@ Contact: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> · 74 unmodified lines
75Description:75Description:
76 Amount (in KiB) of low (or normal) memory in the76 Amount (in KiB) of low (or normal) memory in the
77 balloon.77 balloon.
78
79What: /sys/devices/system/xen_memory/xen_memory0/scrub_pages
80Date: September 2018
81KernelVersion: 4.20
82Contact: xen-devel@lists.xenproject.org
83Description:
84 Control scrubbing pages before returning them to Xen for others domains
85 use. Can be set with xen_scrub_pages cmdline
86 parameter. Default value controlled with CONFIG_XEN_SCRUB_PAGES_DEFAULT.
Documentation/admin-guide/kernel-parameters.txt+6−0
@@ -5000,6 +5000,12 @@ · 4999 unmodified lines
5000 Disables the PV optimizations forcing the HVM guest to5000 Disables the PV optimizations forcing the HVM guest to
5001 run as generic HVM guest with no PV drivers.5001 run as generic HVM guest with no PV drivers.
5002 5002
5003 xen_scrub_pages= [XEN]
5004 Boolean option to control scrubbing pages before giving them back
5005 to Xen, for use by other domains. Can be also changed at runtime
5006 with /sys/devices/system/xen_memory/xen_memory0/scrub_pages.
5007 Default value controlled with CONFIG_XEN_SCRUB_PAGES_DEFAULT.
5008
5003 xirc2ps_cs= [NET,PCMCIA]5009 xirc2ps_cs= [NET,PCMCIA]
5004 Format:5010 Format:
5005 <irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]]5011 <irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]]
drivers/xen/Kconfig+7−3
@@ -79,15 +79,19 @@ config XEN_BALLOON_MEMORY_HOTPLUG_LIMIT · 78 unmodified lines
79 This value is used to allocate enough space in internal79 This value is used to allocate enough space in internal
80 tables needed for physical memory administration.80 tables needed for physical memory administration.
81 81
82config XEN_SCRUB_PAGES82config XEN_SCRUB_PAGES_DEFAULT
83 bool "Scrub pages before returning them to system"83 bool "Scrub pages before returning them to system by default"
84 depends on XEN_BALLOON84 depends on XEN_BALLOON
85 default y85 default y
86 help86 help
87 Scrub pages before returning them to the system for reuse by87 Scrub pages before returning them to the system for reuse by
88 other domains. This makes sure that any confidential data88 other domains. This makes sure that any confidential data
89 is not accidentally visible to other domains. Is it more89 is not accidentally visible to other domains. Is it more
90 secure, but slightly less efficient.90 secure, but slightly less efficient. This can be controlled with
91 xen_scrub_pages=0 parameter and
92 /sys/devices/system/xen_memory/xen_memory0/scrub_pages.
93 This option only sets the default value.
94
91 If in doubt, say yes.95 If in doubt, say yes.
92 96
93config XEN_DEV_EVTCHN97config XEN_DEV_EVTCHN
drivers/xen/mem-reservation.c+4−0
@@ -14,6 +14,10 @@ · 13 unmodified lines
14 14
15#include <xen/interface/memory.h>15#include <xen/interface/memory.h>
16#include <xen/mem-reservation.h>16#include <xen/mem-reservation.h>
17#include <linux/moduleparam.h>
18
19bool __read_mostly xen_scrub_pages = IS_ENABLED(CONFIG_XEN_SCRUB_PAGES_DEFAULT);
20core_param(xen_scrub_pages, xen_scrub_pages, bool, 0);
17 21
18/*22/*
19 * Use one extent per PAGE_SIZE to avoid to break down the page into23 * Use one extent per PAGE_SIZE to avoid to break down the page into
drivers/xen/xen-balloon.c+3−0
@@ -44,6 +44,7 @@ · 43 unmodified lines
44#include <xen/xenbus.h>44#include <xen/xenbus.h>
45#include <xen/features.h>45#include <xen/features.h>
46#include <xen/page.h>46#include <xen/page.h>
47#include <xen/mem-reservation.h>
47 48
48#define PAGES2KB(_p) ((_p)<<(PAGE_SHIFT-10))49#define PAGES2KB(_p) ((_p)<<(PAGE_SHIFT-10))
49 50
@@ -137,6 +138,7 @@ static DEVICE_ULONG_ATTR(schedule_delay, 0444, balloon_stats.schedule_delay); · 87 unmodified lines
137static DEVICE_ULONG_ATTR(max_schedule_delay, 0644, balloon_stats.max_schedule_delay);138static DEVICE_ULONG_ATTR(max_schedule_delay, 0644, balloon_stats.max_schedule_delay);
138static DEVICE_ULONG_ATTR(retry_count, 0444, balloon_stats.retry_count);139static DEVICE_ULONG_ATTR(retry_count, 0444, balloon_stats.retry_count);
139static DEVICE_ULONG_ATTR(max_retry_count, 0644, balloon_stats.max_retry_count);140static DEVICE_ULONG_ATTR(max_retry_count, 0644, balloon_stats.max_retry_count);
141static DEVICE_BOOL_ATTR(scrub_pages, 0644, xen_scrub_pages);
140 142
141static ssize_t show_target_kb(struct device *dev, struct device_attribute *attr,143static ssize_t show_target_kb(struct device *dev, struct device_attribute *attr,
142 char *buf)144 char *buf)
@@ -203,6 +205,7 @@ static struct attribute *balloon_attrs[] = { · 60 unmodified lines
203 &dev_attr_max_schedule_delay.attr.attr,205 &dev_attr_max_schedule_delay.attr.attr,
204 &dev_attr_retry_count.attr.attr,206 &dev_attr_retry_count.attr.attr,
205 &dev_attr_max_retry_count.attr.attr,207 &dev_attr_max_retry_count.attr.attr,
208 &dev_attr_scrub_pages.attr.attr,
206 NULL209 NULL
207};210};
208 211
include/xen/mem-reservation.h+4−3
@@ -17,11 +17,12 @@ · 16 unmodified lines
17 17
18#include <xen/page.h>18#include <xen/page.h>
19 19
20extern bool xen_scrub_pages;
21
20static inline void xenmem_reservation_scrub_page(struct page *page)22static inline void xenmem_reservation_scrub_page(struct page *page)
21{23{
22#ifdef CONFIG_XEN_SCRUB_PAGES24 if (xen_scrub_pages)
23 clear_highpage(page);25 clear_highpage(page);
24#endif
25}26}
26 27
27#ifdef CONFIG_XEN_HAVE_PVMMU28#ifdef CONFIG_XEN_HAVE_PVMMU

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t