diff mbox series

[kvm-unit-tests,v3] runtime: Allow to specify properties for accelerator

Message ID 20230615062148.19883-1-gshan@redhat.com
State New
Headers show
Series [kvm-unit-tests,v3] runtime: Allow to specify properties for accelerator | expand

Commit Message

Gavin Shan June 15, 2023, 6:21 a.m. UTC
There are extra properties for accelerators to enable the specific
features. For example, the dirty ring for KVM accelerator can be
enabled by "-accel kvm,dirty-ring-size=65536". Unfortuntely, the
extra properties for the accelerators aren't supported. It makes
it's impossible to test the combination of KVM and dirty ring
as the following error message indicates.

  # cd /home/gavin/sandbox/kvm-unit-tests/tests
  # QEMU=/home/gavin/sandbox/qemu.main/build/qemu-system-aarch64 \
    ACCEL=kvm,dirty-ring-size=65536 ./its-migration
     :
  BUILD_HEAD=2fffb37e
  timeout -k 1s --foreground 90s /home/gavin/sandbox/qemu.main/build/qemu-system-aarch64 \
  -nodefaults -machine virt -accel kvm,dirty-ring-size=65536 -cpu cortex-a57             \
  -device virtio-serial-device -device virtconsole,chardev=ctd -chardev testdev,id=ctd   \
  -device pci-testdev -display none -serial stdio -kernel _NO_FILE_4Uhere_ -smp 160      \
  -machine gic-version=3 -append its-pending-migration # -initrd /tmp/tmp.gfDLa1EtWk
  qemu-system-aarch64: kvm_init_vcpu: kvm_arch_init_vcpu failed (0): Invalid argument

Allow to specify extra properties for accelerators. With this, the
"its-migration" can be tested for the combination of KVM and dirty
ring.

Signed-off-by: Gavin Shan <gshan@redhat.com>
---
v3: Split $ACCEL to $ACCEL and $ACCEL_PROPS in get_qemu_accelerator()
    and don't print them as output, suggested by Drew.
---
 arm/run               | 12 ++++--------
 powerpc/run           |  5 ++---
 s390x/run             |  5 ++---
 scripts/arch-run.bash | 21 +++++++++++++--------
 x86/run               |  5 ++---
 5 files changed, 23 insertions(+), 25 deletions(-)

Comments

Nico Boehr June 15, 2023, 1:39 p.m. UTC | #1
Quoting Gavin Shan (2023-06-15 08:21:48)
> There are extra properties for accelerators to enable the specific
> features. For example, the dirty ring for KVM accelerator can be
> enabled by "-accel kvm,dirty-ring-size=65536". Unfortuntely, the
> extra properties for the accelerators aren't supported. It makes
> it's impossible to test the combination of KVM and dirty ring
> as the following error message indicates.
> 
>   # cd /home/gavin/sandbox/kvm-unit-tests/tests
>   # QEMU=/home/gavin/sandbox/qemu.main/build/qemu-system-aarch64 \
>     ACCEL=kvm,dirty-ring-size=65536 ./its-migration
>      :
>   BUILD_HEAD=2fffb37e
>   timeout -k 1s --foreground 90s /home/gavin/sandbox/qemu.main/build/qemu-system-aarch64 \
>   -nodefaults -machine virt -accel kvm,dirty-ring-size=65536 -cpu cortex-a57             \
>   -device virtio-serial-device -device virtconsole,chardev=ctd -chardev testdev,id=ctd   \
>   -device pci-testdev -display none -serial stdio -kernel _NO_FILE_4Uhere_ -smp 160      \
>   -machine gic-version=3 -append its-pending-migration # -initrd /tmp/tmp.gfDLa1EtWk
>   qemu-system-aarch64: kvm_init_vcpu: kvm_arch_init_vcpu failed (0): Invalid argument
> 
> Allow to specify extra properties for accelerators. With this, the
> "its-migration" can be tested for the combination of KVM and dirty
> ring.
> 
> Signed-off-by: Gavin Shan <gshan@redhat.com>

Maybe get_qemu_accelerator could be renamed now, since it doesn't actually "get"
anything, so maybe check_qemu_accelerator?

In any case, I gave it a quick run on s390x with kvm and tcg and nothing seems
to break, hence for the changes in s390x:

Tested-by: Nico Boehr <nrb@linux.ibm.com>
Acked-by: Nico Boehr <nrb@linux.ibm.com>
Gavin Shan June 16, 2023, 12:41 a.m. UTC | #2
Hi Nico,

On 6/15/23 23:39, Nico Boehr wrote:
> Quoting Gavin Shan (2023-06-15 08:21:48)
>> There are extra properties for accelerators to enable the specific
>> features. For example, the dirty ring for KVM accelerator can be
>> enabled by "-accel kvm,dirty-ring-size=65536". Unfortuntely, the
>> extra properties for the accelerators aren't supported. It makes
>> it's impossible to test the combination of KVM and dirty ring
>> as the following error message indicates.
>>
>>    # cd /home/gavin/sandbox/kvm-unit-tests/tests
>>    # QEMU=/home/gavin/sandbox/qemu.main/build/qemu-system-aarch64 \
>>      ACCEL=kvm,dirty-ring-size=65536 ./its-migration
>>       :
>>    BUILD_HEAD=2fffb37e
>>    timeout -k 1s --foreground 90s /home/gavin/sandbox/qemu.main/build/qemu-system-aarch64 \
>>    -nodefaults -machine virt -accel kvm,dirty-ring-size=65536 -cpu cortex-a57             \
>>    -device virtio-serial-device -device virtconsole,chardev=ctd -chardev testdev,id=ctd   \
>>    -device pci-testdev -display none -serial stdio -kernel _NO_FILE_4Uhere_ -smp 160      \
>>    -machine gic-version=3 -append its-pending-migration # -initrd /tmp/tmp.gfDLa1EtWk
>>    qemu-system-aarch64: kvm_init_vcpu: kvm_arch_init_vcpu failed (0): Invalid argument
>>
>> Allow to specify extra properties for accelerators. With this, the
>> "its-migration" can be tested for the combination of KVM and dirty
>> ring.
>>
>> Signed-off-by: Gavin Shan <gshan@redhat.com>
> 
> Maybe get_qemu_accelerator could be renamed now, since it doesn't actually "get"
> anything, so maybe check_qemu_accelerator?
> 
> In any case, I gave it a quick run on s390x with kvm and tcg and nothing seems
> to break, hence for the changes in s390x:
> 
> Tested-by: Nico Boehr <nrb@linux.ibm.com>
> Acked-by: Nico Boehr <nrb@linux.ibm.com>
> 

