From 56f2d55d506fe60ff4d18a40ac3a2728ebf3e695 Mon Sep 17 00:00:00 2001 From: Eric Hankland Date: Wed, 17 Jun 2015 12:09:33 -0700 Subject: [PATCH 1/2] Add resource creation/deletion times --- perfkitbenchmarker/aws/aws_virtual_machine.py | 2 -- .../azure/azure_virtual_machine.py | 1 - .../digitalocean_virtual_machine.py | 1 - perfkitbenchmarker/gcp/gce_virtual_machine.py | 1 - perfkitbenchmarker/resource.py | 18 +++++++++++++++++- perfkitbenchmarker/virtual_machine.py | 10 +++------- 6 files changed, 20 insertions(+), 13 deletions(-) diff --git a/perfkitbenchmarker/aws/aws_virtual_machine.py b/perfkitbenchmarker/aws/aws_virtual_machine.py index e2ff80f822..d359a27d0a 100644 --- a/perfkitbenchmarker/aws/aws_virtual_machine.py +++ b/perfkitbenchmarker/aws/aws_virtual_machine.py @@ -209,8 +209,6 @@ def _DeleteDependencies(self): def _Create(self): """Create a VM instance.""" - super(AwsVirtualMachine, self)._Create() - placement = 'AvailabilityZone=%s' % self.zone if IsPlacementGroupCompatible(self.machine_type): placement += ',GroupName=%s' % self.network.placement_group.name diff --git a/perfkitbenchmarker/azure/azure_virtual_machine.py b/perfkitbenchmarker/azure/azure_virtual_machine.py index 47d6a76199..f7eb3ea6fe 100644 --- a/perfkitbenchmarker/azure/azure_virtual_machine.py +++ b/perfkitbenchmarker/azure/azure_virtual_machine.py @@ -109,7 +109,6 @@ def _DeleteDependencies(self): self.service.Delete() def _Create(self): - super(AzureVirtualMachine, self)._Create() create_cmd = [AZURE_PATH, 'vm', 'create', diff --git a/perfkitbenchmarker/digitalocean/digitalocean_virtual_machine.py b/perfkitbenchmarker/digitalocean/digitalocean_virtual_machine.py index 510141f125..5defeefb59 100644 --- a/perfkitbenchmarker/digitalocean/digitalocean_virtual_machine.py +++ b/perfkitbenchmarker/digitalocean/digitalocean_virtual_machine.py @@ -73,7 +73,6 @@ def __init__(self, vm_spec): def _Create(self): """Create a DigitalOcean VM instance (droplet).""" - super(DigitalOceanVirtualMachine, self)._Create() with open(self.ssh_public_key) as f: public_key = f.read().rstrip('\n') diff --git a/perfkitbenchmarker/gcp/gce_virtual_machine.py b/perfkitbenchmarker/gcp/gce_virtual_machine.py index 51f590e926..fb2ca52174 100644 --- a/perfkitbenchmarker/gcp/gce_virtual_machine.py +++ b/perfkitbenchmarker/gcp/gce_virtual_machine.py @@ -79,7 +79,6 @@ def _DeleteDependencies(self): def _Create(self): """Create a GCE VM instance.""" - super(GceVirtualMachine, self)._Create() with open(self.ssh_public_key) as f: public_key = f.read().rstrip('\n') with vm_util.NamedTemporaryFile(dir=vm_util.GetTempDir(), diff --git a/perfkitbenchmarker/resource.py b/perfkitbenchmarker/resource.py index eab25b6b43..554f7e262d 100644 --- a/perfkitbenchmarker/resource.py +++ b/perfkitbenchmarker/resource.py @@ -20,6 +20,7 @@ """ import abc +import time from perfkitbenchmarker import errors from perfkitbenchmarker import vm_util @@ -34,6 +35,13 @@ def __init__(self): super(BaseResource, self).__init__() self.created = False + # Creation and deletion time information + # that we may make use of later. + self.create_start_time = None + self.delete_start_time = None + self.create_end_time = None + self.delete_end_time = None + @abc.abstractmethod def _Create(self): """Creates the underlying resource.""" @@ -88,6 +96,8 @@ def _CreateResource(self): """Reliably creates the underlying resource.""" if self.created: return + if not self.create_start_time: + self.create_start_time = time.time() self._Create() try: if not self._Exists(): @@ -96,10 +106,14 @@ def _CreateResource(self): except NotImplementedError: pass self.created = True + if not self.create_end_time: + self.create_end_time = time.time() @vm_util.Retry(retryable_exceptions=(errors.Resource.RetryableDeletionError,)) def _DeleteResource(self): """Reliably deletes the underlying resource.""" + if not self.delete_start_time: + self.delete_start_time = time.time() self._Delete() try: if self._Exists(): @@ -107,6 +121,8 @@ def _DeleteResource(self): 'Deletion of %s failed.' % type(self).__name__) except NotImplementedError: pass + if not self.delete_end_time: + self.delete_end_time = time.time() def Create(self): """Creates a resource and its dependencies.""" @@ -115,6 +131,6 @@ def Create(self): self._PostCreate() def Delete(self): - """Deletes a resource and its dependencie.""" + """Deletes a resource and its dependencies.""" self._DeleteResource() self._DeleteDependencies() diff --git a/perfkitbenchmarker/virtual_machine.py b/perfkitbenchmarker/virtual_machine.py index 37c397fde0..3798135b26 100644 --- a/perfkitbenchmarker/virtual_machine.py +++ b/perfkitbenchmarker/virtual_machine.py @@ -110,7 +110,6 @@ def __init__(self, vm_spec): with self._instance_counter_lock: self.name = 'perfkit-%s-%d' % (FLAGS.run_uri, self._instance_counter) BaseVirtualMachine._instance_counter += 1 - self.create_time = None self.bootable_time = None self.project = vm_spec.project self.zone = vm_spec.zone @@ -138,9 +137,6 @@ def __init__(self, vm_spec): self._total_memory_kb = None self._num_cpus = None - def _Create(self): - self.create_time = time.time() - def __repr__(self): return ''.format( self.ip_address, self.internal_ip) @@ -520,10 +516,10 @@ def TimeToBoot(self): Returns: Boot time (in seconds), or None if the boot is incomplete. """ - if not self.bootable_time or not self.create_time: + if not self.bootable_time or not self.create_start_time: return None - assert self.bootable_time >= self.create_time - return self.bootable_time - self.create_time + assert self.bootable_time >= self.create_start_time + return self.bootable_time - self.create_start_time def IsReachable(self, target_vm): """Indicates whether the target VM can be reached from it's internal ip. From 51599c192536b89c241cab5e8fe8f0781b4baa05 Mon Sep 17 00:00:00 2001 From: Eric Hankland Date: Wed, 17 Jun 2015 14:26:10 -0700 Subject: [PATCH 2/2] Respond to review comment --- perfkitbenchmarker/virtual_machine.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/perfkitbenchmarker/virtual_machine.py b/perfkitbenchmarker/virtual_machine.py index 3798135b26..9f84ffd680 100644 --- a/perfkitbenchmarker/virtual_machine.py +++ b/perfkitbenchmarker/virtual_machine.py @@ -514,10 +514,10 @@ def TimeToBoot(self): """Gets the time it took to boot this VM. Returns: - Boot time (in seconds), or None if the boot is incomplete. + Boot time (in seconds). """ - if not self.bootable_time or not self.create_start_time: - return None + assert self.bootable_time, 'VM must have booted to get boot time.' + assert self.create_start_time, 'VM must be created to get boot time.' assert self.bootable_time >= self.create_start_time return self.bootable_time - self.create_start_time