Skip to content

Commit a3bddda

Browse files
Merge branch 'ver-2309-parallel-ic-setup' into 'master'
parallelize VM allocations in Farm Tested on `update_workload_large_payload`: Parallel allocation: ``` ======================= Summary ======================= Task setup PASSED in 166.78s -- Exited with code 0. Task test PASSED in 2024.53s -- Exited with code 0. ======================================================= ``` vs normal ``` ======================= Summary ======================= Task setup PASSED in 197.88s -- Exited with code 0. Task test PASSED in 1974.27s -- Exited with code 0. ======================================================= ``` See merge request dfinity-lab/public/ic!12505
2 parents 3d00cbf + 0c22320 commit a3bddda

File tree

1 file changed

+23
-9
lines changed

1 file changed

+23
-9
lines changed

rs/tests/src/driver/resource.rs

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -221,12 +221,14 @@ pub fn get_resource_request_for_universal_vm(
221221
}
222222

223223
pub fn allocate_resources(farm: &Farm, req: &ResourceRequest) -> FarmResult<ResourceGroup> {
224-
let group_name = &req.group_name;
225-
let mut res_group = ResourceGroup::new(group_name.clone());
224+
let group_name = req.group_name.clone();
225+
// Create VMs in parallel via Farm.
226+
let mut threads = vec![];
226227
for vm_config in req.vm_configs.iter() {
227-
let name = vm_config.name.clone();
228+
let farm_cloned = farm.clone();
229+
let vm_name = vm_config.name.clone();
228230
let create_vm_request = CreateVmRequest::new(
229-
name.clone(),
231+
vm_name.clone(),
230232
VmType::Production,
231233
vm_config.vcpus,
232234
vm_config.memory_kibibytes,
@@ -240,13 +242,25 @@ pub fn allocate_resources(farm: &Farm, req: &ResourceRequest) -> FarmResult<Reso
240242
vm_config.vm_allocation.clone(),
241243
vm_config.required_host_features.clone(),
242244
);
243-
244-
let created_vm = farm.create_vm(group_name, create_vm_request)?;
245+
let group_name = group_name.clone();
246+
// Spin up another thread
247+
threads.push(std::thread::spawn(move || {
248+
(
249+
vm_name,
250+
farm_cloned.create_vm(&group_name, create_vm_request),
251+
)
252+
}));
253+
}
254+
let mut res_group = ResourceGroup::new(group_name.clone());
255+
for thread in threads {
256+
let (vm_name, created_vm) = thread
257+
.join()
258+
.expect("Couldn't join on the associated thread");
245259
res_group.add_vm(AllocatedVm {
246-
name,
260+
name: vm_name,
247261
group_name: group_name.clone(),
248-
ipv6: created_vm.ipv6,
249-
});
262+
ipv6: created_vm?.ipv6,
263+
})
250264
}
251265
Ok(res_group)
252266
}

0 commit comments

Comments
 (0)