Thanks for a quick try and comment for this. I guess it's fine to keep 
the function name as get_qemu_accelator() because $ACCEL is split into 
$ACCEL and $ACCEL_PROPS inside it, even it don't print the accelerator 
name at return. However, I'm also fine with check_qemu_accelerator(). 
Lets see what's Drew's comment on this and I can post v4 to have the 
modified function name, or an followup patch to modify the function name.

Thanks,
Gavin
Andrew Jones June 19, 2023, 8:44 a.m. UTC | #3
On Fri, Jun 16, 2023 at 10:41:29AM +1000, Gavin Shan wrote:
> Hi Nico,
> 
> On 6/15/23 23:39, Nico Boehr wrote:
> > Quoting Gavin Shan (2023-06-15 08:21:48)
> > > There are extra properties for accelerators to enable the specific
> > > features. For example, the dirty ring for KVM accelerator can be
> > > enabled by "-accel kvm,dirty-ring-size=65536". Unfortuntely, the
> > > extra properties for the accelerators aren't supported. It makes
> > > it's impossible to test the combination of KVM and dirty ring
> > > as the following error message indicates.
> > > 
> > >    # cd /home/gavin/sandbox/kvm-unit-tests/tests
> > >    # QEMU=/home/gavin/sandbox/qemu.main/build/qemu-system-aarch64 \
> > >      ACCEL=kvm,dirty-ring-size=65536 ./its-migration
> > >       :
> > >    BUILD_HEAD=2fffb37e
> > >    timeout -k 1s --foreground 90s /home/gavin/sandbox/qemu.main/build/qemu-system-aarch64 \
> > >    -nodefaults -machine virt -accel kvm,dirty-ring-size=65536 -cpu cortex-a57             \
> > >    -device virtio-serial-device -device virtconsole,chardev=ctd -chardev testdev,id=ctd   \
> > >    -device pci-testdev -display none -serial stdio -kernel _NO_FILE_4Uhere_ -smp 160      \
> > >    -machine gic-version=3 -append its-pending-migration # -initrd /tmp/tmp.gfDLa1EtWk
> > >    qemu-system-aarch64: kvm_init_vcpu: kvm_arch_init_vcpu failed (0): Invalid argument
> > > 
> > > Allow to specify extra properties for accelerators. With this, the
> > > "its-migration" can be tested for the combination of KVM and dirty
> > > ring.
> > > 
> > > Signed-off-by: Gavin Shan <gshan@redhat.com>
> > 
> > Maybe get_qemu_accelerator could be renamed now, since it doesn't actually "get"
> > anything, so maybe check_qemu_accelerator?
> > 
> > In any case, I gave it a quick run on s390x with kvm and tcg and nothing seems
> > to break, hence for the changes in s390x:
> > 
> > Tested-by: Nico Boehr <nrb@linux.ibm.com>
> > Acked-by: Nico Boehr <nrb@linux.ibm.com>
> > 
> 
> Thanks for a quick try and comment for this. I guess it's fine to keep the
> function name as get_qemu_accelator() because $ACCEL is split into $ACCEL
> and $ACCEL_PROPS inside it, even it don't print the accelerator name at
> return. However, I'm also fine with check_qemu_accelerator(). Lets see
> what's Drew's comment on this and I can post v4 to have the modified
> function name, or an followup patch to modify the function name.

I suggested naming it set_qemu_accelerator() in the v2 review.

