diff mbox

kvm tools: Default guest cpu count to host cpu count

Message ID 1305748584-9411-1-git-send-email-levinsasha928@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Sasha Levin May 18, 2011, 7:56 p.m. UTC
If user haven't specified cpu count for the guest, use
the amount of online cpus on the host.

Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
---
 tools/kvm/kvm-run.c |    9 ++++++---
 1 files changed, 6 insertions(+), 3 deletions(-)

Comments

Cyrill Gorcunov May 18, 2011, 7:59 p.m. UTC | #1
On 05/18/2011 11:56 PM, Sasha Levin wrote:
> If user haven't specified cpu count for the guest, use
> the amount of online cpus on the host.
> 
> Signed-off-by: Sasha Levin <levinsasha928@gmail.com>

Looks good to me, thanks Sasha!
Asias He May 19, 2011, 10:35 a.m. UTC | #2
On 05/19/2011 03:56 AM, Sasha Levin wrote:
> If user haven't specified cpu count for the guest, use
> the amount of online cpus on the host.
> 
> Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
> ---
>  tools/kvm/kvm-run.c |    9 ++++++---
>  1 files changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/tools/kvm/kvm-run.c b/tools/kvm/kvm-run.c
> index 63181bf..1517264 100644
> --- a/tools/kvm/kvm-run.c
> +++ b/tools/kvm/kvm-run.c
> @@ -70,7 +70,7 @@ extern int  active_console;
>  
>  bool do_debug_print = false;
>  
> -static int nrcpus = 1;
> +static int nrcpus;
>  
>  static const char * const run_usage[] = {
>  	"kvm run [<options>] [<kernel image>]",
> @@ -409,6 +409,8 @@ int kvm_cmd_run(int argc, const char **argv, const char *prefix)
>  	signal(SIGQUIT, handle_sigquit);
>  	signal(SIGUSR1, handle_sigusr1);
>  
> +	nr_online_cpus = sysconf(_SC_NPROCESSORS_ONLN);
> +
>  	while (argc != 0) {
>  		argc = parse_options(argc, argv, options, run_usage,
>  				PARSE_OPT_STOP_AT_NON_OPTION);
> @@ -439,7 +441,9 @@ int kvm_cmd_run(int argc, const char **argv, const char *prefix)
>  
>  	vmlinux_filename = find_vmlinux();
>  
> -	if (nrcpus < 1 || nrcpus > KVM_NR_CPUS)
> +	if (nrcpus == 0)
> +		nrcpus = nr_online_cpus;
> +	else 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)
> @@ -575,7 +579,6 @@ int kvm_cmd_run(int argc, const char **argv, const char *prefix)
>  
>  	kvm__init_ram(kvm);
>  
> -	nr_online_cpus = sysconf(_SC_NPROCESSORS_ONLN);
>  	thread_pool__init(nr_online_cpus);
>  
>  	for (i = 0; i < nrcpus; i++) {

Looks good to me.

Tested-by: Asias He <asias.hejun@gmail.com>
David Ahern May 19, 2011, 7:04 p.m. UTC | #3
On 05/18/11 13:56, Sasha Levin wrote:
> If user haven't specified cpu count for the guest, use
> the amount of online cpus on the host.
> 
> Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
> ---
>  tools/kvm/kvm-run.c |    9 ++++++---
>  1 files changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/tools/kvm/kvm-run.c b/tools/kvm/kvm-run.c
> index 63181bf..1517264 100644
> --- a/tools/kvm/kvm-run.c
> +++ b/tools/kvm/kvm-run.c
> @@ -70,7 +70,7 @@ extern int  active_console;
>  
>  bool do_debug_print = false;
>  
> -static int nrcpus = 1;
> +static int nrcpus;
>  
>  static const char * const run_usage[] = {
>  	"kvm run [<options>] [<kernel image>]",
> @@ -409,6 +409,8 @@ int kvm_cmd_run(int argc, const char **argv, const char *prefix)
>  	signal(SIGQUIT, handle_sigquit);
>  	signal(SIGUSR1, handle_sigusr1);
>  
> +	nr_online_cpus = sysconf(_SC_NPROCESSORS_ONLN);
> +
>  	while (argc != 0) {
>  		argc = parse_options(argc, argv, options, run_usage,
>  				PARSE_OPT_STOP_AT_NON_OPTION);
> @@ -439,7 +441,9 @@ int kvm_cmd_run(int argc, const char **argv, const char *prefix)
>  
>  	vmlinux_filename = find_vmlinux();
>  
> -	if (nrcpus < 1 || nrcpus > KVM_NR_CPUS)
> +	if (nrcpus == 0)
> +		nrcpus = nr_online_cpus;
> +	else if (nrcpus < 1 || nrcpus > KVM_NR_CPUS)
>  		die("Number of CPUs %d is out of [1;%d] range", nrcpus, KVM_NR_CPUS);

What prevents nr_online_cpus from being greater than KVM_NR_CPUS? Since
that latter is a #define, might want to change 'else if' to if there.

David



>  
>  	if (!ram_size)
> @@ -575,7 +579,6 @@ int kvm_cmd_run(int argc, const char **argv, const char *prefix)
>  
>  	kvm__init_ram(kvm);
>  
> -	nr_online_cpus = sysconf(_SC_NPROCESSORS_ONLN);
>  	thread_pool__init(nr_online_cpus);
>  
>  	for (i = 0; i < nrcpus; i++) {
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Cyrill Gorcunov May 19, 2011, 7:08 p.m. UTC | #4
On 05/19/2011 11:04 PM, David Ahern wrote:
> 
> On 05/18/11 13:56, Sasha Levin wrote:
>> If user haven't specified cpu count for the guest, use
>> the amount of online cpus on the host.
>>
>> Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
>> ---
>>  tools/kvm/kvm-run.c |    9 ++++++---
>>  1 files changed, 6 insertions(+), 3 deletions(-)
>>
>> diff --git a/tools/kvm/kvm-run.c b/tools/kvm/kvm-run.c
>> index 63181bf..1517264 100644
>> --- a/tools/kvm/kvm-run.c
>> +++ b/tools/kvm/kvm-run.c
>> @@ -70,7 +70,7 @@ extern int  active_console;
>>  
>>  bool do_debug_print = false;
>>  
>> -static int nrcpus = 1;
>> +static int nrcpus;
>>  
>>  static const char * const run_usage[] = {
>>  	"kvm run [<options>] [<kernel image>]",
>> @@ -409,6 +409,8 @@ int kvm_cmd_run(int argc, const char **argv, const char *prefix)
>>  	signal(SIGQUIT, handle_sigquit);
>>  	signal(SIGUSR1, handle_sigusr1);
>>  
>> +	nr_online_cpus = sysconf(_SC_NPROCESSORS_ONLN);
>> +
>>  	while (argc != 0) {
>>  		argc = parse_options(argc, argv, options, run_usage,
>>  				PARSE_OPT_STOP_AT_NON_OPTION);
>> @@ -439,7 +441,9 @@ int kvm_cmd_run(int argc, const char **argv, const char *prefix)
>>  
>>  	vmlinux_filename = find_vmlinux();
>>  
>> -	if (nrcpus < 1 || nrcpus > KVM_NR_CPUS)
>> +	if (nrcpus == 0)
>> +		nrcpus = nr_online_cpus;
>> +	else if (nrcpus < 1 || nrcpus > KVM_NR_CPUS)
>>  		die("Number of CPUs %d is out of [1;%d] range", nrcpus, KVM_NR_CPUS);
> 
> What prevents nr_online_cpus from being greater than KVM_NR_CPUS? Since
> that latter is a #define, might want to change 'else if' to if there.
> 
> David
> 

Good catch! We should add a constraint here and limit it to KVM_NR_CPUS.
Cyrill Gorcunov May 19, 2011, 8 p.m. UTC | #5
On 05/19/2011 11:08 PM, Cyrill Gorcunov wrote:
...
>>
>> What prevents nr_online_cpus from being greater than KVM_NR_CPUS? Since
>> that latter is a #define, might want to change 'else if' to if there.
>>
>> David
>>
> 
> Good catch! We should add a constraint here and limit it to KVM_NR_CPUS.
> 

Heh, actually it get catched futher in code by

	max_cpus = kvm__max_cpus(kvm);

	if (nrcpus > max_cpus) {
		printf("  # Limit the number of CPUs to %d\n", max_cpus);
		kvm->nrcpus	= max_cpus;
	}

so no issue here (except that MP table can support a limited number of
cpus and for 32bit apic addressing we need ACPI support implemented I think).
diff mbox

Patch

diff --git a/tools/kvm/kvm-run.c b/tools/kvm/kvm-run.c
index 63181bf..1517264 100644
--- a/tools/kvm/kvm-run.c
+++ b/tools/kvm/kvm-run.c
@@ -70,7 +70,7 @@  extern int  active_console;
 
 bool do_debug_print = false;
 
-static int nrcpus = 1;
+static int nrcpus;
 
 static const char * const run_usage[] = {
 	"kvm run [<options>] [<kernel image>]",
@@ -409,6 +409,8 @@  int kvm_cmd_run(int argc, const char **argv, const char *prefix)
 	signal(SIGQUIT, handle_sigquit);
 	signal(SIGUSR1, handle_sigusr1);
 
+	nr_online_cpus = sysconf(_SC_NPROCESSORS_ONLN);
+
 	while (argc != 0) {
 		argc = parse_options(argc, argv, options, run_usage,
 				PARSE_OPT_STOP_AT_NON_OPTION);
@@ -439,7 +441,9 @@  int kvm_cmd_run(int argc, const char **argv, const char *prefix)
 
 	vmlinux_filename = find_vmlinux();
 
-	if (nrcpus < 1 || nrcpus > KVM_NR_CPUS)
+	if (nrcpus == 0)
+		nrcpus = nr_online_cpus;
+	else 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)
@@ -575,7 +579,6 @@  int kvm_cmd_run(int argc, const char **argv, const char *prefix)
 
 	kvm__init_ram(kvm);
 
-	nr_online_cpus = sysconf(_SC_NPROCESSORS_ONLN);
 	thread_pool__init(nr_online_cpus);
 
 	for (i = 0; i < nrcpus; i++) {