Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update to Network Channel count calculation in test case 'verify_vmbus_devices_channels' #3644

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
updating the desctiption and references
  • Loading branch information
umfranci committed Feb 12, 2025
commit c4b755bf4bc4f0443ed0dee323300d6dc50d1961
24 changes: 12 additions & 12 deletions microsoft/testsuites/core/lsvmbus.py
Original file line number Diff line number Diff line change
@@ -105,13 +105,9 @@ def verify_vmbus_devices_channels_bsd(self, node: Node) -> None:
- Synthetic keyboard
2. Check that each netvsc and storvsc SCSI device have correct number of vmbus
channels created and associated.
2.1 Check expected channel count of each netvsc is min (num of vcpu, 8).
2.1.1 Caculate channel count of each netvsc device.
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/drivers/net/hyperv/rndis_filter.c#n1548 # noqa: E501
2.2.2 Cap of channel count of each netvsc device.
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/drivers/net/hyperv/hyperv_net.h#n877 noqa: E501
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/drivers/net/hyperv/rndis_filter.c#n1551 noqa: E501

2.1 Check expected channel count of each netvsc matches that obtained from the ethtool.
2.1.1 Get expected channel count of netvsc from ethtool.
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/drivers/net/hyperv/netvsc_drv.c#n2001
2.2 Check expected channel count of each storvsc SCSI device is min (num of
vcpu/4, 64).
2.2.1 Caculate channel count of each storvsc SCSI device.
@@ -134,18 +130,22 @@ def verify_vmbus_devices_channels(self, node: Node) -> None:
# vmbus channels created and associated.
lscpu_tool = node.tools[Lscpu]
core_count = lscpu_tool.get_core_count()

# 2.1 Get expected channel count of each netvsc is min (num of vcpu, 8).
expected_netsvc_channel_count = (
node.tools[Ethtool].get_device_channels_info("eth0", True)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it is possible that case will change the combined channel count

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it is the actual value, not the expected value.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it is the actual value, not the expected value.

Agree, the value should be calculated, instead of getting from the system. This test case is to verify if the count of channel is the same as designed.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the review team. If the logic for channel calculation is updated and the said patch is available only in certain distros - it would cause the test to fail in certain cases and to succeed in others, thus creating a discrepancy. The current patch is available in SLES and Upstream but not in other distros. How can we alter the test cases to handle different logics for different situations?
Also, to avoid such a situation, wouldn't it be helpful to use a tool which refers the relevant channel calculation code at the Kernel level?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can it be differentiated by kernel version?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can do that for a short-term solution but as the patch is backported, we would need to update the kernel version for the test case.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can do that for a short-term solution but as the patch is backported, we would need to update the kernel version for the test case.

If the patch is backported, all newer version can use the new algorithm. So, the test cases can work with both old and newer versions.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the inputs @squirrelsc . Started an internal thread on this to get inputs from the Kernel team as well.

).current_channels

# 2.2 Get expected channel count of each storvsc SCSI device
if node.nics.is_mana_device_present():
expected_scsi_channel_count = min(core_count, 64)
else:
expected_scsi_channel_count = math.ceil(min(core_count, 256) / 4)
# With the new change, we get the expected channel count from Ethtool - since it refers to hyperv.h in the background
origin_device_channel = (
node.tools[Ethtool].get_device_channels_info("eth0", True)
).current_channels

for vmbus_device in vmbus_devices_list:
if vmbus_device.name == "Synthetic network adapter":
assert_that(vmbus_device.channel_vp_map).is_length(
origin_device_channel
expected_netsvc_channel_count
)
if vmbus_device.name == "Synthetic SCSI Controller":
assert_that(vmbus_device.channel_vp_map).is_length(
Loading
Oops, something went wrong.