Thanks,
drew
Andrew Jones June 19, 2023, 8:45 a.m. UTC | #4
On Thu, Jun 15, 2023 at 04:21:48PM +1000, Gavin Shan wrote:
> There are extra properties for accelerators to enable the specific
> features. For example, the dirty ring for KVM accelerator can be
> enabled by "-accel kvm,dirty-ring-size=65536". Unfortuntely, the
> extra properties for the accelerators aren't supported. It makes
> it's impossible to test the combination of KVM and dirty ring
> as the following error message indicates.
> 
>   # cd /home/gavin/sandbox/kvm-unit-tests/tests
>   # QEMU=/home/gavin/sandbox/qemu.main/build/qemu-system-aarch64 \
>     ACCEL=kvm,dirty-ring-size=65536 ./its-migration
>      :
>   BUILD_HEAD=2fffb37e
>   timeout -k 1s --foreground 90s /home/gavin/sandbox/qemu.main/build/qemu-system-aarch64 \
>   -nodefaults -machine virt -accel kvm,dirty-ring-size=65536 -cpu cortex-a57             \
>   -device virtio-serial-device -device virtconsole,chardev=ctd -chardev testdev,id=ctd   \
>   -device pci-testdev -display none -serial stdio -kernel _NO_FILE_4Uhere_ -smp 160      \
>   -machine gic-version=3 -append its-pending-migration # -initrd /tmp/tmp.gfDLa1EtWk
>   qemu-system-aarch64: kvm_init_vcpu: kvm_arch_init_vcpu failed (0): Invalid argument
> 
> Allow to specify extra properties for accelerators. With this, the
> "its-migration" can be tested for the combination of KVM and dirty
> ring.
> 
> Signed-off-by: Gavin Shan <gshan@redhat.com>
> ---
> v3: Split $ACCEL to $ACCEL and $ACCEL_PROPS in get_qemu_accelerator()
>     and don't print them as output, suggested by Drew.
> ---
>  arm/run               | 12 ++++--------
>  powerpc/run           |  5 ++---
>  s390x/run             |  5 ++---
>  scripts/arch-run.bash | 21 +++++++++++++--------
>  x86/run               |  5 ++---
>  5 files changed, 23 insertions(+), 25 deletions(-)
> 
> diff --git a/arm/run b/arm/run
> index c6f25b8..d9ebe59 100755
> --- a/arm/run
> +++ b/arm/run
> @@ -10,10 +10,8 @@ if [ -z "$KUT_STANDALONE" ]; then
>  fi
>  processor="$PROCESSOR"
>  
> -accel=$(get_qemu_accelerator) ||
> -	exit $?
> -
> -if [ "$accel" = "kvm" ]; then
> +get_qemu_accelerator || exit $?
> +if [ "$ACCEL" = "kvm" ]; then
>  	QEMU_ARCH=$HOST
>  fi
>  
> @@ -23,11 +21,9 @@ qemu=$(search_qemu_binary) ||
>  if [ "$QEMU" ] && [ -z "$ACCEL" ] &&
>     [ "$HOST" = "aarch64" ] && [ "$ARCH" = "arm" ] &&
>     [ "$(basename $QEMU)" = "qemu-system-arm" ]; then
> -	accel=tcg
> +	ACCEL="tcg"
>  fi
>  

As I pointed out in the v2 review we can't just s/accel/ACCEL/ without
other changes. Now ACCEL will also be set when the above condition
is checked, making it useless. Please ensure the test case that commit
c7d6c7f00e7c ("arm/run: Use TCG with qemu-system-arm on arm64 systems")
fixed still works with your patch.

Thanks,
drew
Gavin Shan June 20, 2023, 4:13 a.m. UTC | #5
Hi Drew,

On 6/19/23 18:45, Andrew Jones wrote:
> On Thu, Jun 15, 2023 at 04:21:48PM +1000, Gavin Shan wrote:
>> There are extra properties for accelerators to enable the specific
>> features. For example, the dirty ring for KVM accelerator can be
>> enabled by "-accel kvm,dirty-ring-size=65536". Unfortuntely, the
>> extra properties for the accelerators aren't supported. It makes
>> it's impossible to test the combination of KVM and dirty ring
>> as the following error message indicates.
>>
>>    # cd /home/gavin/sandbox/kvm-unit-tests/tests
>>    # QEMU=/home/gavin/sandbox/qemu.main/build/qemu-system-aarch64 \
>>      ACCEL=kvm,dirty-ring-size=65536 ./its-migration
>>       :
>>    BUILD_HEAD=2fffb37e
>>    timeout -k 1s --foreground 90s /home/gavin/sandbox/qemu.main/build/qemu-system-aarch64 \
>>    -nodefaults -machine virt -accel kvm,dirty-ring-size=65536 -cpu cortex-a57             \
>>    -device virtio-serial-device -device virtconsole,chardev=ctd -chardev testdev,id=ctd   \
>>    -device pci-testdev -display none -serial stdio -kernel _NO_FILE_4Uhere_ -smp 160      \
>>    -machine gic-version=3 -append its-pending-migration # -initrd /tmp/tmp.gfDLa1EtWk
>>    qemu-system-aarch64: kvm_init_vcpu: kvm_arch_init_vcpu failed (0): Invalid argument
>>
>> Allow to specify extra properties for accelerators. With this, the
>> "its-migration" can be tested for the combination of KVM and dirty
>> ring.
>>
>> Signed-off-by: Gavin Shan <gshan@redhat.com>
>> ---
>> v3: Split $ACCEL to $ACCEL and $ACCEL_PROPS in get_qemu_accelerator()
>>      and don't print them as output, suggested by Drew.
>> ---
>>   arm/run               | 12 ++++--------
>>   powerpc/run           |  5 ++---
>>   s390x/run             |  5 ++---
>>   scripts/arch-run.bash | 21 +++++++++++++--------
>>   x86/run               |  5 ++---
>>   5 files changed, 23 insertions(+), 25 deletions(-)
>>
>> diff --git a/arm/run b/arm/run
>> index c6f25b8..d9ebe59 100755
>> --- a/arm/run
>> +++ b/arm/run
>> @@ -10,10 +10,8 @@ if [ -z "$KUT_STANDALONE" ]; then
>>   fi
>>   processor="$PROCESSOR"
>>   
>> -accel=$(get_qemu_accelerator) ||
>> -	exit $?
>> -
>> -if [ "$accel" = "kvm" ]; then
>> +get_qemu_accelerator || exit $?
>> +if [ "$ACCEL" = "kvm" ]; then
>>   	QEMU_ARCH=$HOST
>>   fi
>>   
>> @@ -23,11 +21,9 @@ qemu=$(search_qemu_binary) ||
>>   if [ "$QEMU" ] && [ -z "$ACCEL" ] &&
>>      [ "$HOST" = "aarch64" ] && [ "$ARCH" = "arm" ] &&
>>      [ "$(basename $QEMU)" = "qemu-system-arm" ]; then
>> -	accel=tcg
>> +	ACCEL="tcg"
>>   fi
>>   
> 
> As I pointed out in the v2 review we can't just s/accel/ACCEL/ without
> other changes. Now ACCEL will also be set when the above condition
> is checked, making it useless. Please ensure the test case that commit
> c7d6c7f00e7c ("arm/run: Use TCG with qemu-system-arm on arm64 systems")
> fixed still works with your patch.
> 

Sorry that I missed your comments for v2. In order to make the test case
in c7d6c7f00e7c working, we just need to call set_qemu_accelerator() after
the chunk of code, like below. When $ACCEL is set to "tcg" by the conditional
code, it won't be changed in the following set_qemu_accelerator().

Could you Please confirm if it looks good to you so that I can integrate
the changes to v4 and post it.

arm/run
--------

processor="$PROCESSOR"

if [ "$QEMU" ] && [ -z "$ACCEL" ] &&
    [ "$HOST" = "aarch64" ] && [ "$ARCH" = "arm" ] &&
    [ "$(basename $QEMU)" = "qemu-system-arm" ]; then
         ACCEL="tcg"
fi

set_qemu_accelerator || exit $?
if [ "$ACCEL" = "kvm" ]; then
         QEMU_ARCH=$HOST
fi


Thanks,
Gavin
Gavin Shan June 20, 2023, 4:14 a.m. UTC | #6
Hi Drew,

On 6/19/23 18:44, Andrew Jones wrote:
> On Fri, Jun 16, 2023 at 10:41:29AM +1000, Gavin Shan wrote:
>>
>> On 6/15/23 23:39, Nico Boehr wrote:
>>> Quoting Gavin Shan (2023-06-15 08:21:48)
>>>> There are extra properties for accelerators to enable the specific
>>>> features. For example, the dirty ring for KVM accelerator can be
>>>> enabled by "-accel kvm,dirty-ring-size=65536". Unfortuntely, the
>>>> extra properties for the accelerators aren't supported. It makes
>>>> it's impossible to test the combination of KVM and dirty ring
>>>> as the following error message indicates.
>>>>
>>>>     # cd /home/gavin/sandbox/kvm-unit-tests/tests
>>>>     # QEMU=/home/gavin/sandbox/qemu.main/build/qemu-system-aarch64 \
>>>>       ACCEL=kvm,dirty-ring-size=65536 ./its-migration
>>>>        :
>>>>     BUILD_HEAD=2fffb37e
>>>>     timeout -k 1s --foreground 90s /home/gavin/sandbox/qemu.main/build/qemu-system-aarch64 \
>>>>     -nodefaults -machine virt -accel kvm,dirty-ring-size=65536 -cpu cortex-a57             \
>>>>     -device virtio-serial-device -device virtconsole,chardev=ctd -chardev testdev,id=ctd   \
>>>>     -device pci-testdev -display none -serial stdio -kernel _NO_FILE_4Uhere_ -smp 160      \
>>>>     -machine gic-version=3 -append its-pending-migration # -initrd /tmp/tmp.gfDLa1EtWk
>>>>     qemu-system-aarch64: kvm_init_vcpu: kvm_arch_init_vcpu failed (0): Invalid argument
>>>>
>>>> Allow to specify extra properties for accelerators. With this, the
>>>> "its-migration" can be tested for the combination of KVM and dirty
>>>> ring.
>>>>
>>>> Signed-off-by: Gavin Shan <gshan@redhat.com>
>>>
>>> Maybe get_qemu_accelerator could be renamed now, since it doesn't actually "get"
>>> anything, so maybe check_qemu_accelerator?
>>>
>>> In any case, I gave it a quick run on s390x with kvm and tcg and nothing seems
>>> to break, hence for the changes in s390x:
>>>
>>> Tested-by: Nico Boehr <nrb@linux.ibm.com>
>>> Acked-by: Nico Boehr <nrb@linux.ibm.com>
>>>
>>
>> Thanks for a quick try and comment for this. I guess it's fine to keep the
>> function name as get_qemu_accelator() because $ACCEL is split into $ACCEL
>> and $ACCEL_PROPS inside it, even it don't print the accelerator name at
>> return. However, I'm also fine with check_qemu_accelerator(). Lets see
>> what's Drew's comment on this and I can post v4 to have the modified
>> function name, or an followup patch to modify the function name.
> 
> I suggested naming it set_qemu_accelerator() in the v2 review.
> 

My bad, it will be renamed to set_qemu_accelerator() in v4 :)

