mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2024-10-04 04:25:45 +00:00
memory_manager: improve memory region creation
Instead of making an owned `zones`, using an iterator is cheaper since `Vec::remove` may have the performance O(n) [1]. [1]: https://doc.rust-lang.org/std/vec/struct.Vec.html#method.remove Signed-off-by: Changyuan Lyu <changyuanl@google.com>
This commit is contained in:
parent
99d42bb05e
commit
7f18d0a281
@ -528,10 +528,10 @@ impl MemoryManager {
|
|||||||
prefault: Option<bool>,
|
prefault: Option<bool>,
|
||||||
thp: bool,
|
thp: bool,
|
||||||
) -> Result<(Vec<Arc<GuestRegionMmap>>, MemoryZones), Error> {
|
) -> Result<(Vec<Arc<GuestRegionMmap>>, MemoryZones), Error> {
|
||||||
let mut zones = zones.to_owned();
|
let mut zone_iter = zones.iter();
|
||||||
let mut mem_regions = Vec::new();
|
let mut mem_regions = Vec::new();
|
||||||
let mut zone = zones.remove(0);
|
let mut zone = zone_iter.next().ok_or(Error::MissingMemoryZones)?;
|
||||||
let mut zone_align_size = memory_zone_get_align_size(&zone)?;
|
let mut zone_align_size = memory_zone_get_align_size(zone)?;
|
||||||
let mut zone_offset = 0u64;
|
let mut zone_offset = 0u64;
|
||||||
let mut memory_zones = HashMap::new();
|
let mut memory_zones = HashMap::new();
|
||||||
|
|
||||||
@ -609,12 +609,13 @@ impl MemoryManager {
|
|||||||
if pull_next_zone {
|
if pull_next_zone {
|
||||||
// Get the next zone and reset the offset.
|
// Get the next zone and reset the offset.
|
||||||
zone_offset = 0;
|
zone_offset = 0;
|
||||||
if zones.is_empty() {
|
if let Some(z) = zone_iter.next() {
|
||||||
|
zone = z;
|
||||||
|
} else {
|
||||||
exit = true;
|
exit = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
zone = zones.remove(0);
|
zone_align_size = memory_zone_get_align_size(zone)?;
|
||||||
zone_align_size = memory_zone_get_align_size(&zone)?;
|
|
||||||
if !is_aligned(zone.size, zone_align_size) {
|
if !is_aligned(zone.size, zone_align_size) {
|
||||||
return Err(Error::MisalignedMemorySize);
|
return Err(Error::MisalignedMemorySize);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user