diff mbox series

[kvm-unit-tests] scripts: Speedup MAX_SMP check

Message ID 20180903105845.13942-1-christoffer.dall@arm.com (mailing list archive)
State New, archived
Headers show
Series [kvm-unit-tests] scripts: Speedup MAX_SMP check | expand

Commit Message

Christoffer Dall Sept. 3, 2018, 10:58 a.m. UTC
The current MAX_SMP check launches QEMU for every value of the SMP
parameter to check if the SMP parameter based on the native is higher
than the QEMU maximum supported configuration.

On something like a TX2, which has 224 threads, this takes a very long
time where the test script just sits there with no output.

Reduce the wait time by taking the log2 of MAX_SMP in each iteration of
the loop instead.

Signed-off-by: Christoffer Dall <christoffer.dall@arm.com>
---
 scripts/runtime.bash | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Andrew Jones Sept. 3, 2018, 12:25 p.m. UTC | #1
On Mon, Sep 03, 2018 at 12:58:45PM +0200, Christoffer Dall wrote:
> The current MAX_SMP check launches QEMU for every value of the SMP
> parameter to check if the SMP parameter based on the native is higher
> than the QEMU maximum supported configuration.
> 
> On something like a TX2, which has 224 threads, this takes a very long
> time where the test script just sits there with no output.
> 
> Reduce the wait time by taking the log2 of MAX_SMP in each iteration of
> the loop instead.
> 
> Signed-off-by: Christoffer Dall <christoffer.dall@arm.com>
> ---
>  scripts/runtime.bash | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/scripts/runtime.bash b/scripts/runtime.bash
> index a31ae91..1e2c288 100644
> --- a/scripts/runtime.bash
> +++ b/scripts/runtime.bash
> @@ -140,5 +140,5 @@ function run()
>  # just remove it...
>  while $RUNTIME_arch_run _NO_FILE_4Uhere_ -smp $MAX_SMP \
>  		|& grep -qi 'exceeds max CPUs'; do
> -	((--MAX_SMP))
> +	MAX_SMP=$((MAX_SMP >> 1))
>  done
> -- 
> 2.7.4
>

Reviewed-by: Andrew Jones <drjones@redhat.com>


Someday I should move this into arch-specific code and replace
it with something like:

if gic-v3
  MAX_SMP = MIN(_SC_NPROCESSORS_ONLN, 255)
else
  MAX_SMP = MIN(_SC_NPROCESSORS_ONLN, 8)

If other archs ever care about it (they currently don't), then
they can implement their own thing.

Thanks,
drew
Christoffer Dall Sept. 3, 2018, 1:13 p.m. UTC | #2
On Mon, Sep 03, 2018 at 02:25:50PM +0200, Andrew Jones wrote:
> On Mon, Sep 03, 2018 at 12:58:45PM +0200, Christoffer Dall wrote:
> > The current MAX_SMP check launches QEMU for every value of the SMP
> > parameter to check if the SMP parameter based on the native is higher
> > than the QEMU maximum supported configuration.
> > 
> > On something like a TX2, which has 224 threads, this takes a very long
> > time where the test script just sits there with no output.
> > 
> > Reduce the wait time by taking the log2 of MAX_SMP in each iteration of
> > the loop instead.
> > 
> > Signed-off-by: Christoffer Dall <christoffer.dall@arm.com>
> > ---
> >  scripts/runtime.bash | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/scripts/runtime.bash b/scripts/runtime.bash
> > index a31ae91..1e2c288 100644
> > --- a/scripts/runtime.bash
> > +++ b/scripts/runtime.bash
> > @@ -140,5 +140,5 @@ function run()
> >  # just remove it...
> >  while $RUNTIME_arch_run _NO_FILE_4Uhere_ -smp $MAX_SMP \
> >  		|& grep -qi 'exceeds max CPUs'; do
> > -	((--MAX_SMP))
> > +	MAX_SMP=$((MAX_SMP >> 1))
> >  done
> > -- 
> > 2.7.4
> >
> 
> Reviewed-by: Andrew Jones <drjones@redhat.com>
> 
> 
> Someday I should move this into arch-specific code and replace
> it with something like:
> 
> if gic-v3
>   MAX_SMP = MIN(_SC_NPROCESSORS_ONLN, 255)

Not quite, becasue QEMU can't seem to support more than 123 CPUs with it
current default set of parameters used by kvmtool at least.  But perhaps
that's being fixed with some changes to QEMU/KVM (I lost track).

Thanks for the reviews.

    Christoffer



> else
>   MAX_SMP = MIN(_SC_NPROCESSORS_ONLN, 8)
> 
> If other archs ever care about it (they currently don't), then
> they can implement their own thing.
>
Christoffer Dall Oct. 30, 2018, 12:19 p.m. UTC | #3
On Mon, Sep 03, 2018 at 02:25:50PM +0200, Andrew Jones wrote:
> On Mon, Sep 03, 2018 at 12:58:45PM +0200, Christoffer Dall wrote:
> > The current MAX_SMP check launches QEMU for every value of the SMP
> > parameter to check if the SMP parameter based on the native is higher
> > than the QEMU maximum supported configuration.
> > 
> > On something like a TX2, which has 224 threads, this takes a very long
> > time where the test script just sits there with no output.
> > 
> > Reduce the wait time by taking the log2 of MAX_SMP in each iteration of
> > the loop instead.
> > 
> > Signed-off-by: Christoffer Dall <christoffer.dall@arm.com>
> > ---
> >  scripts/runtime.bash | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/scripts/runtime.bash b/scripts/runtime.bash
> > index a31ae91..1e2c288 100644
> > --- a/scripts/runtime.bash
> > +++ b/scripts/runtime.bash
> > @@ -140,5 +140,5 @@ function run()
> >  # just remove it...
> >  while $RUNTIME_arch_run _NO_FILE_4Uhere_ -smp $MAX_SMP \
> >  		|& grep -qi 'exceeds max CPUs'; do
> > -	((--MAX_SMP))
> > +	MAX_SMP=$((MAX_SMP >> 1))
> >  done
> > -- 
> > 2.7.4
> >
> 
> Reviewed-by: Andrew Jones <drjones@redhat.com>
> 
> 

Paolo, if you're ok with this patch, could you apply it?

(I failed to CC you the first time around, only had the kvm list.)

Thanks,

    Christoffer
Paolo Bonzini Jan. 30, 2019, 11:54 a.m. UTC | #4
On 30/10/18 13:19, Christoffer Dall wrote:
> On Mon, Sep 03, 2018 at 02:25:50PM +0200, Andrew Jones wrote:
>> On Mon, Sep 03, 2018 at 12:58:45PM +0200, Christoffer Dall wrote:
>>> The current MAX_SMP check launches QEMU for every value of the SMP
>>> parameter to check if the SMP parameter based on the native is higher
>>> than the QEMU maximum supported configuration.
>>>
>>> On something like a TX2, which has 224 threads, this takes a very long
>>> time where the test script just sits there with no output.
>>>
>>> Reduce the wait time by taking the log2 of MAX_SMP in each iteration of
>>> the loop instead.
>>>
>>> Signed-off-by: Christoffer Dall <christoffer.dall@arm.com>
>>> ---
>>>  scripts/runtime.bash | 2 +-
>>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/scripts/runtime.bash b/scripts/runtime.bash
>>> index a31ae91..1e2c288 100644
>>> --- a/scripts/runtime.bash
>>> +++ b/scripts/runtime.bash
>>> @@ -140,5 +140,5 @@ function run()
>>>  # just remove it...
>>>  while $RUNTIME_arch_run _NO_FILE_4Uhere_ -smp $MAX_SMP \
>>>  		|& grep -qi 'exceeds max CPUs'; do
>>> -	((--MAX_SMP))
>>> +	MAX_SMP=$((MAX_SMP >> 1))
>>>  done
>>> -- 
>>> 2.7.4
>>>
>>
>> Reviewed-by: Andrew Jones <drjones@redhat.com>
>>
>>
> 
> Paolo, if you're ok with this patch, could you apply it?
> 
> (I failed to CC you the first time around, only had the kvm list.)
> 
> Thanks,
> 
>     Christoffer
> 

Queued now.

Paolo
diff mbox series

Patch

diff --git a/scripts/runtime.bash b/scripts/runtime.bash
index a31ae91..1e2c288 100644
--- a/scripts/runtime.bash
+++ b/scripts/runtime.bash
@@ -140,5 +140,5 @@  function run()
 # just remove it...
 while $RUNTIME_arch_run _NO_FILE_4Uhere_ -smp $MAX_SMP \
 		|& grep -qi 'exceeds max CPUs'; do
-	((--MAX_SMP))
+	MAX_SMP=$((MAX_SMP >> 1))
 done