Thanks,
Gavin
Andrew Jones June 20, 2023, 9:06 a.m. UTC | #7
On Tue, Jun 20, 2023 at 02:13:22PM +1000, Gavin Shan wrote:
> Hi Drew,
> 
> On 6/19/23 18:45, Andrew Jones wrote:
> > On Thu, Jun 15, 2023 at 04:21:48PM +1000, Gavin Shan wrote:
> > > There are extra properties for accelerators to enable the specific
> > > features. For example, the dirty ring for KVM accelerator can be
> > > enabled by "-accel kvm,dirty-ring-size=65536". Unfortuntely, the
> > > extra properties for the accelerators aren't supported. It makes
> > > it's impossible to test the combination of KVM and dirty ring
> > > as the following error message indicates.
> > > 
> > >    # cd /home/gavin/sandbox/kvm-unit-tests/tests
> > >    # QEMU=/home/gavin/sandbox/qemu.main/build/qemu-system-aarch64 \
> > >      ACCEL=kvm,dirty-ring-size=65536 ./its-migration
> > >       :
> > >    BUILD_HEAD=2fffb37e
> > >    timeout -k 1s --foreground 90s /home/gavin/sandbox/qemu.main/build/qemu-system-aarch64 \
> > >    -nodefaults -machine virt -accel kvm,dirty-ring-size=65536 -cpu cortex-a57             \
> > >    -device virtio-serial-device -device virtconsole,chardev=ctd -chardev testdev,id=ctd   \
> > >    -device pci-testdev -display none -serial stdio -kernel _NO_FILE_4Uhere_ -smp 160      \
> > >    -machine gic-version=3 -append its-pending-migration # -initrd /tmp/tmp.gfDLa1EtWk
> > >    qemu-system-aarch64: kvm_init_vcpu: kvm_arch_init_vcpu failed (0): Invalid argument
> > > 
> > > Allow to specify extra properties for accelerators. With this, the
> > > "its-migration" can be tested for the combination of KVM and dirty
> > > ring.
> > > 
> > > Signed-off-by: Gavin Shan <gshan@redhat.com>
> > > ---
> > > v3: Split $ACCEL to $ACCEL and $ACCEL_PROPS in get_qemu_accelerator()
> > >      and don't print them as output, suggested by Drew.
> > > ---
> > >   arm/run               | 12 ++++--------
> > >   powerpc/run           |  5 ++---
> > >   s390x/run             |  5 ++---
> > >   scripts/arch-run.bash | 21 +++++++++++++--------
> > >   x86/run               |  5 ++---
> > >   5 files changed, 23 insertions(+), 25 deletions(-)
> > > 
> > > diff --git a/arm/run b/arm/run
> > > index c6f25b8..d9ebe59 100755
> > > --- a/arm/run
> > > +++ b/arm/run
> > > @@ -10,10 +10,8 @@ if [ -z "$KUT_STANDALONE" ]; then
> > >   fi
> > >   processor="$PROCESSOR"
> > > -accel=$(get_qemu_accelerator) ||
> > > -	exit $?
> > > -
> > > -if [ "$accel" = "kvm" ]; then
> > > +get_qemu_accelerator || exit $?
> > > +if [ "$ACCEL" = "kvm" ]; then
> > >   	QEMU_ARCH=$HOST
> > >   fi
> > > @@ -23,11 +21,9 @@ qemu=$(search_qemu_binary) ||
> > >   if [ "$QEMU" ] && [ -z "$ACCEL" ] &&
> > >      [ "$HOST" = "aarch64" ] && [ "$ARCH" = "arm" ] &&
> > >      [ "$(basename $QEMU)" = "qemu-system-arm" ]; then
> > > -	accel=tcg
> > > +	ACCEL="tcg"
> > >   fi
> > 
> > As I pointed out in the v2 review we can't just s/accel/ACCEL/ without
> > other changes. Now ACCEL will also be set when the above condition
> > is checked, making it useless. Please ensure the test case that commit
> > c7d6c7f00e7c ("arm/run: Use TCG with qemu-system-arm on arm64 systems")
> > fixed still works with your patch.
> > 
> 
> Sorry that I missed your comments for v2. In order to make the test case
> in c7d6c7f00e7c working, we just need to call set_qemu_accelerator() after
> the chunk of code, like below. When $ACCEL is set to "tcg" by the conditional
> code, it won't be changed in the following set_qemu_accelerator().
> 
> Could you Please confirm if it looks good to you so that I can integrate
> the changes to v4 and post it.
> 
> arm/run
> --------
> 
> processor="$PROCESSOR"
> 
> if [ "$QEMU" ] && [ -z "$ACCEL" ] &&
>    [ "$HOST" = "aarch64" ] && [ "$ARCH" = "arm" ] &&
>    [ "$(basename $QEMU)" = "qemu-system-arm" ]; then
>         ACCEL="tcg"
> fi
> 
> set_qemu_accelerator || exit $?
> if [ "$ACCEL" = "kvm" ]; then
>         QEMU_ARCH=$HOST
> fi
>

Looks fine, but please give it a test run.

Thanks,
drew
Gavin Shan June 23, 2023, 4:22 a.m. UTC | #8
Hi Drew,

