From 28d6046b443823e79ad164627aa4b553aa6d5cae Mon Sep 17 00:00:00 2001 From: "Matthew McGovern (LINUX)" Date: Wed, 11 Feb 2026 16:15:32 -0800 Subject: [PATCH 1/8] dpdk: symmetric_mp hotplug --- lisa/microsoft/testsuites/dpdk/dpdksuite.py | 23 +++++++++++++++++++++ lisa/microsoft/testsuites/dpdk/dpdkutil.py | 6 +++--- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/lisa/microsoft/testsuites/dpdk/dpdksuite.py b/lisa/microsoft/testsuites/dpdk/dpdksuite.py index ad4012fc76..df4154fa4a 100644 --- a/lisa/microsoft/testsuites/dpdk/dpdksuite.py +++ b/lisa/microsoft/testsuites/dpdk/dpdksuite.py @@ -134,6 +134,29 @@ def verify_dpdk_symmetric_mp( ) -> None: run_dpdk_symmetric_mp(node, log, variables) + @TestCaseMetadata( + description=""" + netvsc pmd version. + This test case checks dpdk symmetic mp app, plus an sriov hotplug. + More details refer https://docs.microsoft.com/en-us/azure/virtual-network/setup-dpdk#prerequisites # noqa: E501 + """, + priority=2, + requirement=simple_requirement( + min_core_count=8, + min_nic_count=3, + network_interface=Sriov(), + unsupported_features=[Gpu, Infiniband], + ), + ) + def verify_dpdk_symmetric_mp_hotplug( + self, + node: Node, + log: Logger, + variables: Dict[str, Any], + result: TestResult, + ) -> None: + run_dpdk_symmetric_mp(node, log, variables, trigger_hotplug=True) + @TestCaseMetadata( description=""" netvsc pmd version with 1GiB hugepages diff --git a/lisa/microsoft/testsuites/dpdk/dpdkutil.py b/lisa/microsoft/testsuites/dpdk/dpdkutil.py index 0274be7288..254ab91d37 100644 --- a/lisa/microsoft/testsuites/dpdk/dpdkutil.py +++ b/lisa/microsoft/testsuites/dpdk/dpdkutil.py @@ -1790,9 +1790,9 @@ def run_dpdk_symmetric_mp( f"{str(symmetric_mp_path)} -l 1 --proc-type auto " f"{symmetric_mp_args} --proc-id 0" ), - timeout=660, + timeout=1200, signal=SIGINT, - kill_timeout=30, + kill_timeout=1200, ) # wait for it to start @@ -1806,7 +1806,7 @@ def run_dpdk_symmetric_mp( ), timeout=600, signal=SIGINT, - kill_timeout=35, + kill_timeout=1200, ) secondary.wait_output("APP: Finished Process Init", timeout=20) From 8f184f01a768200d0369ab7fb87cd0dbb5b62573 Mon Sep 17 00:00:00 2001 From: "Matthew McGovern (LINUX)" Date: Thu, 12 Feb 2026 05:52:51 -0800 Subject: [PATCH 2/8] dpdk: symmetric_mp hotplug and stress --- lisa/microsoft/testsuites/dpdk/dpdksuite.py | 31 ++++++++++++++++++++- lisa/microsoft/testsuites/dpdk/dpdkutil.py | 10 ++++--- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/lisa/microsoft/testsuites/dpdk/dpdksuite.py b/lisa/microsoft/testsuites/dpdk/dpdksuite.py index df4154fa4a..1df6c4b2be 100644 --- a/lisa/microsoft/testsuites/dpdk/dpdksuite.py +++ b/lisa/microsoft/testsuites/dpdk/dpdksuite.py @@ -147,6 +147,7 @@ def verify_dpdk_symmetric_mp( network_interface=Sriov(), unsupported_features=[Gpu, Infiniband], ), + timeout=1200, ) def verify_dpdk_symmetric_mp_hotplug( self, @@ -155,7 +156,35 @@ def verify_dpdk_symmetric_mp_hotplug( variables: Dict[str, Any], result: TestResult, ) -> None: - run_dpdk_symmetric_mp(node, log, variables, trigger_hotplug=True) + run_dpdk_symmetric_mp( + node, log, variables, trigger_hotplug=True, hotplug_times=10 + ) + + @TestCaseMetadata( + description=""" + netvsc pmd version. + This test case checks dpdk symmetic mp app, plus an sriov hotplug. + More details refer https://docs.microsoft.com/en-us/azure/virtual-network/setup-dpdk#prerequisites # noqa: E501 + """, + priority=4, + requirement=simple_requirement( + min_core_count=8, + min_nic_count=3, + network_interface=Sriov(), + unsupported_features=[Gpu, Infiniband], + ), + timeout=6000, + ) + def stress_dpdk_symmetric_mp_hotplug( + self, + node: Node, + log: Logger, + variables: Dict[str, Any], + result: TestResult, + ) -> None: + run_dpdk_symmetric_mp( + node, log, variables, trigger_hotplug=True, hotplug_times=100 + ) @TestCaseMetadata( description=""" diff --git a/lisa/microsoft/testsuites/dpdk/dpdkutil.py b/lisa/microsoft/testsuites/dpdk/dpdkutil.py index 254ab91d37..7b83aaa94e 100644 --- a/lisa/microsoft/testsuites/dpdk/dpdkutil.py +++ b/lisa/microsoft/testsuites/dpdk/dpdkutil.py @@ -1718,6 +1718,8 @@ def run_dpdk_symmetric_mp( - count packets received on tx/rx side of each process and port """ + + test_timeout = 60 * hotplug_times if trigger_hotplug else 35 # setup and unwrap the resources for this test # get a list of the upper non-primary nics and select two of them test_nics = [ @@ -1790,9 +1792,9 @@ def run_dpdk_symmetric_mp( f"{str(symmetric_mp_path)} -l 1 --proc-type auto " f"{symmetric_mp_args} --proc-id 0" ), - timeout=1200, + timeout=test_timeout, signal=SIGINT, - kill_timeout=1200, + kill_timeout=test_timeout + 5, ) # wait for it to start @@ -1804,9 +1806,9 @@ def run_dpdk_symmetric_mp( f"{str(symmetric_mp_path)} -l 2 --proc-type secondary " f"{symmetric_mp_args} --proc-id 1" ), - timeout=600, + timeout=test_timeout, signal=SIGINT, - kill_timeout=1200, + kill_timeout=test_timeout + 5, ) secondary.wait_output("APP: Finished Process Init", timeout=20) From f0b8acf6a9329d34d15561d2a8ed6f1ea3cf7d44 Mon Sep 17 00:00:00 2001 From: "Matthew McGovern (LINUX)" Date: Wed, 18 Feb 2026 04:08:13 -0800 Subject: [PATCH 3/8] dpdk: symmetric_mp hotplug timeout and memory adjust --- lisa/microsoft/testsuites/dpdk/dpdksuite.py | 6 +++--- lisa/microsoft/testsuites/dpdk/dpdkutil.py | 7 +++++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/lisa/microsoft/testsuites/dpdk/dpdksuite.py b/lisa/microsoft/testsuites/dpdk/dpdksuite.py index 1df6c4b2be..de97d0d2e1 100644 --- a/lisa/microsoft/testsuites/dpdk/dpdksuite.py +++ b/lisa/microsoft/testsuites/dpdk/dpdksuite.py @@ -147,7 +147,7 @@ def verify_dpdk_symmetric_mp( network_interface=Sriov(), unsupported_features=[Gpu, Infiniband], ), - timeout=1200, + timeout=600, ) def verify_dpdk_symmetric_mp_hotplug( self, @@ -157,7 +157,7 @@ def verify_dpdk_symmetric_mp_hotplug( result: TestResult, ) -> None: run_dpdk_symmetric_mp( - node, log, variables, trigger_hotplug=True, hotplug_times=10 + node, log, variables, trigger_hotplug=True, hotplug_times=3 ) @TestCaseMetadata( @@ -183,7 +183,7 @@ def stress_dpdk_symmetric_mp_hotplug( result: TestResult, ) -> None: run_dpdk_symmetric_mp( - node, log, variables, trigger_hotplug=True, hotplug_times=100 + node, log, variables, trigger_hotplug=True, hotplug_times=40 ) @TestCaseMetadata( diff --git a/lisa/microsoft/testsuites/dpdk/dpdkutil.py b/lisa/microsoft/testsuites/dpdk/dpdkutil.py index 7b83aaa94e..962d083f5b 100644 --- a/lisa/microsoft/testsuites/dpdk/dpdkutil.py +++ b/lisa/microsoft/testsuites/dpdk/dpdkutil.py @@ -74,6 +74,7 @@ ) from lisa.tools.hugepages import HugePageSize from lisa.tools.lscpu import CpuArchitecture +from lisa.util import sleep from lisa.util.constants import DEVICE_TYPE_SRIOV, SIGINT from lisa.util.parallel import TaskManager, run_in_parallel, run_in_parallel_async @@ -477,7 +478,7 @@ def initialize_node_resources( hugepages = node.tools[Hugepages] numa_nodes = node.tools[Lscpu].get_numa_node_count() try: - hugepages.init_hugepages(hugepage_size, minimum_gb=4 * numa_nodes) + hugepages.init_hugepages(hugepage_size, minimum_gb=8 * numa_nodes) except NotEnoughMemoryException as err: raise SkippedException(err) @@ -1719,7 +1720,7 @@ def run_dpdk_symmetric_mp( """ - test_timeout = 60 * hotplug_times if trigger_hotplug else 35 + test_timeout = 120 + (60 * hotplug_times if trigger_hotplug else 35) # setup and unwrap the resources for this test # get a list of the upper non-primary nics and select two of them test_nics = [ @@ -1869,6 +1870,8 @@ def run_dpdk_symmetric_mp( ) # expect additional pings for each post-hotplug instance expected_pings += 100 + # sleep for a moment to avoid api throttling + sleep(1) ping.ping_async( target=test_nics[0].ip_addr, From 1e9cead0a93722d90ed66aa7a055b4c8471d8b34 Mon Sep 17 00:00:00 2001 From: "Matthew McGovern (LINUX)" Date: Wed, 18 Feb 2026 09:46:57 -0800 Subject: [PATCH 4/8] features: short sleep after sriov toggle (api throttling) --- lisa/sut_orchestrator/azure/features.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lisa/sut_orchestrator/azure/features.py b/lisa/sut_orchestrator/azure/features.py index ceed319b44..d6cfb4777a 100644 --- a/lisa/sut_orchestrator/azure/features.py +++ b/lisa/sut_orchestrator/azure/features.py @@ -95,6 +95,7 @@ generate_random_chars, get_matched_str, set_filtered_fields, + sleep, ) if TYPE_CHECKING: @@ -1008,6 +1009,7 @@ def switch_sriov( f"now set its status into [{enable}]." ) updated_nic.enable_accelerated_networking = enable + network_client.network_interfaces.begin_create_or_update( self._resource_group_name, updated_nic.name, updated_nic ) @@ -1019,6 +1021,7 @@ def switch_sriov( f"networking into status [{enable}]" ).is_equal_to(enable) status_changed = True + sleep(0.5) # wait settings effective if wait and status_changed: From bc71a561d3127a30c503b1fa1c8baa0e1e7dcc48 Mon Sep 17 00:00:00 2001 From: "Matthew McGovern (LINUX)" Date: Tue, 17 Mar 2026 16:52:46 -0700 Subject: [PATCH 5/8] hotplug and stress --- lisa/microsoft/testsuites/dpdk/dpdksuite.py | 2 +- lisa/microsoft/testsuites/dpdk/dpdkutil.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lisa/microsoft/testsuites/dpdk/dpdksuite.py b/lisa/microsoft/testsuites/dpdk/dpdksuite.py index de97d0d2e1..a691125d97 100644 --- a/lisa/microsoft/testsuites/dpdk/dpdksuite.py +++ b/lisa/microsoft/testsuites/dpdk/dpdksuite.py @@ -157,7 +157,7 @@ def verify_dpdk_symmetric_mp_hotplug( result: TestResult, ) -> None: run_dpdk_symmetric_mp( - node, log, variables, trigger_hotplug=True, hotplug_times=3 + node, log, variables, trigger_hotplug=True, hotplug_times=1 ) @TestCaseMetadata( diff --git a/lisa/microsoft/testsuites/dpdk/dpdkutil.py b/lisa/microsoft/testsuites/dpdk/dpdkutil.py index 962d083f5b..94938e87c3 100644 --- a/lisa/microsoft/testsuites/dpdk/dpdkutil.py +++ b/lisa/microsoft/testsuites/dpdk/dpdkutil.py @@ -1845,7 +1845,7 @@ def run_dpdk_symmetric_mp( "Device notification type=1", # RTE_DEV_EVENT_REMOVE delta_only=True, ) # relying on compiler defaults here, not great. - + sleep(1) # turn SRIOV on node.features[NetworkInterface].switch_sriov( enable=True, wait=False, reset_connections=False From 5374ff58a52e5df38bc6c35457c3f71ee8ae9770 Mon Sep 17 00:00:00 2001 From: mcgov Date: Tue, 24 Mar 2026 16:50:07 -0700 Subject: [PATCH 6/8] spelling fix thank u copilot Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- lisa/microsoft/testsuites/dpdk/dpdksuite.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisa/microsoft/testsuites/dpdk/dpdksuite.py b/lisa/microsoft/testsuites/dpdk/dpdksuite.py index a691125d97..139d657822 100644 --- a/lisa/microsoft/testsuites/dpdk/dpdksuite.py +++ b/lisa/microsoft/testsuites/dpdk/dpdksuite.py @@ -137,7 +137,7 @@ def verify_dpdk_symmetric_mp( @TestCaseMetadata( description=""" netvsc pmd version. - This test case checks dpdk symmetic mp app, plus an sriov hotplug. + This test case checks dpdk symmetric mp app, plus an sriov hotplug. More details refer https://docs.microsoft.com/en-us/azure/virtual-network/setup-dpdk#prerequisites # noqa: E501 """, priority=2, From 8e8b01fa701420ea32b991c7f4b0910b8b2487e2 Mon Sep 17 00:00:00 2001 From: mcgov Date: Tue, 24 Mar 2026 16:51:58 -0700 Subject: [PATCH 7/8] Potential fix for pull request finding Will copilots suggestion work.... drumroll! Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- lisa/sut_orchestrator/azure/features.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/lisa/sut_orchestrator/azure/features.py b/lisa/sut_orchestrator/azure/features.py index d6cfb4777a..d447789031 100644 --- a/lisa/sut_orchestrator/azure/features.py +++ b/lisa/sut_orchestrator/azure/features.py @@ -1010,18 +1010,15 @@ def switch_sriov( ) updated_nic.enable_accelerated_networking = enable - network_client.network_interfaces.begin_create_or_update( + poller = network_client.network_interfaces.begin_create_or_update( self._resource_group_name, updated_nic.name, updated_nic ) - updated_nic = network_client.network_interfaces.get( - self._resource_group_name, nic_name - ) + updated_nic = poller.result() assert_that(updated_nic.enable_accelerated_networking).described_as( f"fail to set network interface {nic_name}'s accelerated " f"networking into status [{enable}]" ).is_equal_to(enable) status_changed = True - sleep(0.5) # wait settings effective if wait and status_changed: From c3845e1ab3e1842bcacb406e839e5a3853e60d8e Mon Sep 17 00:00:00 2001 From: mcgov Date: Wed, 25 Mar 2026 10:13:30 -0700 Subject: [PATCH 8/8] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- lisa/microsoft/testsuites/dpdk/dpdkutil.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisa/microsoft/testsuites/dpdk/dpdkutil.py b/lisa/microsoft/testsuites/dpdk/dpdkutil.py index 94938e87c3..fadbee4e7f 100644 --- a/lisa/microsoft/testsuites/dpdk/dpdkutil.py +++ b/lisa/microsoft/testsuites/dpdk/dpdkutil.py @@ -478,7 +478,7 @@ def initialize_node_resources( hugepages = node.tools[Hugepages] numa_nodes = node.tools[Lscpu].get_numa_node_count() try: - hugepages.init_hugepages(hugepage_size, minimum_gb=8 * numa_nodes) + hugepages.init_hugepages(hugepage_size, minimum_gb=4 * numa_nodes) except NotEnoughMemoryException as err: raise SkippedException(err)