mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2025-01-18 10:35:23 +00:00
option_parser: Expect commas instead of colons for lists
The elements of a list should be using commas as the correct delimiter now that it is supported. Deprecate use of colons as delimiter. Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
This commit is contained in:
parent
184a3d1fb5
commit
b81d758c41
@ -446,17 +446,20 @@ integer of 8 bits.
|
|||||||
|
|
||||||
For instance, if one needs to attach all CPUs from 0 to 4 to a specific node,
|
For instance, if one needs to attach all CPUs from 0 to 4 to a specific node,
|
||||||
the syntax using `-` will help define a contiguous range with `cpus=0-4`. The
|
the syntax using `-` will help define a contiguous range with `cpus=0-4`. The
|
||||||
same example could also be described with `cpus=0:1:2:3:4`.
|
same example could also be described with `cpus=[0,1,2,3,4]`.
|
||||||
|
|
||||||
A combination of both `-` and `:` separators is useful when one might need to
|
A combination of both `-` and `,` separators is useful when one might need to
|
||||||
describe a list containing all CPUs from 0 to 99 and the CPU 255, as it could
|
describe a list containing all CPUs from 0 to 99 and the CPU 255, as it could
|
||||||
simply be described with `cpus=0-99:255`.
|
simply be described with `cpus=[0-99,255]`.
|
||||||
|
|
||||||
|
As soon as one tries to describe a list of values, `[` and `]` must be used to
|
||||||
|
demarcate the list.
|
||||||
|
|
||||||
_Example_
|
_Example_
|
||||||
|
|
||||||
```
|
```
|
||||||
--cpus boot=8
|
--cpus boot=8
|
||||||
--numa guest_numa_id=0,cpus=1-3:7 guest_numa_id=1,cpus=0:4-6
|
--numa guest_numa_id=0,cpus=[1-3,7] guest_numa_id=1,cpus=[0,4-6]
|
||||||
```
|
```
|
||||||
|
|
||||||
### `distances`
|
### `distances`
|
||||||
@ -473,7 +476,10 @@ node. The second value is an unsigned integer of 8 bits as it represents the
|
|||||||
distance between the current NUMA node and the destination NUMA node. The two
|
distance between the current NUMA node and the destination NUMA node. The two
|
||||||
values are separated by `@` (`value1@value2`), meaning the destination NUMA
|
values are separated by `@` (`value1@value2`), meaning the destination NUMA
|
||||||
node `value1` is located at a distance of `value2`. Each tuple is separated
|
node `value1` is located at a distance of `value2`. Each tuple is separated
|
||||||
from the others with `:` separator.
|
from the others with `,` separator.
|
||||||
|
|
||||||
|
As soon as one tries to describe a list of values, `[` and `]` must be used to
|
||||||
|
demarcate the list.
|
||||||
|
|
||||||
For instance, if one wants to define 3 NUMA nodes, with each node located at
|
For instance, if one wants to define 3 NUMA nodes, with each node located at
|
||||||
different distances, it can be described with the following example.
|
different distances, it can be described with the following example.
|
||||||
@ -481,7 +487,7 @@ different distances, it can be described with the following example.
|
|||||||
_Example_
|
_Example_
|
||||||
|
|
||||||
```
|
```
|
||||||
--numa guest_numa_id=0,distances=1@15:2@25 guest_numa_id=1,distances=0@15:2@20 guest_numa_id=2,distances=0@25:1@20
|
--numa guest_numa_id=0,distances=[1@15,2@25] guest_numa_id=1,distances=[0@15,2@20] guest_numa_id=2,distances=[0@25,1@20]
|
||||||
```
|
```
|
||||||
|
|
||||||
### `memory_zones`
|
### `memory_zones`
|
||||||
@ -498,7 +504,10 @@ workload run more efficiently.
|
|||||||
|
|
||||||
Multiple values can be provided to define the list. Each value is a string
|
Multiple values can be provided to define the list. Each value is a string
|
||||||
referring to an existing memory zone identifier. Values are separated from
|
referring to an existing memory zone identifier. Values are separated from
|
||||||
each other with the `:` separator.
|
each other with the `,` separator.
|
||||||
|
|
||||||
|
As soon as one tries to describe a list of values, `[` and `]` must be used to
|
||||||
|
demarcate the list.
|
||||||
|
|
||||||
Note that a memory zone must belong to a single NUMA node. The following
|
Note that a memory zone must belong to a single NUMA node. The following
|
||||||
configuration is incorrect, therefore not allowed:
|
configuration is incorrect, therefore not allowed:
|
||||||
@ -509,7 +518,7 @@ _Example_
|
|||||||
```
|
```
|
||||||
--memory size=0
|
--memory size=0
|
||||||
--memory-zone id=mem0,size=1G id=mem1,size=1G id=mem2,size=1G
|
--memory-zone id=mem0,size=1G id=mem1,size=1G id=mem2,size=1G
|
||||||
--numa guest_numa_id=0,memory_zones=mem0:mem2 guest_numa_id=1,memory_zones=mem1
|
--numa guest_numa_id=0,memory_zones=[mem0,mem2] guest_numa_id=1,memory_zones=mem1
|
||||||
```
|
```
|
||||||
|
|
||||||
### `sgx_epc_sections`
|
### `sgx_epc_sections`
|
||||||
@ -520,13 +529,16 @@ which must be seen by the guest as belonging to the NUMA node `guest_numa_id`.
|
|||||||
|
|
||||||
Multiple values can be provided to define the list. Each value is a string
|
Multiple values can be provided to define the list. Each value is a string
|
||||||
referring to an existing SGX EPC section identifier. Values are separated from
|
referring to an existing SGX EPC section identifier. Values are separated from
|
||||||
each other with the `:` separator.
|
each other with the `,` separator.
|
||||||
|
|
||||||
|
As soon as one tries to describe a list of values, `[` and `]` must be used to
|
||||||
|
demarcate the list.
|
||||||
|
|
||||||
_Example_
|
_Example_
|
||||||
|
|
||||||
```
|
```
|
||||||
--sgx-epc id=epc0,size=32M id=epc1,size=64M id=epc2,size=32M
|
--sgx-epc id=epc0,size=32M id=epc1,size=64M id=epc2,size=32M
|
||||||
--numa guest_numa_id=0,sgx_epc_sections=epc1 guest_numa_id=1,sgx_epc_sections=epc0:epc2
|
--numa guest_numa_id=0,sgx_epc_sections=epc1 guest_numa_id=1,sgx_epc_sections=[epc0,epc2]
|
||||||
```
|
```
|
||||||
|
|
||||||
### PCI bus
|
### PCI bus
|
||||||
|
@ -202,7 +202,11 @@ impl FromStr for IntegerList {
|
|||||||
|
|
||||||
fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
|
fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
|
||||||
let mut integer_list = Vec::new();
|
let mut integer_list = Vec::new();
|
||||||
let ranges_list: Vec<&str> = s.trim().split(':').collect();
|
let ranges_list: Vec<&str> = s
|
||||||
|
.trim()
|
||||||
|
.trim_matches(|c| c == '[' || c == ']')
|
||||||
|
.split(',')
|
||||||
|
.collect();
|
||||||
|
|
||||||
for range in ranges_list.iter() {
|
for range in ranges_list.iter() {
|
||||||
let items: Vec<&str> = range.split('-').collect();
|
let items: Vec<&str> = range.split('-').collect();
|
||||||
@ -246,7 +250,11 @@ impl FromStr for TupleTwoIntegers {
|
|||||||
|
|
||||||
fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
|
fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
|
||||||
let mut list = Vec::new();
|
let mut list = Vec::new();
|
||||||
let tuples_list: Vec<&str> = s.trim().split(':').collect();
|
let tuples_list: Vec<&str> = s
|
||||||
|
.trim()
|
||||||
|
.trim_matches(|c| c == '[' || c == ']')
|
||||||
|
.split(',')
|
||||||
|
.collect();
|
||||||
|
|
||||||
for tuple in tuples_list.iter() {
|
for tuple in tuples_list.iter() {
|
||||||
let items: Vec<&str> = tuple.split('@').collect();
|
let items: Vec<&str> = tuple.split('@').collect();
|
||||||
@ -281,7 +289,12 @@ impl FromStr for StringList {
|
|||||||
type Err = StringListParseError;
|
type Err = StringListParseError;
|
||||||
|
|
||||||
fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
|
fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
|
||||||
let string_list: Vec<String> = s.trim().split(':').map(|e| e.to_owned()).collect();
|
let string_list: Vec<String> = s
|
||||||
|
.trim()
|
||||||
|
.trim_matches(|c| c == '[' || c == ']')
|
||||||
|
.split(',')
|
||||||
|
.map(|e| e.to_owned())
|
||||||
|
.collect();
|
||||||
|
|
||||||
Ok(StringList(string_list))
|
Ok(StringList(string_list))
|
||||||
}
|
}
|
||||||
|
@ -1136,9 +1136,9 @@ mod tests {
|
|||||||
])
|
])
|
||||||
.args(&[
|
.args(&[
|
||||||
"--numa",
|
"--numa",
|
||||||
"guest_numa_id=0,cpus=0-2:9,distances=1@15:2@20,memory_zones=mem0",
|
"guest_numa_id=0,cpus=[0-2,9],distances=[1@15,2@20],memory_zones=mem0",
|
||||||
"guest_numa_id=1,cpus=3-4:6-8,distances=0@20:2@25,memory_zones=mem1",
|
"guest_numa_id=1,cpus=[3-4,6-8],distances=[0@20,2@25],memory_zones=mem1",
|
||||||
"guest_numa_id=2,cpus=5:10-11,distances=0@25:1@30,memory_zones=mem2",
|
"guest_numa_id=2,cpus=[5,10-11],distances=[0@25,1@30],memory_zones=mem2",
|
||||||
])
|
])
|
||||||
.args(&["--kernel", kernel_path.to_str().unwrap()])
|
.args(&["--kernel", kernel_path.to_str().unwrap()])
|
||||||
.args(&["--cmdline", DIRECT_KERNEL_BOOT_CMDLINE])
|
.args(&["--cmdline", DIRECT_KERNEL_BOOT_CMDLINE])
|
||||||
@ -5580,7 +5580,7 @@ mod tests {
|
|||||||
.args(&[
|
.args(&[
|
||||||
"--net",
|
"--net",
|
||||||
&format!(
|
&format!(
|
||||||
"fd={}:{},mac={},num_queues={}",
|
"fd=[{},{}],mac={},num_queues={}",
|
||||||
taps[0].as_raw_fd(),
|
taps[0].as_raw_fd(),
|
||||||
taps[1].as_raw_fd(),
|
taps[1].as_raw_fd(),
|
||||||
guest.network.guest_mac,
|
guest.network.guest_mac,
|
||||||
@ -7114,9 +7114,9 @@ mod tests {
|
|||||||
"id=mem1,size=1G,hotplug_size=32G",
|
"id=mem1,size=1G,hotplug_size=32G",
|
||||||
"id=mem2,size=1G,hotplug_size=32G",
|
"id=mem2,size=1G,hotplug_size=32G",
|
||||||
"--numa",
|
"--numa",
|
||||||
"guest_numa_id=0,cpus=0-2:9,distances=1@15:2@20,memory_zones=mem0",
|
"guest_numa_id=0,cpus=[0-2,9],distances=[1@15,2@20],memory_zones=mem0",
|
||||||
"guest_numa_id=1,cpus=3-4:6-8,distances=0@20:2@25,memory_zones=mem1",
|
"guest_numa_id=1,cpus=[3-4,6-8],distances=[0@20,2@25],memory_zones=mem1",
|
||||||
"guest_numa_id=2,cpus=5:10-11,distances=0@25:1@30,memory_zones=mem2",
|
"guest_numa_id=2,cpus=[5,10-11],distances=[0@25,1@30],memory_zones=mem2",
|
||||||
]
|
]
|
||||||
} else {
|
} else {
|
||||||
&["--memory", "size=4G"]
|
&["--memory", "size=4G"]
|
||||||
|
@ -1136,7 +1136,7 @@ impl Default for NetConfig {
|
|||||||
|
|
||||||
impl NetConfig {
|
impl NetConfig {
|
||||||
pub const SYNTAX: &'static str = "Network parameters \
|
pub const SYNTAX: &'static str = "Network parameters \
|
||||||
\"tap=<if_name>,ip=<ip_addr>,mask=<net_mask>,mac=<mac_addr>,fd=<fd1:fd2...>,iommu=on|off,\
|
\"tap=<if_name>,ip=<ip_addr>,mask=<net_mask>,mac=<mac_addr>,fd=<fd1,fd2...>,iommu=on|off,\
|
||||||
num_queues=<number_of_queues>,queue_size=<size_of_each_queue>,id=<device_id>,\
|
num_queues=<number_of_queues>,queue_size=<size_of_each_queue>,id=<device_id>,\
|
||||||
vhost_user=<vhost_user_enable>,socket=<vhost_user_socket_path>,vhost_mode=client|server,\
|
vhost_user=<vhost_user_enable>,socket=<vhost_user_socket_path>,vhost_mode=client|server,\
|
||||||
bw_size=<bytes>,bw_one_time_burst=<bytes>,bw_refill_time=<ms>,\
|
bw_size=<bytes>,bw_one_time_burst=<bytes>,bw_refill_time=<ms>,\
|
||||||
@ -2653,7 +2653,7 @@ mod tests {
|
|||||||
);
|
);
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
NetConfig::parse("mac=de:ad:be:ef:12:34,fd=3:7,num_queues=4")?,
|
NetConfig::parse("mac=de:ad:be:ef:12:34,fd=[3,7],num_queues=4")?,
|
||||||
NetConfig {
|
NetConfig {
|
||||||
mac: MacAddr::parse_str("de:ad:be:ef:12:34").unwrap(),
|
mac: MacAddr::parse_str("de:ad:be:ef:12:34").unwrap(),
|
||||||
fds: Some(vec![3, 7]),
|
fds: Some(vec![3, 7]),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user