Getting allocation candidates is slow with "placement microversion < 1.29" from rocky release

Bug #1828937 reported by Tetsuro Nakamura on 2019-05-14
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
OpenStack Compute (nova)
Rocky
Medium
Tetsuro Nakamura

Bug Description

Description
===========
In rocky cycle, 'GET /allocation_candidates' started to be aware of nested providers from microversion 1.29.
From microversion 1.29, it can join allocations from resource providers in the same tree.

To keep the behavior of microversion before 1.29, it filters nested providers [1]
This function "_exclude_nested_providers()" is skipped on microversion >= 1.29 but is heavy on microversion < 1.29.
This is executed and still heavy even if there is no nested providers in the environment when microversion < 1.29.

[1] https://github.com/openstack/placement/blob/e69366675a2ee4532ae3039104b1a5ee8d775083/placement/handlers/allocation_candidate.py#L207-L238

Steps to reproduce
==================

* Create about 6000 resource providers with some inventory and aggregates (using placeload [2])
* Query "GET /allocation_candidates?resources=VCPU:1,DISK_GB:10,MEMORY_MB:256&member_of=${SOME_AGGREGATE}&required=${SOME_TRAIT}" with microversion 1.29 and 1.25

[2] https://github.com/cdent/placeload/tree/master/placeload

Expected (Ideal) result
==================

* No performance difference with microversion 1.25 <-> 1.29

Actual result
==================

* __15.995s__ for microversion 1.25
* __5.541s__ for microversion 1.29

with profiler enabled,

* __32.219s__ for microversion 1.25 - Note that 24.1s(75%) is consumed in the "_exclude_nested_providers()"
* __7.871s__ for microversion 1.29 - Note that this is roughly 32.219s - 24.1s...

no longer affects: nova
description: updated
Matt Riedemann (mriedem) on 2019-05-22
tags: added: performance placement

This issue was fixed in the openstack/nova 19.0.1 release.

This issue was fixed in the openstack/nova 18.2.1 release.

To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Other bug subscribers