On 6/20/23 19:06, Andrew Jones wrote:
> On Tue, Jun 20, 2023 at 02:13:22PM +1000, Gavin Shan wrote:
>> On 6/19/23 18:45, Andrew Jones wrote:
>>> On Thu, Jun 15, 2023 at 04:21:48PM +1000, Gavin Shan wrote:
>>>> There are extra properties for accelerators to enable the specific
>>>> features. For example, the dirty ring for KVM accelerator can be
>>>> enabled by "-accel kvm,dirty-ring-size=65536". Unfortuntely, the
>>>> extra properties for the accelerators aren't supported. It makes
>>>> it's impossible to test the combination of KVM and dirty ring
>>>> as the following error message indicates.
>>>>
>>>>     # cd /home/gavin/sandbox/kvm-unit-tests/tests
>>>>     # QEMU=/home/gavin/sandbox/qemu.main/build/qemu-system-aarch64 \
>>>>       ACCEL=kvm,dirty-ring-size=65536 ./its-migration
>>>>        :
>>>>     BUILD_HEAD=2fffb37e
>>>>     timeout -k 1s --foreground 90s /home/gavin/sandbox/qemu.main/build/qemu-system-aarch64 \
>>>>     -nodefaults -machine virt -accel kvm,dirty-ring-size=65536 -cpu cortex-a57             \
>>>>     -device virtio-serial-device -device virtconsole,chardev=ctd -chardev testdev,id=ctd   \
>>>>     -device pci-testdev -display none -serial stdio -kernel _NO_FILE_4Uhere_ -smp 160      \
>>>>     -machine gic-version=3 -append its-pending-migration # -initrd /tmp/tmp.gfDLa1EtWk
>>>>     qemu-system-aarch64: kvm_init_vcpu: kvm_arch_init_vcpu failed (0): Invalid argument
>>>>
>>>> Allow to specify extra properties for accelerators. With this, the
>>>> "its-migration" can be tested for the combination of KVM and dirty
>>>> ring.
>>>>
>>>> Signed-off-by: Gavin Shan <gshan@redhat.com>
>>>> ---
>>>> v3: Split $ACCEL to $ACCEL and $ACCEL_PROPS in get_qemu_accelerator()
>>>>       and don't print them as output, suggested by Drew.
>>>> ---
>>>>    arm/run               | 12 ++++--------
>>>>    powerpc/run           |  5 ++---
>>>>    s390x/run             |  5 ++---
>>>>    scripts/arch-run.bash | 21 +++++++++++++--------
>>>>    x86/run               |  5 ++---
>>>>    5 files changed, 23 insertions(+), 25 deletions(-)
>>>>
>>>> diff --git a/arm/run b/arm/run
>>>> index c6f25b8..d9ebe59 100755
>>>> --- a/arm/run
>>>> +++ b/arm/run
>>>> @@ -10,10 +10,8 @@ if [ -z "$KUT_STANDALONE" ]; then
>>>>    fi
>>>>    processor="$PROCESSOR"
>>>> -accel=$(get_qemu_accelerator) ||
>>>> -	exit $?
>>>> -
>>>> -if [ "$accel" = "kvm" ]; then
>>>> +get_qemu_accelerator || exit $?
>>>> +if [ "$ACCEL" = "kvm" ]; then
>>>>    	QEMU_ARCH=$HOST
>>>>    fi
>>>> @@ -23,11 +21,9 @@ qemu=$(search_qemu_binary) ||
>>>>    if [ "$QEMU" ] && [ -z "$ACCEL" ] &&
>>>>       [ "$HOST" = "aarch64" ] && [ "$ARCH" = "arm" ] &&
>>>>       [ "$(basename $QEMU)" = "qemu-system-arm" ]; then
>>>> -	accel=tcg
>>>> +	ACCEL="tcg"
>>>>    fi
>>>
>>> As I pointed out in the v2 review we can't just s/accel/ACCEL/ without
>>> other changes. Now ACCEL will also be set when the above condition
>>> is checked, making it useless. Please ensure the test case that commit
>>> c7d6c7f00e7c ("arm/run: Use TCG with qemu-system-arm on arm64 systems")
>>> fixed still works with your patch.
>>>
>>
>> Sorry that I missed your comments for v2. In order to make the test case
>> in c7d6c7f00e7c working, we just need to call set_qemu_accelerator() after
>> the chunk of code, like below. When $ACCEL is set to "tcg" by the conditional
>> code, it won't be changed in the following set_qemu_accelerator().
>>
>> Could you Please confirm if it looks good to you so that I can integrate
>> the changes to v4 and post it.
>>
>> arm/run
>> --------
>>
>> processor="$PROCESSOR"
>>
>> if [ "$QEMU" ] && [ -z "$ACCEL" ] &&
>>     [ "$HOST" = "aarch64" ] && [ "$ARCH" = "arm" ] &&
>>     [ "$(basename $QEMU)" = "qemu-system-arm" ]; then
>>          ACCEL="tcg"
>> fi
>>
>> set_qemu_accelerator || exit $?
>> if [ "$ACCEL" = "kvm" ]; then
>>          QEMU_ARCH=$HOST
>> fi
>>
> 
> Looks fine, but please give it a test run.
> 

Thanks, Drew. v4 has been posted for further review. Since I don't have a 'arm'
host around, I adjust $ARCH to "arm64" for a simulation and the test case included
in commit c7d6c7f00e7c should be working fine: We eventually have "tcg" instead of
"kvm" accelerator for the combination, which is expected by commit c7d6c7f00e7c

v4: https://lore.kernel.org/kvmarm/20230623035750.312679-1-gshan@redhat.com/T/#u

