Activity log for bug #1828937

Date Who What changed Old value New value Message
2019-05-14 06:46:08 Tetsuro Nakamura bug added bug
2019-05-14 07:26:26 Tetsuro Nakamura nominated for series nova/rocky
2019-05-14 07:26:26 Tetsuro Nakamura bug task added nova/rocky
2019-05-14 07:26:42 Tetsuro Nakamura bug task deleted nova
2019-05-14 07:28:58 Tetsuro Nakamura 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 (Ideal) 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... 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...
2019-05-22 17:08:02 Matt Riedemann nova/rocky: status New In Progress
2019-05-22 17:08:11 Matt Riedemann nova/rocky: assignee Tetsuro Nakamura (tetsuro0907)
2019-05-22 17:08:17 Matt Riedemann nova/rocky: importance Undecided Medium
2019-05-22 17:08:25 Matt Riedemann tags performance placement