[asterisk-dev] How to improve astdb? Any ideas?

Ron Arts ron.arts at netland.nl
Mon Sep 6 08:37:53 CDT 2010


Op 06-09-10 15:10, Mark Murawski schreef:
>    Here is one fix for the fsync problem.
>
> Spawn an astdb put worker thread. (Same goes for using any database
> backend) Writers will dump their changes to a linked list and return
> immediately.  The writer will write whenever it gets a chance.  if there
> are big or small slowdowns in fsync it wont affect any running threads.
> And if you lose power, well... you would have lost the unwritten data
> anyway because you would have been waiting on it anyway.
>

Please note: if any process or thread on a system is doing fsync()
in a loop, the entire system will slow to a crawl.

Ron



> I think one goal should be to make asterisk as disk io agnostic as
> possible.  I've already ran into major problems using the Monitor() app
> due to disk io.  The disk writing is done in the same thread as audio
> bridging, so if you have high disk io contention (which I had), audio
> bridging suffers while you're recording a call.  MixMonitor() spawns a
> new thread and avoids this problem.  (Ideally Monitor() should also be
> rewritten to spawn a new thread, but that's another issue entirely).
>
>
>
> On 09/06/10 04:38, Stefan Schmidt wrote:
>> Am 06.09.2010 05:17, schrieb Mark Murawski:
>>>     I remember talking to some main people in #asterisk-dev about a
>>> possible plan to ditch astdb and go with sqlite under the hood.  sqlite
>>> is really easy to incorporate into an app and is in public domain.  It
>>> can also be used completely in-memory, which will avoid the disk
>>> bottlenecks you're hitting.
>>>
>>>
>>>
>> sqlite use fsync itself so there would be the same problem atleast. only
>> if you use it in-memory only but i think the berkley db (AFAIK astdb is
>> a berkley) is faster than sqlite.
>>
>> if you run sqlite as a standalone process you wouldnt loose data if
>> asterisk crash but if your system goes down (power loss) you will still
>> loose the data.
>>
>> the other problem i see with this its just moving the problem down one
>> level, even its possible to run sqlite on all system where asterisk is
>> available (i dont know) you have to make sure the user which runs
>> asterisk could also runs sqlite.
>>
>> if you just buildin sqlite into asterisk there is still the data loss
>> problem if asterisk crashes.
>>
>> the bottleneck is only there if you wait for the write buffers to be
>> written to the disk (thats what fsync does)
>>
>> i think if you want to use sqlite there should also be the possibility
>> to use another DB. Think of sharing astdb through different servers
>> would be a cool solution for fallback ;)
>>
>> overall this would need a change to astdb to split it up into a frontend
>> (astdb_put, del and deltree) which are the functions which are called
>> from other asterisk parts and a backend which transmit these data into
>> the DB structure.
>>
>>
>> best regards
>>
>> steve
>>
>


-- 
Netland Internet Services BV
bedrijfsmatige internetoplossingen

http://www.netland.nl  Science Park 140           1098 XG Amsterdam
info: 020-5628282      servicedesk: 020-5628282   fax: 020-5628281
KvK Amsterdam 33253286

Op dit bericht is de volgende disclaimer van toepassing:
http://www.netland.nl/maildisclaimer



More information about the asterisk-dev mailing list