Thanks,
Gavin
Andrew Jones June 23, 2023, 7:36 a.m. UTC | #9
On Fri, Jun 23, 2023 at 02:22:42PM +1000, Gavin Shan wrote:
> Hi Drew,
> 
> On 6/20/23 19:06, Andrew Jones wrote:
> > On Tue, Jun 20, 2023 at 02:13:22PM +1000, Gavin Shan wrote:
> > > On 6/19/23 18:45, Andrew Jones wrote:
> > > > On Thu, Jun 15, 2023 at 04:21:48PM +1000, Gavin Shan wrote:
> > > > > There are extra properties for accelerators to enable the specific
> > > > > features. For example, the dirty ring for KVM accelerator can be
> > > > > enabled by "-accel kvm,dirty-ring-size=65536". Unfortuntely, the
> > > > > extra properties for the accelerators aren't supported. It makes
> > > > > it's impossible to test the combination of KVM and dirty ring
> > > > > as the following error message indicates.
> > > > > 
> > > > >     # cd /home/gavin/sandbox/kvm-unit-tests/tests
> > > > >     # QEMU=/home/gavin/sandbox/qemu.main/build/qemu-system-aarch64 \
> > > > >       ACCEL=kvm,dirty-ring-size=65536 ./its-migration
> > > > >        :
> > > > >     BUILD_HEAD=2fffb37e
> > > > >     timeout -k 1s --foreground 90s /home/gavin/sandbox/qemu.main/build/qemu-system-aarch64 \
> > > > >     -nodefaults -machine virt -accel kvm,dirty-ring-size=65536 -cpu cortex-a57             \
> > > > >     -device virtio-serial-device -device virtconsole,chardev=ctd -chardev testdev,id=ctd   \
> > > > >     -device pci-testdev -display none -serial stdio -kernel _NO_FILE_4Uhere_ -smp 160      \
> > > > >     -machine gic-version=3 -append its-pending-migration # -initrd /tmp/tmp.gfDLa1EtWk
> > > > >     qemu-system-aarch64: kvm_init_vcpu: kvm_arch_init_vcpu failed (0): Invalid argument
> > > > > 
> > > > > Allow to specify extra properties for accelerators. With this, the
> > > > > "its-migration" can be tested for the combination of KVM and dirty
> > > > > ring.
> > > > > 
> > > > > Signed-off-by: Gavin Shan <gshan@redhat.com>
> > > > > ---
> > > > > v3: Split $ACCEL to $ACCEL and $ACCEL_PROPS in get_qemu_accelerator()
> > > > >       and don't print them as output, suggested by Drew.
> > > > > ---
> > > > >    arm/run               | 12 ++++--------
> > > > >    powerpc/run           |  5 ++---
> > > > >    s390x/run             |  5 ++---
> > > > >    scripts/arch-run.bash | 21 +++++++++++++--------
> > > > >    x86/run               |  5 ++---
> > > > >    5 files changed, 23 insertions(+), 25 deletions(-)
> > > > > 
> > > > > diff --git a/arm/run b/arm/run
> > > > > index c6f25b8..d9ebe59 100755
> > > > > --- a/arm/run
> > > > > +++ b/arm/run
> > > > > @@ -10,10 +10,8 @@ if [ -z "$KUT_STANDALONE" ]; then
> > > > >    fi
> > > > >    processor="$PROCESSOR"
> > > > > -accel=$(get_qemu_accelerator) ||
> > > > > -	exit $?
> > > > > -
> > > > > -if [ "$accel" = "kvm" ]; then
> > > > > +get_qemu_accelerator || exit $?
> > > > > +if [ "$ACCEL" = "kvm" ]; then
> > > > >    	QEMU_ARCH=$HOST
> > > > >    fi
> > > > > @@ -23,11 +21,9 @@ qemu=$(search_qemu_binary) ||
> > > > >    if [ "$QEMU" ] && [ -z "$ACCEL" ] &&
> > > > >       [ "$HOST" = "aarch64" ] && [ "$ARCH" = "arm" ] &&
> > > > >       [ "$(basename $QEMU)" = "qemu-system-arm" ]; then
> > > > > -	accel=tcg
> > > > > +	ACCEL="tcg"
> > > > >    fi
> > > > 
> > > > As I pointed out in the v2 review we can't just s/accel/ACCEL/ without
> > > > other changes. Now ACCEL will also be set when the above condition
> > > > is checked, making it useless. Please ensure the test case that commit
> > > > c7d6c7f00e7c ("arm/run: Use TCG with qemu-system-arm on arm64 systems")
> > > > fixed still works with your patch.
> > > > 
> > > 
> > > Sorry that I missed your comments for v2. In order to make the test case
> > > in c7d6c7f00e7c working, we just need to call set_qemu_accelerator() after
> > > the chunk of code, like below. When $ACCEL is set to "tcg" by the conditional
> > > code, it won't be changed in the following set_qemu_accelerator().
> > > 
> > > Could you Please confirm if it looks good to you so that I can integrate
> > > the changes to v4 and post it.
> > > 
> > > arm/run
> > > --------
> > > 
> > > processor="$PROCESSOR"
> > > 
> > > if [ "$QEMU" ] && [ -z "$ACCEL" ] &&
> > >     [ "$HOST" = "aarch64" ] && [ "$ARCH" = "arm" ] &&
> > >     [ "$(basename $QEMU)" = "qemu-system-arm" ]; then
> > >          ACCEL="tcg"
> > > fi
> > > 
> > > set_qemu_accelerator || exit $?
> > > if [ "$ACCEL" = "kvm" ]; then
> > >          QEMU_ARCH=$HOST
> > > fi
> > > 
> > 
> > Looks fine, but please give it a test run.
> > 
> 
> Thanks, Drew. v4 has been posted for further review. Since I don't have a 'arm'
> host around, I adjust $ARCH to "arm64" for a simulation and the test case included
> in commit c7d6c7f00e7c should be working fine: We eventually have "tcg" instead of
> "kvm" accelerator for the combination, which is expected by commit c7d6c7f00e7c

You don't need an arm host. Indeed $HOST should be aarch64 for this case.
You just need to compile the tests for arm instead of aarch64. That's easy
to do with a cross compiler

 ./configure --arch=arm --cross-prefix=arm-linux-gnu-

But hacking the condition is fine too for this simple case.

Thanks,
drew

> 
> v4: https://lore.kernel.org/kvmarm/20230623035750.312679-1-gshan@redhat.com/T/#u
> 
> Thanks,
> Gavin
>
diff mbox series

Patch

