Skip to content

Commit

Permalink
pci: Add logging for filtering
Browse files Browse the repository at this point in the history
This is possibly quite noisy, but it should give some kind of breadcrumb
to suggest why a host was rejected. It can be particularly beneficial
for devices with SR-IOV devices, which as noted on bug #1852727 are
filtered out by default.

Change-Id: I67455d4ecfafed96cb0f3f9fbe6f94808bd05909
Signed-off-by: Stephen Finucane <[email protected]>
Related-Bug: #1852727
  • Loading branch information
stephenfin committed Nov 27, 2020
1 parent c2357ab commit d81ef45
Showing 1 changed file with 35 additions and 2 deletions.
37 changes: 35 additions & 2 deletions nova/pci/stats.py
Original file line number Diff line number Diff line change
Expand Up @@ -371,19 +371,52 @@ def _filter_pools(cls, pools, request, numa_cells):

# Firstly, let's exclude all devices that don't match our spec (e.g.
# they've got different PCI IDs or something)
before_count = sum([pool['count'] for pool in pools])
pools = cls._filter_pools_for_spec(pools, request)
after_count = sum([pool['count'] for pool in pools])

if after_count < before_count:
LOG.debug(
'Dropped %d devices due to mismatched PCI attribute(s)',
before_count - after_count
)

if after_count < request.count:
LOG.debug('Not enough PCI devices left to satify request')
return None

# Next, let's exclude all devices that aren't on the correct NUMA node
# *assuming* we have devices and care about that, as determined by
# policy
before_count = after_count
pools = cls._filter_pools_for_numa_cells(pools, request, numa_cells)
after_count = sum([pool['count'] for pool in pools])

if after_count < before_count:
LOG.debug(
'Dropped %d devices as they are on the wrong NUMA node(s)',
before_count - after_count
)

if after_count < request.count:
LOG.debug('Not enough PCI devices left to satify request')
return None

# Finally, if we're not requesting PFs then we should not use these.
# Exclude them.
before_count = after_count
pools = cls._filter_pools_for_unrequested_pfs(pools, request)
after_count = sum([pool['count'] for pool in pools])

if after_count < before_count:
LOG.debug(
'Dropped %d devices as they are PFs which we have not '
'requested',
before_count - after_count
)

# Do we still have enough devices left?
if sum([pool['count'] for pool in pools]) < request.count:
if after_count < request.count:
LOG.debug('Not enough PCI devices left to satify request')
return None

return pools
Expand Down

0 comments on commit d81ef45

Please sign in to comment.