Skip to content

Commit

Permalink
Improving logging at '_allocate_mdevs'.
Browse files Browse the repository at this point in the history
Adding both 'info' and 'debug' messages with the intention of telling
which mdevs are available, which get allocated and whether new ones
are created.

Closes-Bug: #1992451
Change-Id: Ibd331df51fd4eaeed4831a98469f06a4ce0cd452
  • Loading branch information
jsanemet committed Oct 13, 2022
1 parent 03d2715 commit 6feb335
Showing 1 changed file with 13 additions and 0 deletions.
13 changes: 13 additions & 0 deletions nova/virt/libvirt/driver.py
Expand Up @@ -8323,6 +8323,7 @@ def _get_existing_mdevs_not_assigned(self, parent, requested_types=None):
:param requested_types: Filter out the result for only mediated devices
having those types.
"""
LOG.debug('Searching for available mdevs...')
allocated_mdevs = self._get_all_assigned_mediated_devices()
mdevs = self._get_mediated_devices(requested_types)
available_mdevs = set()
Expand All @@ -8338,6 +8339,7 @@ def _get_existing_mdevs_not_assigned(self, parent, requested_types=None):
available_mdevs.add(mdev["uuid"])

available_mdevs -= set(allocated_mdevs)
LOG.info('Available mdevs at: %s.', available_mdevs)
return available_mdevs

def _create_new_mediated_device(self, parent, uuid=None):
Expand All @@ -8349,6 +8351,7 @@ def _create_new_mediated_device(self, parent, uuid=None):

:returns: the newly created mdev UUID or None if not possible
"""
LOG.debug('Attempting to create new mdev...')
supported_types = self.supported_vgpu_types
# Try to see if we can still create a new mediated device
devices = self._get_mdev_capable_devices(supported_types)
Expand All @@ -8360,6 +8363,7 @@ def _create_new_mediated_device(self, parent, uuid=None):
# The device is not the one that was called, not creating
# the mdev
continue
LOG.debug('Trying on: %s.', dev_name)
dev_supported_type = self._get_vgpu_type_per_pgpu(dev_name)
if dev_supported_type and device['types'][
dev_supported_type]['availableInstances'] > 0:
Expand All @@ -8369,7 +8373,13 @@ def _create_new_mediated_device(self, parent, uuid=None):
pci_addr = "{}:{}:{}.{}".format(*dev_name[4:].split('_'))
chosen_mdev = nova.privsep.libvirt.create_mdev(
pci_addr, dev_supported_type, uuid=uuid)
LOG.info('Created mdev: %s on pGPU: %s.',
chosen_mdev, pci_addr)
return chosen_mdev
LOG.debug('Failed: No available instances on device.')
LOG.info('Failed to create mdev. '
'No free space found among the following devices: %s.',
[dev['dev_id'] for dev in devices])

@utils.synchronized(VGPU_RESOURCE_SEMAPHORE)
def _allocate_mdevs(self, allocations):
Expand Down Expand Up @@ -8452,13 +8462,16 @@ def _allocate_mdevs(self, allocations):
# Take the first available mdev
chosen_mdev = mdevs_available.pop()
else:
LOG.debug('No available mdevs where found. '
'Creating an new one...')
chosen_mdev = self._create_new_mediated_device(parent_device)
if not chosen_mdev:
# If we can't find devices having available VGPUs, just raise
raise exception.ComputeResourcesUnavailable(
reason='mdev-capable resource is not available')
else:
chosen_mdevs.append(chosen_mdev)
LOG.info('Allocated mdev: %s.', chosen_mdev)
return chosen_mdevs

def _detach_mediated_devices(self, guest):
Expand Down

0 comments on commit 6feb335

Please sign in to comment.