mirror of
https://github.com/clearlinux/kvmtool.git
synced 2026-09-04 20:51:28 +00:00
kvm tools: Scale guest RAM size by CPU count
This patch increases default RAM size to 256 for one CPU and introduces RAM
size linear scaling based on CPUs as suggested by Ingo Molnar:
64MB*(nr_cpus + 3)
------------------
1 CPUs: 256 MB
2 CPUs: 320 MB
3 CPUs: 384 MB
4 CPUs: 448 MB
5 CPUs: 512 MB
6 CPUs: 576 MB
7 CPUs: 640 MB
8 CPUs: 704 MB
9 CPUs: 768 MB
10 CPUs: 832 MB
11 CPUs: 896 MB
12 CPUs: 960 MB
13 CPUs: 1024 MB
14 CPUs: 1088 MB
15 CPUs: 1152 MB
16 CPUs: 1216 MB
Cc: Asias He <asias.hejun@gmail.com>
Cc: Cyrill Gorcunov <gorcunov@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Prasad Joshi <prasadjoshi124@gmail.com>
Cc: Sasha Levin <levinsasha928@gmail.com>
Suggested-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
This commit is contained in:
committed by
Will Deacon
parent
2449f6e369
commit
fd834def0f
@@ -46,7 +46,7 @@ static struct kvm *kvm;
|
||||
static struct kvm_cpu *kvm_cpus[KVM_NR_CPUS];
|
||||
static __thread struct kvm_cpu *current_kvm_cpu;
|
||||
|
||||
static u64 ram_size = MIN_RAM_SIZE_MB;
|
||||
static u64 ram_size;
|
||||
static u8 image_count;
|
||||
static const char *kernel_cmdline;
|
||||
static const char *kernel_filename;
|
||||
@@ -213,6 +213,27 @@ static void kernel_usage_with_options(void)
|
||||
fprintf(stderr, "\nPlease see 'kvm run --help' for more options.\n\n");
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
if (ram_size > available)
|
||||
ram_size = available;
|
||||
|
||||
return ram_size;
|
||||
}
|
||||
|
||||
static const char *find_kernel(void)
|
||||
{
|
||||
const char **k;
|
||||
@@ -330,6 +351,9 @@ int kvm_cmd_run(int argc, const char **argv, const char *prefix)
|
||||
if (nrcpus < 1 || nrcpus > KVM_NR_CPUS)
|
||||
die("Number of CPUs %d is out of [1;%d] range", nrcpus, KVM_NR_CPUS);
|
||||
|
||||
if (!ram_size)
|
||||
ram_size = get_ram_size(nrcpus);
|
||||
|
||||
if (ram_size < MIN_RAM_SIZE_MB)
|
||||
die("Not enough memory specified: %lluMB (min %lluMB)", ram_size, MIN_RAM_SIZE_MB);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user