mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2024-10-01 11:05:46 +00:00
vmm: Add multiple queue option and update config for virtio-net device
Add num_queues and queue_size for virtio-net device to make them configurable, while add the associated options in command line. Update cloud-hypervisor.yaml with the new options for NetConfig. Signed-off-by: Cathy Zhang <cathy.zhang@intel.com>
This commit is contained in:
parent
4ab88a8173
commit
404316eea1
@ -131,7 +131,8 @@ fn create_app<'a, 'b>(
|
|||||||
.help(
|
.help(
|
||||||
"Network parameters \"tap=<if_name>,\
|
"Network parameters \"tap=<if_name>,\
|
||||||
ip=<ip_addr>,mask=<net_mask>,mac=<mac_addr>,\
|
ip=<ip_addr>,mask=<net_mask>,mac=<mac_addr>,\
|
||||||
iommu=on|off\"",
|
iommu=on|off,num_queues=<number_of_queues>,\
|
||||||
|
queue_size=<size_of_each_queue>\"",
|
||||||
)
|
)
|
||||||
.takes_value(true)
|
.takes_value(true)
|
||||||
.min_values(1)
|
.min_values(1)
|
||||||
|
@ -295,6 +295,12 @@ components:
|
|||||||
iommu:
|
iommu:
|
||||||
type: boolean
|
type: boolean
|
||||||
default: false
|
default: false
|
||||||
|
num_queues:
|
||||||
|
type: integer
|
||||||
|
default: 2
|
||||||
|
queue_size:
|
||||||
|
type: integer
|
||||||
|
default: 256
|
||||||
|
|
||||||
RngConfig:
|
RngConfig:
|
||||||
required:
|
required:
|
||||||
|
@ -46,6 +46,10 @@ pub enum Error<'a> {
|
|||||||
ParseNetMaskParam(AddrParseError),
|
ParseNetMaskParam(AddrParseError),
|
||||||
/// Failed parsing network mac parameter.
|
/// Failed parsing network mac parameter.
|
||||||
ParseNetMacParam(&'a str),
|
ParseNetMacParam(&'a str),
|
||||||
|
/// Failed parsing network queue number parameter.
|
||||||
|
ParseNetNumQueuesParam(std::num::ParseIntError),
|
||||||
|
/// Failed parsing network queue size parameter.
|
||||||
|
ParseNetQueueSizeParam(std::num::ParseIntError),
|
||||||
/// Failed parsing fs tag parameter.
|
/// Failed parsing fs tag parameter.
|
||||||
ParseFsTagParam,
|
ParseFsTagParam,
|
||||||
/// Failed parsing fs socket path parameter.
|
/// Failed parsing fs socket path parameter.
|
||||||
@ -372,6 +376,10 @@ pub struct NetConfig {
|
|||||||
pub mac: MacAddr,
|
pub mac: MacAddr,
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub iommu: bool,
|
pub iommu: bool,
|
||||||
|
#[serde(default = "default_netconfig_num_queues")]
|
||||||
|
pub num_queues: usize,
|
||||||
|
#[serde(default = "default_netconfig_queue_size")]
|
||||||
|
pub queue_size: u16,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn default_netconfig_tap() -> Option<String> {
|
fn default_netconfig_tap() -> Option<String> {
|
||||||
@ -390,6 +398,14 @@ fn default_netconfig_mac() -> MacAddr {
|
|||||||
MacAddr::local_random()
|
MacAddr::local_random()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn default_netconfig_num_queues() -> usize {
|
||||||
|
DEFAULT_NUM_QUEUES_VUNET
|
||||||
|
}
|
||||||
|
|
||||||
|
fn default_netconfig_queue_size() -> u16 {
|
||||||
|
DEFAULT_QUEUE_SIZE_VUNET
|
||||||
|
}
|
||||||
|
|
||||||
impl NetConfig {
|
impl NetConfig {
|
||||||
pub fn parse(net: &str) -> Result<Self> {
|
pub fn parse(net: &str) -> Result<Self> {
|
||||||
// Split the parameters based on the comma delimiter
|
// Split the parameters based on the comma delimiter
|
||||||
@ -400,6 +416,8 @@ impl NetConfig {
|
|||||||
let mut mask_str: &str = "";
|
let mut mask_str: &str = "";
|
||||||
let mut mac_str: &str = "";
|
let mut mac_str: &str = "";
|
||||||
let mut iommu_str: &str = "";
|
let mut iommu_str: &str = "";
|
||||||
|
let mut num_queues_str: &str = "";
|
||||||
|
let mut queue_size_str: &str = "";
|
||||||
|
|
||||||
for param in params_list.iter() {
|
for param in params_list.iter() {
|
||||||
if param.starts_with("tap=") {
|
if param.starts_with("tap=") {
|
||||||
@ -412,6 +430,10 @@ impl NetConfig {
|
|||||||
mac_str = ¶m[4..];
|
mac_str = ¶m[4..];
|
||||||
} else if param.starts_with("iommu=") {
|
} else if param.starts_with("iommu=") {
|
||||||
iommu_str = ¶m[6..];
|
iommu_str = ¶m[6..];
|
||||||
|
} else if param.starts_with("num_queues=") {
|
||||||
|
num_queues_str = ¶m[11..];
|
||||||
|
} else if param.starts_with("queue_size=") {
|
||||||
|
queue_size_str = ¶m[11..];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -420,6 +442,8 @@ impl NetConfig {
|
|||||||
let mut mask: Ipv4Addr = default_netconfig_mask();
|
let mut mask: Ipv4Addr = default_netconfig_mask();
|
||||||
let mut mac: MacAddr = default_netconfig_mac();
|
let mut mac: MacAddr = default_netconfig_mac();
|
||||||
let iommu = parse_on_off(iommu_str)?;
|
let iommu = parse_on_off(iommu_str)?;
|
||||||
|
let mut num_queues: usize = default_netconfig_num_queues();
|
||||||
|
let mut queue_size: u16 = default_netconfig_queue_size();
|
||||||
|
|
||||||
if !tap_str.is_empty() {
|
if !tap_str.is_empty() {
|
||||||
tap = Some(tap_str.to_string());
|
tap = Some(tap_str.to_string());
|
||||||
@ -433,6 +457,16 @@ impl NetConfig {
|
|||||||
if !mac_str.is_empty() {
|
if !mac_str.is_empty() {
|
||||||
mac = MacAddr::parse_str(mac_str).map_err(Error::ParseNetMacParam)?;
|
mac = MacAddr::parse_str(mac_str).map_err(Error::ParseNetMacParam)?;
|
||||||
}
|
}
|
||||||
|
if !num_queues_str.is_empty() {
|
||||||
|
num_queues = num_queues_str
|
||||||
|
.parse()
|
||||||
|
.map_err(Error::ParseNetNumQueuesParam)?;
|
||||||
|
}
|
||||||
|
if !queue_size_str.is_empty() {
|
||||||
|
queue_size = queue_size_str
|
||||||
|
.parse()
|
||||||
|
.map_err(Error::ParseNetQueueSizeParam)?;
|
||||||
|
}
|
||||||
|
|
||||||
Ok(NetConfig {
|
Ok(NetConfig {
|
||||||
tap,
|
tap,
|
||||||
@ -440,6 +474,8 @@ impl NetConfig {
|
|||||||
mask,
|
mask,
|
||||||
mac,
|
mac,
|
||||||
iommu,
|
iommu,
|
||||||
|
num_queues,
|
||||||
|
queue_size,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user