diff --git a/arm/run b/arm/run
index c6f25b8..d9ebe59 100755
--- a/arm/run
+++ b/arm/run
@@ -10,10 +10,8 @@  if [ -z "$KUT_STANDALONE" ]; then
 fi
 processor="$PROCESSOR"
 
-accel=$(get_qemu_accelerator) ||
-	exit $?
-
-if [ "$accel" = "kvm" ]; then
+get_qemu_accelerator || exit $?
+if [ "$ACCEL" = "kvm" ]; then
 	QEMU_ARCH=$HOST
 fi
 
@@ -23,11 +21,9 @@  qemu=$(search_qemu_binary) ||
 if [ "$QEMU" ] && [ -z "$ACCEL" ] &&
    [ "$HOST" = "aarch64" ] && [ "$ARCH" = "arm" ] &&
    [ "$(basename $QEMU)" = "qemu-system-arm" ]; then
-	accel=tcg
+	ACCEL="tcg"
 fi
 
-ACCEL=$accel
-
 if ! $qemu -machine '?' | grep -q 'ARM Virtual Machine'; then
 	echo "$qemu doesn't support mach-virt ('-machine virt'). Exiting."
 	exit 2
@@ -72,7 +68,7 @@  if $qemu $M -device '?' | grep -q pci-testdev; then
 	pci_testdev="-device pci-testdev"
 fi
 
-A="-accel $ACCEL"
+A="-accel $ACCEL$ACCEL_PROPS"
 command="$qemu -nodefaults $M $A -cpu $processor $chr_testdev $pci_testdev"
 command+=" -display none -serial stdio -kernel"
 command="$(migration_cmd) $(timeout_cmd) $command"
diff --git a/powerpc/run b/powerpc/run
index ee38e07..3988e72 100755
--- a/powerpc/run
+++ b/powerpc/run
@@ -9,8 +9,7 @@  if [ -z "$KUT_STANDALONE" ]; then
 	source scripts/arch-run.bash
 fi
 
-ACCEL=$(get_qemu_accelerator) ||
-	exit $?
+get_qemu_accelerator || exit $?
 
 qemu=$(search_qemu_binary) ||
 	exit $?
@@ -21,7 +20,7 @@  if ! $qemu -machine '?' 2>&1 | grep 'pseries' > /dev/null; then
 fi
 
 M='-machine pseries'
-M+=",accel=$ACCEL"
+M+=",accel=$ACCEL$ACCEL_PROPS"
 command="$qemu -nodefaults $M -bios $FIRMWARE"
 command+=" -display none -serial stdio -kernel"
 command="$(migration_cmd) $(timeout_cmd) $command"
diff --git a/s390x/run b/s390x/run
index f1111db..c57862f 100755
--- a/s390x/run
+++ b/s390x/run
@@ -9,8 +9,7 @@  if [ -z "$KUT_STANDALONE" ]; then
 	source scripts/arch-run.bash
 fi
 
-ACCEL=$(get_qemu_accelerator) ||
-	exit $?
+get_qemu_accelerator || exit $?
 
 qemu=$(search_qemu_binary) ||
 	exit $?
@@ -26,7 +25,7 @@  if [ "${1: -7}" = ".pv.bin" ] || [ "${TESTNAME: -3}" = "_PV" ] && [ "$MIGRATION"
 fi
 
 M='-machine s390-ccw-virtio'
-M+=",accel=$ACCEL"
+M+=",accel=$ACCEL$ACCEL_PROPS"
 command="$qemu -nodefaults -nographic $M"
 command+=" -chardev stdio,id=con0 -device sclpconsole,chardev=con0"
 command+=" -kernel"
diff --git a/scripts/arch-run.bash b/scripts/arch-run.bash
index 51e4b97..19c16c1 100644
--- a/scripts/arch-run.bash
+++ b/scripts/arch-run.bash
@@ -412,6 +412,9 @@  hvf_available ()
 
 get_qemu_accelerator ()
 {
+	ACCEL_PROPS=${ACCEL#"${ACCEL%%,*}"}
+	ACCEL=${ACCEL%%,*}
+
 	if [ "$ACCEL" = "kvm" ] && ! kvm_available; then
 		echo "KVM is needed, but not available on this host" >&2
 		return 2
@@ -421,13 +424,15 @@  get_qemu_accelerator ()
 		return 2
 	fi
 
-	if [ "$ACCEL" ]; then
-		echo $ACCEL
-	elif kvm_available; then
-		echo kvm
-	elif hvf_available; then
-		echo hvf
-	else
-		echo tcg
+	if [ -z "$ACCEL" ]; then
+		if kvm_available; then
+			ACCEL="kvm"
+		elif hvf_available; then
+			ACCEL="hvf"
+		else
+			ACCEL="tcg"
+		fi
 	fi
+
+	return 0
 }
diff --git a/x86/run b/x86/run
index 4d53b72..9a10703 100755
--- a/x86/run
+++ b/x86/run
@@ -9,8 +9,7 @@  if [ -z "$KUT_STANDALONE" ]; then
 	source scripts/arch-run.bash
 fi
 
-ACCEL=$(get_qemu_accelerator) ||
-	exit $?
+get_qemu_accelerator || exit $?
 
 qemu=$(search_qemu_binary) ||
 	exit $?
@@ -38,7 +37,7 @@  else
 fi
 
 command="${qemu} --no-reboot -nodefaults $pc_testdev -vnc none -serial stdio $pci_testdev"
-command+=" -machine accel=$ACCEL"
+command+=" -machine accel=$ACCEL$ACCEL_PROPS"
 if [ "${CONFIG_EFI}" != y ]; then
 	command+=" -kernel"
 fi