in perfkitbenchmarker/linux_benchmarks/provisioning_benchmarks/provision_disk_benchmark.py [0:0]
def Run(bm_spec: benchmark_spec.BenchmarkSpec) -> List[sample.Sample]:
"""Runs the benchmark."""
vm = bm_spec.vm_groups['default'][0]
# TODO(user) in order for this to be cloud agnostic, we need to
# refactor the virtual machine code for all the clouds to use disk strategies
# like GCE
if vm.create_disk_strategy is None:
raise ValueError('VM Create Disk Strategy is None')
if vm.create_disk_strategy.DiskCreatedOnVMCreation():
raise ValueError(
'Disk created on vm creation, cannot measure provisioning time.'
'Please check the flags.'
)
samples = []
time_to_create = ParseCreateTimeFromScratchDisks(vm)
time_to_attach = ParseAttachTimeFromScratchDisks(vm)
time_to_visible_after_create = (
vm.create_disk_strategy.GetSetupDiskStrategy().time_to_visible
)
disk_metadata = GetDiskMetadata(vm)
if disk_metadata is None:
raise ValueError('Disk metadata is None')
time_to_create_and_attach = time_to_create + time_to_attach
detach_time, time_to_detach_from_guest = DetachDisks(vm)
samples.append(
sample.Sample(
'Time to Create and Attach Disks',
time_to_create_and_attach,
'seconds',
disk_metadata,
),
)
samples.append(
sample.Sample(
'Time to Create Disks',
time_to_create,
'seconds',
disk_metadata,
),
)
samples.append(
sample.Sample(
'Time to Attach Disk after create',
time_to_attach,
'seconds',
disk_metadata,
)
)
samples.append(
sample.Sample(
'Time to Visible from Guest after Create',
time_to_visible_after_create,
'seconds',
disk_metadata,
)
)
samples.append(
sample.Sample(
'Time to Detach Disks',
detach_time,
'seconds',
disk_metadata,
),
)
samples.append(
sample.Sample(
'Time to Detach from Guest',
time_to_detach_from_guest,
'seconds',
disk_metadata,
),
)
time.sleep(60)
vm.create_disk_strategy.GetSetupDiskStrategy().AttachDisks()
time_to_visible_after_detach = (
vm.create_disk_strategy.GetSetupDiskStrategy().time_to_visible
)
time_to_attach_after_detach = ParseAttachTimeFromScratchDisks(vm)
samples.append(
sample.Sample(
'Time to Attach Disk after detach',
time_to_attach_after_detach,
'seconds',
disk_metadata,
)
)
samples.append(
sample.Sample(
'Time to Visible from Guest after Re-attach',
time_to_visible_after_detach,
'seconds',
disk_metadata,
)
)
DetachDisks(vm)
vm_secondary = bm_spec.vm_groups['secondary'][0]
time.sleep(60)
# re-attach to a new VM
vm_secondary.create_disk_strategy = copy.copy(vm.create_disk_strategy)
vm_secondary.create_disk_strategy.vm = vm_secondary
vm_secondary.create_disk_strategy.setup_disk_strategy = copy.copy(
vm.create_disk_strategy.GetSetupDiskStrategy()
)
vm_secondary.create_disk_strategy.setup_disk_strategy.vm = vm_secondary
vm_secondary.create_disk_strategy.GetSetupDiskStrategy().AttachDisks()
time_to_visible_to_another_vm = (
vm_secondary.create_disk_strategy.GetSetupDiskStrategy().time_to_visible
)
time_to_reattach_to_another_vm = ParseAttachTimeFromScratchDisks(vm)
samples.append(
sample.Sample(
'Time to Re-attach to New VM',
time_to_reattach_to_another_vm,
'seconds',
disk_metadata,
)
)
samples.append(
sample.Sample(
'Time to Visible from Guest after Re-attach to New VM',
time_to_visible_to_another_vm,
'seconds',
disk_metadata,
)
)
return samples