On Mar 2, 2012, at 9:17 AM, Jay Pipes wrote:

> On 03/02/2012 05:34 AM, Day, Phil wrote:
>> In our experience (running clusters of several hundred nodes) the DB 
>> performance is not generally the significant factor, so making its calls 
>> non-blocking  gives only a very small increase in processing capacity and 
>> creates other side effects in terms of slowing all eventlets down as they 
>> wait for their turn to run.
> 
> Yes, I believe I said that this was the case at the last design summit -- or 
> rather, I believe I said "is there any evidence that the database is a 
> performance or scalability problem at all"?
> 
>> That shouldn't really be surprising given that the Nova DB is pretty small 
>> and MySQL is a pretty good DB - throw reasonable hardware at the DB server 
>> and give it a bit of TLC from a DBA (remove deleted entries from the DB, add 
>> indexes where the slow query log tells you to, etc) and it shouldn't be the 
>> bottleneck in the system for performance or scalability.
> 
> ++
> 
>> We use the python driver and have experimented with allowing the eventlet 
>> code to make the db calls non-blocking (its not the default setting), and it 
>> works, but didn't give us any significant advantage.
> 
> Yep, identical results to the work that Mark Washenberger did on the same 
> subject.
> 

Has anyone thought about switching to gevent?   It's similar enough to eventlet 
that the port shouldn't be too bad, and because it's event loop is in C, 
(libevent), there are C mysql drivers (ultramysql) that will work with it 
without blocking.   



