[openstack-dev] [Horizon] [Performance] Gathering quota usage data in Horizon

Rob Cresswell robert.cresswell at outlook.com
Thu Jan 26 11:28:51 UTC 2017


There's quite a lot to this. So, first off, quotas in horizon are not in great shape, and it should be one of our priorities next cycle to improve on this. As you've pointed out, it seems any check on quotas right now runs multiple serial API calls for everything that has quotas; I haven't checked this myself, but others have mentioned the same behaviour.

I don't think anyone is actively working on improving quota behaviour, but in the past cycle these two efforts spring to mind:
- https://blueprints.launchpad.net/horizon/+spec/make-quotas-great-again
- https://review.openstack.org/#/c/334017/

If there are people with time to work on this effort I'd be happy to review. Instances management, quotas, overview pages, Identity work are what I'd currently consider the top priorities for improvement.

Rob

On 26 January 2017 at 03:24, Lingxian Kong <anlin.kong at gmail.com<mailto:anlin.kong at gmail.com>> wrote:
Hi, guys,

Sorry for recalling this thread after 1 year, but we are currently suffering from the poor performance issue for our public cloud.

As usage of our customers keeps growing, we are at a stage that should seriously pay more attention to horizon performance problem, so Google took me to this email after a lot of search.

Currently, when loading a page that may contain some buttons for creating/allocating resource (e.g. 'Access & Security'), horizon will check the quota usage first to see if a specific button should be disabled or not, and the checkings just happen *in sequence*, which makes things even worse.

What's more, the quota usage query in horizon is included in one function[1], it will invoke Nova, Cinder, Neutron (perhaps more in future) APIs to get usage of bunch of resources, rather than the resource that page is rendering, which is another flaw IMHO. I know that this function call is already put in cache, but most of our customers' pain just come from the first click.

So, I have a few questions:

1. Does horizon support some config option that could disable quota check? As a public cloud, it doesn't make much sense that usage should be limited, and we have a monitoring tool that will increase quotas automatically when customer's usage will hit the quota limit. So, getting rid of that check will save our customers appreciable mass of waiting time.

2. Another option is to support get quota usage for specific resource rather than all the resources, e.g. when loading floating ip tab, horizon only get floating ip quota usage from Neutron, which has only 2 api calls.

3. I found this FFE[2] which is great (also replied), but splitting tabs is not the end, more effort should be put into the performance improvement.

4. Some other trivial improvement like this: https://review.openstack.org/425494

[1]: https://github.com/openstack/horizon/blob/master/openstack_dashboard/usage/quotas.py#L396
[2]: http://openstack.markmail.org/thread/ra3brm6voo4ouxtx#query:+page:1+mid:oata2tifthnhy5b7+state:results


Cheers,
Lingxian Kong (Larry)

On Wed, Dec 23, 2015 at 9:50 PM, Timur Sufiev <tsufiev at mirantis.com<mailto:tsufiev at mirantis.com>> wrote:
Duncan,

Thank you for the suggestion, will do.

On Wed, 23 Dec 2015 at 10:55, Duncan Thomas <duncan.thomas at gmail.com<mailto:duncan.thomas at gmail.com>> wrote:
On a cloud with a large number of tenants, this is going to involve a large number of API calls. I'd suggest you put a spec into cinder to add an API call for getting the totals straight out of the DB - it should be easy enough to add.

On 18 December 2015 at 20:35, Timur Sufiev <tsufiev at mirantis.com<mailto:tsufiev at mirantis.com>> wrote:
Matt,

actually Ivan (Ivan, thanks a lot!) showed me the exact cinderclient call that I needed. Now I know how to retrieve Cinder quota usage info per-tenant, seems that to retrieve the same info cloud-wide I should sum up all the available tenant usages.

With Cinder quota usages being sorted out, my next goal is Nova and Neutron. As for Neutron, there are plenty of quota-related calls I'm going to play with next week, perhaps there is something suitable for my use case. But as for Nova, I haven't found something similar to 'usage' of cinderclient call, so help from someone familiar with Nova is very appreciated :).

