-
Notifications
You must be signed in to change notification settings - Fork 157
MANA emulator multiqueue support #2040
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
base: main
Are you sure you want to change the base?
Conversation
|
Looks great, could you add a bit of the "why" in the PR description? What will this enable? Thanks! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR adds multiqueue support for the MANA network emulator, enabling multiple transmit/receive queue pairs to improve network performance. The changes extend the MANA driver configuration to support multiple queues per virtual port and update related components to handle multiqueue operations.
Key changes include:
- Addition of
queue_pairsfield to vport configurations across multiple components - Enhanced queue management in the BasicNic implementation to support multiple queue pairs per vport
- Updates to Consomme endpoint to support multiqueue functionality
- New integration test to validate multiqueue behavior on both Windows and Linux
Reviewed Changes
Copilot reviewed 10 out of 10 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
vmm_tests/vmm_tests/tests/tests/x86_64/openhcl_linux_direct.rs |
Adds integration test for MANA multiqueue functionality |
vm/devices/net/net_mana/src/lib.rs |
Updates test configurations to include queue_pairs field |
vm/devices/net/net_consomme/src/lib.rs |
Implements multiqueue support in Consomme endpoint |
vm/devices/net/mana_driver/src/tests.rs |
Updates test to include queue_pairs field |
vm/devices/net/gdma_resources/src/lib.rs |
Adds queue_pairs field to VportDefinition struct |
vm/devices/net/gdma/src/resolver.rs |
Updates resolver to pass through queue_pairs configuration |
vm/devices/net/gdma/src/lib.rs |
Adds queue_pairs field to VportConfig struct |
vm/devices/net/gdma/src/bnic.rs |
Major refactoring to support multiple queue pairs per vport |
petri/src/vm/openvmm/modify.rs |
Sets default queue_pairs value in test configuration |
openvmm/openvmm_entry/src/lib.rs |
Configures queue_pairs from command line max_queues parameter |
| let _ = output | ||
| .lines() | ||
| .filter(|line| line.starts_with("Combined:")) | ||
| .map(|line| { | ||
| let count = line.split_whitespace().nth(1).unwrap().trim().to_string(); | ||
| let n: u32 = count.parse().unwrap(); | ||
| assert!(n == vp_count, "expected {} queues, got {}", vp_count, n); | ||
| }); |
Copilot
AI
Oct 15, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The iterator is created but never consumed. The map operation is lazy and won't execute unless the iterator is consumed. Use for_each instead of map or call collect() to consume the iterator.
Copilot uses AI. Check for mistakes.
| state.queues.free_wq(true, wq_id).unwrap_or(()); | ||
| state.queues.free_cq(cq_id).unwrap_or(()); |
Copilot
AI
Oct 15, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Using unwrap_or(()) silently ignores errors during resource cleanup. Consider logging errors or using a more explicit error handling approach to aid debugging if resource deallocation fails.
Copilot uses AI. Check for mistakes.
This PR adds multiqueue support for the mana emulator and propagates the feature enablement to other components as well.