>> For example in the API server (before we made it properly multi-threaded)
> 
> By "properly multi-threaded" are you instead referring to making the nova-api 
> server multi-*processed* with eventlet greenthread pools in each process? 
> i.e. The way Swift (and now Glance) works? Or are you referring to a 
> different approach entirely?
> 
> > with blocking db calls the server was essentially a serial processing queue 
> > - each request was fully processed before the next.  With non-blocking db 
> > calls we got a lot more apparent concurrencybut only at the expense of 
> > making all of the requests equally bad.
> 
> Yep, not surprising.
> 
>> Consider a request takes 10 seconds, where after 5 seconds there is a call 
>> to the DB which takes 1 second, and three are started at the same time:
>> 
>> Blocking:
>> 0 - Request 1 starts
>> 10 - Request 1 completes, request 2 starts
>> 20 - Request 2 completes, request 3 starts
>> 30 - Request 3 competes
>> Request 1 completes in 10 seconds
>> Request 2 completes in 20 seconds
>> Request 3 completes in 30 seconds
>> Ave time: 20 sec
>> 
>> Non-blocking
>> 0 - Request 1 Starts
>> 5 - Request 1 gets to db call, request 2 starts
>> 10 - Request 2 gets to db call, request 3 starts
>> 15 - Request 3 gets to db call, request 1 resumes
>> 19 - Request 1 completes, request 2 resumes
>> 23 - Request 2 completes,  request 3 resumes
>> 27 - Request 3 completes
>> 
>> Request 1 completes in 19 seconds  (+ 9 seconds)
>> Request 2 completes in 24 seconds (+ 4 seconds)
>> Request 3 completes in 27 seconds (- 3 seconds)
>> Ave time: 20 sec
>> 
>> So instead of worrying about making db calls non-blocking we've been working 
>> to make certain eventlets non-blocking - i.e. add sleep(0) calls to long 
>> running iteration loops - which IMO has a much bigger impact on the 
>> performance of the apparent latency of the system.
> 
> Yep, and I think adding a few sleep(0) calls in various places in the Nova 
> codebase (as was recently added in the _sync_power_states() periodic task) is 
> an easy and simple win with pretty much no ill side-effects. :)
> 
> Curious... do you have a list of all the places where sleep(0) calls were 
> inserted in the HP Nova code? I can turn that into a bug report and get to 
> work on adding them...
> 
> All the best,
> -jay
> 
>> Phil
>> 
>> 
>> 
>> -----Original Message-----
>> From: openstack-bounces+philip.day=hp....@lists.launchpad.net 
>> [mailto:openstack-bounces+philip.day=hp....@lists.launchpad.net] On Behalf 
>> Of Brian Lamar
>> Sent: 01 March 2012 21:31
>> To: openstack@lists.launchpad.net
>> Subject: Re: [Openstack] eventlet weirdness
>> 
>>>> How is MySQL access handled in eventlet? Presumably it's external C
>>>> library so it's not going to be monkey patched. Does that make every
>>>> db access call a blocking call? Thanks,
>> 
>>> Nope, it goes through a thread pool.
>> 
>> I feel like this might be an over-simplification. If the question is:
>> 
>> "How is MySQL access handled in nova?"
>> 
>> The answer would be that we use SQLAlchemy which can load any number of 
>> SQL-drivers. These drivers can be either pure Python or C-based drivers. In 
>> the case of pure Python drivers, monkey patching can occur and db calls are 
>> non-blocking. In the case of drivers which contain C code (or perhaps other 
>> blocking calls), db calls will most likely be blocking.
>> 
>> If the question is "How is MySQL access handled in eventlet?" the answer 
>> would be to use the eventlet.db_pool module to allow db access using thread 
>> pools.
>> 
>> B
>> 
>> -----Original Message-----
>> From: "Adam Young"<ayo...@redhat.com>
>> Sent: Thursday, March 1, 2012 3:27pm
>> To: openstack@lists.launchpad.net
>> Subject: Re: [Openstack] eventlet weirdness
>> 
>> On 03/01/2012 02:45 PM, Yun Mao wrote:
>>> There are plenty eventlet discussion recently but I'll stick my
>>> question to this thread, although it's pretty much a separate
>>> question. :)
>>> 
>>> How is MySQL access handled in eventlet? Presumably it's external C
>>> library so it's not going to be monkey patched. Does that make every
>>> db access call a blocking call? Thanks,
>> 
>> Nope, it goes through a thread pool.
>>> 
>>> Yun
>>> 
>>> On Wed, Feb 29, 2012 at 9:18 PM, Johannes Erdfelt<johan...@erdfelt.com>   
>>> wrote:
>>>> On Wed, Feb 29, 2012, Yun Mao<yun...@gmail.com>   wrote:
>>>>> Thanks for the explanation. Let me see if I understand this.
>>>>> 
>>>>> 1. Eventlet will never have this problem if there is only 1 OS
>>>>> thread
>>>>> -- let's call it main thread.
>>>> In fact, that's exactly what Python calls it :)
>>>> 
>>>>> 2. In Nova, there is only 1 OS thread unless you use xenapi and/or
>>>>> the virt/firewall driver.
>>>>> 3. The python logging module uses locks. Because of the monkey
>>>>> patch, those locks are actually eventlet or "green" locks and may
>>>>> trigger a green thread context switch.
>>>>> 
>>>>> Based on 1-3, does it make sense to say that in the other OS threads
>>>>> (i.e. not main thread), if logging (plus other pure python library
>>>>> code involving locking) is never used, and we do not run a eventlet
>>>>> hub at all, we should never see this problem?
>>>> That should be correct. I'd have to double check all of the monkey
>>>> patching that eventlet does to make sure there aren't other cases
>>>> where you may inadvertently use eventlet primitives across real threads.
>>>> 
>>>> JE
>>>> 
>>>> 
>>>> _______________________________________________
>>>> Mailing list: https://launchpad.net/~openstack
>>>> Post to     : openstack@lists.launchpad.net
>>>> Unsubscribe : https://launchpad.net/~openstack
>>>> More help   : https://help.launchpad.net/ListHelp
>>> _______________________________________________
>>> Mailing list: https://launchpad.net/~openstack
>>> Post to     : openstack@lists.launchpad.net
>>> Unsubscribe : https://launchpad.net/~openstack
>>> More help   : https://help.launchpad.net/ListHelp
>> 
>> 
>> _______________________________________________
>> Mailing list: https://launchpad.net/~openstack
>> Post to     : openstack@lists.launchpad.net
>> Unsubscribe : https://launchpad.net/~openstack
>> More help   : https://help.launchpad.net/ListHelp
>> 
>> 
>> 
>> _______________________________________________
>> Mailing list: https://launchpad.net/~openstack
>> Post to     : openstack@lists.launchpad.net
>> Unsubscribe : https://launchpad.net/~openstack
>> More help   : https://help.launchpad.net/ListHelp
>> 
>> _______________________________________________
>> Mailing list: https://launchpad.net/~openstack
>> Post to     : openstack@lists.launchpad.net
>> Unsubscribe : https://launchpad.net/~openstack
>> More help   : https://help.launchpad.net/ListHelp
> 
> _______________________________________________
> Mailing list: https://launchpad.net/~openstack
> Post to     : openstack@lists.launchpad.net
> Unsubscribe : https://launchpad.net/~openstack
> More help   : https://help.launchpad.net/ListHelp

--
        Monsyne M. Dragon
        OpenStack/Nova 
        cell 210-441-0965
        work x 5014190


_______________________________________________
Mailing list: https://launchpad.net/~openstack
Post to     : openstack@lists.launchpad.net
Unsubscribe : https://launchpad.net/~openstack
More help   : https://help.launchpad.net/ListHelp

Reply via email to