From: Adam Miszczak <adam.miszczak@linux.intel.com>
To: igt-dev@lists.freedesktop.org
Cc: marcin.bernatowicz@linux.intel.com, kamil.konieczny@linux.intel.com
Subject: [PATCH i-g-t 3/3] tools/vmtb: Reconfigure tests setup
Date: Thu, 15 Oct 2026 09:10:37 +0200 [thread overview]
Message-ID: <20261015071037.10898-4-adam.miszczak@linux.intel.com> (raw)
In-Reply-To: <20261015071037.10898-1-adam.miszczak@linux.intel.com>
Switch test config variants from vGPU profiles to auto resources
and scheduling provisioning (basic and migration tests).
Drop the 'full' migration config variant - all busy migration tests
by default run in the basic 1xVF and 2xVF scope.
Add dedicated TestBusyMigrationParallel class with 4xVF and 6xVF
config variants to validate parallel multi-VM migration:
- 4xVMs migration: VM0->VM3 and VM1->VM2
- 6xVMs migration: VM0->VM5, VM1->VM4 and VM2->VM3
Raise default max_vms in test_migration config helper (2 -> 24)
to allow running VMs on all enabled VFs.
Remove manual EQ/PT override in test_migration::test_2vm_pause_resume
(no longer needed since the driver provides finite defaults).
Reduce max VMs number (4 -> 2) for test_basic::TestVfDriverLoadRemove
to prevent host's memory depletion on systems with limited host RAM.
Signed-off-by: Adam Miszczak <adam.miszczak@linux.intel.com>
---
tools/vmtb/vmm_flows/test_basic.py | 15 ++++----
tools/vmtb/vmm_flows/test_migration.py | 51 ++++++++++++--------------
2 files changed, 30 insertions(+), 36 deletions(-)
diff --git a/tools/vmtb/vmm_flows/test_basic.py b/tools/vmtb/vmm_flows/test_basic.py
index 597ebbb68..d7041c61f 100644
--- a/tools/vmtb/vmm_flows/test_basic.py
+++ b/tools/vmtb/vmm_flows/test_basic.py
@@ -41,8 +41,7 @@ def set_test_config(test_variants: List[Tuple[int, VfProvisioningMode, VfSchedul
return test_configs
-test_variants_1 = [(1, VfProvisioningMode.VGPU_PROFILE, VfSchedulingMode.DEFAULT_PROFILE),
- (2, VfProvisioningMode.VGPU_PROFILE, VfSchedulingMode.DEFAULT_PROFILE),
+test_variants_1 = [(1, VfProvisioningMode.AUTO, VfSchedulingMode.AUTO),
(2, VfProvisioningMode.AUTO, VfSchedulingMode.AUTO)]
@pytest.mark.parametrize('setup_vms', set_test_config(test_variants_1), ids=idfn_test_config, indirect=['setup_vms'])
@@ -63,9 +62,9 @@ class TestVmSetup:
assert driver_check(vm)
-test_variants_2 = [(1, VfProvisioningMode.VGPU_PROFILE, VfSchedulingMode.DEFAULT_PROFILE),
- (2, VfProvisioningMode.VGPU_PROFILE, VfSchedulingMode.DEFAULT_PROFILE),
- (4, VfProvisioningMode.VGPU_PROFILE, VfSchedulingMode.DEFAULT_PROFILE)]
+test_variants_2 = [(1, VfProvisioningMode.AUTO, VfSchedulingMode.AUTO),
+ (2, VfProvisioningMode.AUTO, VfSchedulingMode.AUTO),
+ (4, VfProvisioningMode.AUTO, VfSchedulingMode.AUTO)]
@pytest.mark.parametrize('setup_vms', set_test_config(test_variants_2), ids=idfn_test_config, indirect=['setup_vms'])
class TestVmWorkload:
@@ -106,10 +105,10 @@ class TestVmWorkload:
logger.info("Execute wsim parallel on VMs - results: %s", result)
-test_variants_3 = [(2, VfProvisioningMode.VGPU_PROFILE, VfSchedulingMode.DEFAULT_PROFILE),
- (4, VfProvisioningMode.VGPU_PROFILE, VfSchedulingMode.DEFAULT_PROFILE)]
+test_variants_3 = [(2, VfProvisioningMode.AUTO, VfSchedulingMode.AUTO),
+ (4, VfProvisioningMode.AUTO, VfSchedulingMode.AUTO)]
-@pytest.mark.parametrize('setup_vms', set_test_config(test_variants=test_variants_3, max_vms=4, vf_driver_load=False),
+@pytest.mark.parametrize('setup_vms', set_test_config(test_variants=test_variants_3, max_vms=2, vf_driver_load=False),
ids = idfn_test_config, indirect=['setup_vms'])
class TestVfDriverLoadRemove:
"""Verify VF (guest) driver load or remove doesn't affect execution on the other VM:
diff --git a/tools/vmtb/vmm_flows/test_migration.py b/tools/vmtb/vmm_flows/test_migration.py
index c4f3f00a4..273ff5768 100644
--- a/tools/vmtb/vmm_flows/test_migration.py
+++ b/tools/vmtb/vmm_flows/test_migration.py
@@ -30,17 +30,14 @@ IGT_RESTORE_DELAY = 3 # Time between VM resume and WL status check (post-restore
MS_IN_SEC = 1000
-# Full configuration variant: 1xVF, 2xVF and MAXxVF with auto and vGPU profiles provisioning
-# TODO: add max VFs variants
-test_variants_full = [(1, VfProvisioningMode.AUTO, VfSchedulingMode.DEFAULT_PROFILE),
- (2, VfProvisioningMode.AUTO, VfSchedulingMode.DEFAULT_PROFILE),
- (1, VfProvisioningMode.VGPU_PROFILE, VfSchedulingMode.DEFAULT_PROFILE),
- (2, VfProvisioningMode.VGPU_PROFILE, VfSchedulingMode.DEFAULT_PROFILE)]
+# Basic configuration variant: 1xVF and 2xVF with auto provisioning
+test_variants_basic = [(1, VfProvisioningMode.AUTO, VfSchedulingMode.AUTO),
+ (2, VfProvisioningMode.AUTO, VfSchedulingMode.AUTO)]
-# Basic configuration variant: 1xVF and 2xVF with auto provisioning
-test_variants_basic = [(1, VfProvisioningMode.AUTO, VfSchedulingMode.DEFAULT_PROFILE),
- (2, VfProvisioningMode.AUTO, VfSchedulingMode.DEFAULT_PROFILE)]
+# Parallel-migration configuration variant: 4xVF and 6xVF with auto provisioning
+test_variants_parallel = [(4, VfProvisioningMode.AUTO, VfSchedulingMode.AUTO),
+ (6, VfProvisioningMode.AUTO, VfSchedulingMode.AUTO)]
# vGPU profiles configuration variant: 1xVF and 2xVF with vGPU profiles provisioning
@@ -365,7 +362,7 @@ def idfn_workload(workload: MigrationWorkloadWsim):
def set_test_config(test_variants: List[Tuple[int, VfProvisioningMode, VfSchedulingMode]],
- max_vms: int = 2, wa_reduce_vf_lmem: bool = False) -> List[VmmTestingConfig]:
+ max_vms: int = 24, wa_reduce_vf_lmem: bool = False) -> List[VmmTestingConfig]:
"""Helper function to provide a parametrized test with a list of test configuration variants."""
test_configs: List[VmmTestingConfig] = []
@@ -380,7 +377,8 @@ def set_test_config(test_variants: List[Tuple[int, VfProvisioningMode, VfSchedul
# Busy migration TCs with WSIM workload
@pytest.mark.parametrize('set_migration_wl', [wsim_short_preempt],
ids=idfn_workload, indirect=['set_migration_wl'])
-@pytest.mark.parametrize('setup_vms', set_test_config(test_variants_full), ids=idfn_test_config, indirect=['setup_vms'])
+@pytest.mark.parametrize('setup_vms', set_test_config(test_variants_basic),
+ ids=idfn_test_config, indirect=['setup_vms'])
class TestBusyMigrationWsim1(BaseTestBusyMigration):
"""Save-restore VM state with VF busy executing short (5ms) preemptable batches.
@@ -468,7 +466,7 @@ class TestBusyMigrationIgtExecReset2(BaseTestBusyMigration):
@pytest.mark.parametrize('set_migration_wl', [igt_exec_reset_long_spin_many_preempt_threads],
ids=idfn_workload, indirect=['set_migration_wl'])
-@pytest.mark.parametrize('setup_vms', set_test_config(test_variants_full),
+@pytest.mark.parametrize('setup_vms', set_test_config(test_variants_basic),
ids=idfn_test_config, indirect=['setup_vms'])
class TestBusyMigrationIgtExecReset3(BaseTestBusyMigration):
"""Save-restore VM state with VF busy executing IGT xe_exec_reset@long-spin-many-preempt-threads."""
@@ -508,7 +506,7 @@ class TestBusyMigrationIgtExecReset7(BaseTestBusyMigration):
@pytest.mark.parametrize('set_migration_wl', [igt_exec_reset_long_spin_reuse_many_preempt_threads],
ids=idfn_workload, indirect=['set_migration_wl'])
-@pytest.mark.parametrize('setup_vms', set_test_config(test_variants_full),
+@pytest.mark.parametrize('setup_vms', set_test_config(test_variants_basic),
ids=idfn_test_config, indirect=['setup_vms'])
class TestBusyMigrationIgtExecReset8(BaseTestBusyMigration):
"""Save-restore VM state with VF busy executing IGT xe_exec_reset@long-spin-reuse-many-preempt-threads."""
@@ -532,7 +530,7 @@ class TestBusyMigrationIgtExecReset10(BaseTestBusyMigration):
@pytest.mark.parametrize('set_migration_wl', [igt_exec_reset_long_spin_sys_reuse_many_preempt_threads],
ids=idfn_workload, indirect=['set_migration_wl'])
-@pytest.mark.parametrize('setup_vms', set_test_config(test_variants_full),
+@pytest.mark.parametrize('setup_vms', set_test_config(test_variants_basic),
ids=idfn_test_config, indirect=['setup_vms'])
class TestBusyMigrationIgtExecReset11(BaseTestBusyMigration):
"""Save-restore VM state with VF busy executing IGT xe_exec_reset@long-spin-sys-reuse-many-preempt-threads."""
@@ -540,7 +538,7 @@ class TestBusyMigrationIgtExecReset11(BaseTestBusyMigration):
@pytest.mark.parametrize('set_migration_wl', [igt_exec_reset_long_spin_comp_reuse_many_preempt_threads],
ids=idfn_workload, indirect=['set_migration_wl'])
-@pytest.mark.parametrize('setup_vms', set_test_config(test_variants_full),
+@pytest.mark.parametrize('setup_vms', set_test_config(test_variants_basic),
ids=idfn_test_config, indirect=['setup_vms'])
class TestBusyMigrationIgtExecReset12(BaseTestBusyMigration):
"""Save-restore VM state with VF busy executing IGT xe_exec_reset@long-spin-comp-reuse-many-preempt-threads."""
@@ -580,7 +578,7 @@ class TestBusyMigrationIgtExecReset16(BaseTestBusyMigration):
@pytest.mark.parametrize('set_migration_wl', [igt_exec_threads_basic],
ids=idfn_workload, indirect=['set_migration_wl'])
-@pytest.mark.parametrize('setup_vms', set_test_config(test_variants_full),
+@pytest.mark.parametrize('setup_vms', set_test_config(test_variants_basic),
ids=idfn_test_config, indirect=['setup_vms'])
class TestBusyMigrationIgtExecThreads1(BaseTestBusyMigration):
"""Save-restore VM state with VF busy executing IGT xe_exec_threads@threads-basic."""
@@ -604,7 +602,7 @@ class TestBusyMigrationIgtExecThreads3(BaseTestBusyMigration):
@pytest.mark.parametrize('set_migration_wl', [igt_exec_threads_many_queues],
ids=idfn_workload, indirect=['set_migration_wl'])
-@pytest.mark.parametrize('setup_vms', set_test_config(test_variants_full),
+@pytest.mark.parametrize('setup_vms', set_test_config(test_variants_basic),
ids=idfn_test_config, indirect=['setup_vms'])
class TestBusyMigrationIgtExecThreads4(BaseTestBusyMigration):
"""Save-restore VM state with VF busy executing IGT xe_exec_threads@threads-many-queues."""
@@ -634,6 +632,14 @@ class TestBusyMigrationIgtComputePreempt(BaseTestBusyMigration):
"""Save-restore VM state with VF busy executing IGT xe_compute_preempt@compute-preempt-many (CCS path)."""
+@pytest.mark.parametrize('set_migration_wl', [igt_exec_threads_many_queues],
+ ids=idfn_workload, indirect=['set_migration_wl'])
+@pytest.mark.parametrize('setup_vms', set_test_config(test_variants_parallel),
+ ids=idfn_test_config, indirect=['setup_vms'])
+class TestBusyMigrationParallel(BaseTestBusyMigration):
+ """Save-restore multiple VMs state in parallel with VF busy executing IGT xe_exec_threads@threads-many-queues."""
+
+
@pytest.mark.parametrize('setup_vms', set_test_config(test_variants_basic),
ids=idfn_test_config, indirect=['setup_vms'])
class TestIdleMigration:
@@ -1175,8 +1181,6 @@ def test_2vm_pause_resume(create_1host_2vm):
vm1.assign_vf(vf2)
ts.poweron_vms()
- pause_vf_num = 1
-
assert modprobe_driver_run_check(vm0)
assert modprobe_driver_run_check(vm1)
@@ -1194,11 +1198,6 @@ def test_2vm_pause_resume(create_1host_2vm):
logger.debug("Submit IGT WL (gem_spin_batch) on VM1")
igt_vm1 = IgtExecutor(vm1, IgtType.SPIN_BATCH)
- # Special handling of pausing VMs with infinite ExecQuanta - refer to SAS for details
- logger.debug("Set VF1 EQ/PF before the pause")
- ts.get_dut().driver.set_exec_quantum_ms(pause_vf_num, 1)
- ts.get_dut().driver.set_preempt_timeout_us(pause_vf_num, 100)
-
logger.debug("Pause execution on VM0/VF1")
vm0.pause()
@@ -1208,10 +1207,6 @@ def test_2vm_pause_resume(create_1host_2vm):
logger.debug("Resume execution on VM0/VF1")
vm0.resume()
- logger.debug("Reset VF1 EQ/PF to the initial values (infinite) after resume")
- ts.get_dut().driver.set_exec_quantum_ms(pause_vf_num, 0)
- ts.get_dut().driver.set_preempt_timeout_us(pause_vf_num, 0)
-
result_vm0 = gem_wsim_vm0.wait_results() # Throws exception on wsim fail
assert expected_elapsed_sec * 0.8 < result_vm0.elapsed_sec < expected_elapsed_sec * 1.5
logger.debug("VM0 IGT WL (paused-resumed) finished successfully")
--
2.39.1
next prev parent reply other threads:[~2026-10-15 7:55 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-15 7:10 [PATCH i-g-t 0/3] tools/vmtb: Parallel multi-VM migration and tests reconfiguration Adam Miszczak
2026-10-15 7:10 ` [PATCH i-g-t 1/3] tools/vmtb: Support parallel multi-VM busy migration Adam Miszczak
2026-10-16 17:01 ` Bernatowicz, Marcin
2026-10-15 7:10 ` [PATCH i-g-t 2/3] tools/vmtb: Skip double migration tests on no-debug config Adam Miszczak
2026-10-16 17:02 ` Bernatowicz, Marcin
2026-10-15 7:10 ` Adam Miszczak [this message]
2026-10-16 17:02 ` [PATCH i-g-t 3/3] tools/vmtb: Reconfigure tests setup Bernatowicz, Marcin
2026-10-15 9:05 ` ✓ i915.CI.BAT: success for tools/vmtb: Parallel multi-VM migration and tests reconfiguration Patchwork
2026-10-15 11:37 ` ✓ i915.CI.Full: " Patchwork
2026-10-15 15:21 ` ✓ Xe.CI.BAT: " Patchwork
2026-10-15 20:09 ` ✗ Xe.CI.FULL: failure " Patchwork
2026-10-15 21:35 ` Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261015071037.10898-4-adam.miszczak@linux.intel.com \
--to=adam.miszczak@linux.intel.com \
--cc=igt-dev@lists.freedesktop.org \
--cc=kamil.konieczny@linux.intel.com \
--cc=marcin.bernatowicz@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox