[qa][openstackclient] Debugging devstack slowness

Ben Nemec openstack at nemebean.com
Wed Aug 7 13:33:48 UTC 2019



On 8/6/19 11:34 AM, Ben Nemec wrote:
> 
> 
> On 8/6/19 10:49 AM, Clark Boylan wrote:
>> On Tue, Aug 6, 2019, at 8:26 AM, Ben Nemec wrote:
>>> Just a reminder that there is also
>>> http://lists.openstack.org/pipermail/openstack-dev/2016-April/092546.html 
>>>
>>> which was intended to address this same issue.
>>>
>>> I toyed around with it a bit for TripleO installs back then and it did
>>> seem to speed things up, but at the time there was a bug in our client
>>> plugin where it was triggering a prompt for input that was problematic
>>> with the server running in the background. I never really got back to it
>>> once that was fixed. :-/
>>
>> I'm not tied to any particular implementation. Mostly I wanted to show 
>> that we can take this ~5 minute portion of devstack and turn it into a 
>> 15 second portion of devstack by improving our use of the service APIs 
>> (and possibly even further if we apply it to all of the api 
>> interaction). Any idea how difficult it would be to get your client as 
>> a service stuff running in devstack again?
> 
> I wish I could take credit, but this is actually Dan Berrange's work. :-)
> 
>>
>> I do not think we should make a one off change like I've done in my 
>> POC. That will just end up being harder to understand and debug in the 
>> future since it will be different than all of the other API 
>> interaction. I like the idea of a manifest or feeding a longer lived 
>> process api update commands as we can then avoid requesting new tokens 
>> as well as pkg_resource startup time. Such a system could be used by 
>> all of devstack as well (avoiding the "this bit is special" problem).
>>
>> Is there any interest from the QA team in committing to an approach 
>> and working to do a conversion? I don't want to commit any more time 
>> to this myself unless there is strong interest in getting changes 
>> merged (as I expect it will be a slow process weeding out places where 
>> we've made bad assumptions particularly around plugins).
>>
>> One of the things I found was that using names with osc results in 
>> name to id lookups as well. We can avoid these entirely if we remember 
>> name to id mappings instead (which my POC does). Any idea if your osc 
>> as a service tool does or can do that? Probably have to be more 
>> careful for scoping things in a tool like that as it may be reused by 
>> people with name collisions across projects/users/groups/domains.
> 
> I don't believe this would handle name to id mapping. It's a very thin 
> wrapper around the regular client code that just makes it persistent so 
> we don't pay the startup costs every call. On the plus side that means 
> it basically works like the vanilla client, on the minus side that means 
> it may not provide as much improvement as a more targeted solution.
> 
> IIRC it's pretty easy to use, so I can try it out again and make sure it 
> still works and still provides a performance benefit.

It still works and it still helps. Using the osc service cut about 3 
minutes off my 21 minute devstack run. Subjectively I would say that 
most of the time was being spent cloning and installing services and 
their deps.

I guess the downside is that working around the OSC slowness in CI will 
reduce developer motivation to fix the problem, which affects all users 
too. Then again, this has been a problem for years and no one has fixed 
it, so apparently that isn't a big enough lever to get things moving 
anyway. :-/

> 
>>
>>>
>>> On 7/26/19 6:53 PM, Clark Boylan wrote:
>>>> Today I have been digging into devstack runtime costs to help Donny 
>>>> Davis understand why tempest jobs sometimes timeout on the 
>>>> FortNebula cloud. One thing I discovered was that the keystone user, 
>>>> group, project, role, and domain setup [0] can take many minutes 
>>>> [1][2] (in the examples here almost 5).
>>>>
>>>> I've rewritten create_keystone_accounts to be a python tool [3] and 
>>>> get the runtime for that subset of setup from ~100s to ~9s [4].  I 
>>>> imagine that if we applied this to the other create_X_accounts 
>>>> functions we would see similar results.
>>>>
>>>> I think this is so much faster because we avoid repeated costs in 
>>>> openstack client including: python process startup, pkg_resource 
>>>> disk scanning to find entrypoints, and needing to convert names to 
>>>> IDs via the API every time osc is run. Given my change shows this 
>>>> can be so much quicker is there any interest in modifying devstack 
>>>> to be faster here? And if so what do we think an appropriate 
>>>> approach would be?
>>>>
>>>> [0] 
>>>> https://opendev.org/openstack/devstack/src/commit/6aeaceb0c4ef078d028fb6605cac2a37444097d8/stack.sh#L1146-L1161 
>>>>
>>>> [1] 
>>>> http://logs.openstack.org/05/672805/4/check/tempest-full/14f3211/job-output.txt.gz#_2019-07-26_12_31_04_488228 
>>>>
>>>> [2] 
>>>> http://logs.openstack.org/05/672805/4/check/tempest-full/14f3211/job-output.txt.gz#_2019-07-26_12_35_53_445059 
>>>>
>>>> [3] https://review.opendev.org/#/c/673108/
>>>> [4] 
>>>> http://logs.openstack.org/08/673108/6/check/devstack-xenial/a4107d0/job-output.txt.gz#_2019-07-26_23_18_37_211013 
>>>>
>>>>
>>>> Note the jobs compared above all ran on rax-dfw.
>>>>
>>>> Clark
>>>>
>>>
>>>
>>
> 



More information about the openstack-discuss mailing list