From 60ded00304843e6fb659f4eb21f4eb18bf92c5e3 Mon Sep 17 00:00:00 2001 From: Pekka Enberg Date: Sat, 7 May 2011 22:07:15 +0300 Subject: [PATCH] kvm tools: Warn if guest RAM size exceeds host RAM size Guest memory size that's larger than host physical RAM can cause swap deaths on the host so warn the user about it. Cc: Asias He Cc: Cyrill Gorcunov Cc: Ingo Molnar Cc: Prasad Joshi Cc: Sasha Levin Suggested-by: Ingo Molnar Signed-off-by: Pekka Enberg --- kvm-run.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/kvm-run.c b/kvm-run.c index b9cdec2..764a242 100644 --- a/kvm-run.c +++ b/kvm-run.c @@ -213,6 +213,18 @@ static void kernel_usage_with_options(void) fprintf(stderr, "\nPlease see 'kvm run --help' for more options.\n\n"); } +static u64 host_ram_size(void) +{ + long page_size; + long nr_pages; + + nr_pages = sysconf(_SC_PHYS_PAGES); + + page_size = sysconf(_SC_PAGE_SIZE); + + return (nr_pages * page_size) >> MB_SHIFT; +} + /* * If user didn't specify how much memory it wants to allocate for the guest, * avoid filling the whole host RAM. @@ -222,17 +234,11 @@ static void kernel_usage_with_options(void) static u64 get_ram_size(int nr_cpus) { long available; - long page_size; - long nr_pages; long ram_size; ram_size = 64 * (nr_cpus + 3); - nr_pages = sysconf(_SC_PHYS_PAGES); - - page_size = sysconf(_SC_PAGE_SIZE); - - available = ((nr_pages * page_size) >> MB_SHIFT) * RAM_SIZE_RATIO; + available = host_ram_size() * RAM_SIZE_RATIO; if (ram_size > available) ram_size = available; @@ -364,6 +370,9 @@ int kvm_cmd_run(int argc, const char **argv, const char *prefix) if (ram_size < MIN_RAM_SIZE_MB) die("Not enough memory specified: %lluMB (min %lluMB)", ram_size, MIN_RAM_SIZE_MB); + if (ram_size > host_ram_size()) + warning("Guest memory size %lluMB exceeds host physical RAM size %lluMB", ram_size, host_ram_size()); + ram_size <<= MB_SHIFT; if (!kvm_dev)