[0] https://github.com/openstack/python-cinderclient/blob/master/cinderclient/v2/quotas.py#L36

On Fri, Dec 18, 2015 at 5:17 PM Matt Riedemann <mriedem at linux.vnet.ibm.com<mailto:mriedem at linux.vnet.ibm.com>> wrote:


On 12/17/2015 2:40 PM, Ivan Kolodyazhny wrote:
> Hi Timur,
>
> Did you try this Cinder API [1]?  Here [2] is cinderclient output.
>
>
>
> [1]
> https://github.com/openstack/python-cinderclient/blob/master/cinderclient/v2/quotas.py#L33
> [2] http://paste.openstack.org/show/482225/
>
> Regards,
> Ivan Kolodyazhny,
> http://blog.e0ne.info/
>
> On Thu, Dec 17, 2015 at 8:41 PM, Timur Sufiev <tsufiev at mirantis.com<mailto:tsufiev at mirantis.com>
> <mailto:tsufiev at mirantis.com<mailto:tsufiev at mirantis.com>>> wrote:
>
>     Hello, folks!
>
>     I'd like to initiate a discussion of the feature request I'm going
>     to make on behalf of Horizon to every core OpenStack service which
>     supports Quota feature, namely Cinder, Nova and Neutron.
>
>     Although all three services' APIs support special calls to get
>     current quota limitations (Nova and Cinder allows to get and update
>     both per-tenant and default cloud-wide limitations, Neutron allows
>     to do it only for per-tenant limitations), there is no special call
>     in any of these services to get current per-tenant usage of quota.
>     Because of that Horizon needs to get, say for 'volumes' quota, a
>     list of Cinder volumes in the current tenant and then just calculate
>     its length [1]. When there are really a lot of entities in tenant -
>     instances/volumes/security groups/whatever - all this calls sum up
>     and make rendering pages in Horizon much more slower than it could
>     be. Is it possible to provide special API calls to alleviate this?
>
>     [1]
>     https://github.com/openstack/horizon/blob/9.0.0.0b1/openstack_dashboard/usage/quotas.py#L350
>
>     __________________________________________________________________________
>     OpenStack Development Mailing List (not for usage questions)
>     Unsubscribe:
>     OpenStack-dev-request at lists.openstack.org?subject:unsubscribe<http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe>
>     <http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe>
>     http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>
>
>
>
> __________________________________________________________________________
> OpenStack Development Mailing List (not for usage questions)
> Unsubscribe: OpenStack-dev-request at lists.openstack.org?subject:unsubscribe<http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe>
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>

I think Timur is asking for a way to filter on only certain resources
for quota usage/limits, like volumes in cinder or instances in nova,
rather than getting back all resource usage/limits per tenant.

Is that correct, Timur?

While it's possible to add this, I'm not sure how much time it's
actually going to save in the DB query time to get the quota information
for a tenant.

Anyway, it's an API change so it would require a spec for nova which
means we wouldn't be getting to that until at least N since we're in
spec freeze for mitaka.

--

Thanks,

Matt Riedemann


__________________________________________________________________________
OpenStack Development Mailing List (not for usage questions)
Unsubscribe: OpenStack-dev-request at lists.openstack.org?subject:unsubscribe<http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe>
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

__________________________________________________________________________
OpenStack Development Mailing List (not for usage questions)
Unsubscribe: OpenStack-dev-request at lists.openstack.org?subject:unsubscribe<http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe>
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev




--
--
Duncan Thomas
__________________________________________________________________________
OpenStack Development Mailing List (not for usage questions)
Unsubscribe: OpenStack-dev-request at lists.openstack.org?subject:unsubscribe<http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe>
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

__________________________________________________________________________
OpenStack Development Mailing List (not for usage questions)
Unsubscribe: OpenStack-dev-request at lists.openstack.org?subject:unsubscribe<http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe>
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstack.org/pipermail/openstack-dev/attachments/20170126/87e93f9a/attachment-0001.html>


More information about the OpenStack-dev mailing list