[asterisk-bugs] [Asterisk 0018866]: Asterisk 1.6.2.16.1 on embedded linux low perfomance of app_queue

Asterisk Bug Tracker noreply at bugs.digium.com
Tue Feb 22 08:14:42 CST 2011


A NOTE has been added to this issue. 
====================================================================== 
https://issues.asterisk.org/view.php?id=18866 
====================================================================== 
Reported By:                trscod
Assigned To:                
====================================================================== 
Project:                    Asterisk
Issue ID:                   18866
Category:                   Applications/app_queue
Reproducibility:            always
Severity:                   crash
Priority:                   normal
Status:                     new
Asterisk Version:           1.6.2.16.1 
JIRA:                        
Regression:                 No 
Reviewboard Link:            
SVN Branch (only for SVN checkouts, not tarball releases): N/A 
SVN Revision (number only!):  
Request Review:              
====================================================================== 
Date Submitted:             2011-02-22 07:35 CST
Last Modified:              2011-02-22 08:14 CST
====================================================================== 
Summary:                    Asterisk 1.6.2.16.1 on embedded linux low perfomance
of app_queue
Description: 
Hi
I run asterisk 1.6.2.16.1 on embedded linux based on gentoo linux. LAMP &
FreePBX is used.
uname -a
Linux pbx 2.6.36 https://issues.asterisk.org/view.php?id=2 SMP Thu Feb 17
14:00:31 i686 Intel(R) Atom(TM) CPU
N270 @ 1.60GHz GenuineIntel GNU/Linux
Asterisk works with well perfomance. Tests of perfomance of chan_sip &
playback:

sipp -rtp_echo -sn uac 192.168.1.1 -s 777 -d 30000 -l 150 -i 192.168.1.2

with dialplan:
[E1_IN]
exten => _X.,1,Answer
exten => _X.,2,Playback(/var/lib/asterisk/moh/atr)
exten => _X.,3,Hangup

asterisk -rx "core show channels"
....
SIP/0000-00005ef3    777 at E1_IN:2          Up     
Playback(/var/lib/asterisk/moh
SIP/0000-00005ef2    777 at E1_IN:2          Up     
Playback(/var/lib/asterisk/moh
SIP/0000-00005ef1    777 at E1_IN:2          Up     
Playback(/var/lib/asterisk/moh
SIP/0000-00005ef0    777 at E1_IN:2          Up     
Playback(/var/lib/asterisk/moh
150 active channels
150 active calls
24454 calls processed

asterisk -rx "core show uptime"
System uptime: 1 hour, 22 minutes, 6 seconds

load average: 0.62, 1.16, 1.77
Asterisk's PID uses 99% CPU

I think this perfomance is good for this mashine.

Then I test a queue perfomance. In FreePBX i add 15 peers(extensions) &
add queue whith default settings:

asterisk -rx "queue show"
0000001 has 0 calls (max unlimited) in 'ringall' strategy (0s holdtime, 0s
talktime), W:0, C:0, A:0, SL:0.0% within 60s
   Members: 
      109 (Local/109 at from-queue/n) (Invalid) has taken no calls yet
      108 (Local/108 at from-queue/n) (Invalid) has taken no calls yet
      107 (Local/107 at from-queue/n) (Invalid) has taken no calls yet
      106 (Local/106 at from-queue/n) (Invalid) has taken no calls yet
      105 (Local/105 at from-queue/n) (Invalid) has taken no calls yet
      104 (Local/104 at from-queue/n) (Invalid) has taken no calls yet
      103 (Local/103 at from-queue/n) (Invalid) has taken no calls yet
      102 (Local/102 at from-queue/n) (Invalid) has taken no calls yet
      101 (Local/101 at from-queue/n) (Invalid) has taken no calls yet
      100 (Local/100 at from-queue/n) (Invalid) has taken no calls yet
      114 (Local/114 at from-queue/n) (Invalid) has taken no calls yet
      113 (Local/113 at from-queue/n) (Invalid) has taken no calls yet
      112 (Local/112 at from-queue/n) (Invalid) has taken no calls yet
      111 (Local/111 at from-queue/n) (Invalid) has taken no calls yet
      110 (Local/110 at from-queue/n) (Invalid) has taken no calls yet
   No Callers

The members of this queue are absent. They are not registered on server.

Either in FreePBX I add inbound route 777 to queue.

So, test:

sipp -rtp_echo -sn uac 192.168.1.1 -s 777 -d 30000 -l 5 -i 192.168.1.2
(ONLY 5 CALLS)

& register one of 15 members of queue (peer 100)

well, some time after the running test - all is OK:

asterisk -rx "core show channels"
Channel              Location             State   Application(Data)       
     
SIP/100-00000005     100 at from-internal:1  Ringing AppDial((Outgoing Line))
     
Local/100 at from-queue s at macro-dial-one:37  Ring   
Dial(SIP/100,"",trM(auto-blkvm
Local/100 at from-queue 0000001 at from-queue:1 Ringing AppQueue((Outgoing
Line))     
SIP/0000-00000004    0000001 at ext-queues:9 Up      Queue(0000001,t,,)      
     
SIP/0000-00000003    0000001 at ext-queues:9 Up      Queue(0000001,t,,)      
     
SIP/0000-00000002    0000001 at ext-queues:9 Up      Queue(0000001,t,,)      
     
SIP/0000-00000001    0000001 at ext-queues:9 Up      Queue(0000001,t,,)      
     
SIP/0000-00000000    0000001 at ext-queues:9 Up      Queue(0000001,t,,)      
     
8 active channels
6 active calls
20 calls processed

asterisk -rx "queue show"      
0000001 has 5 calls (max unlimited) in 'ringall' strategy (0s holdtime, 0s
talktime), W:0, C:0, A:0, SL:0.0% within 60s
   Members: 
      109 (Local/109 at from-queue/n) (Unavailable) has taken no calls yet
      108 (Local/108 at from-queue/n) (Unavailable) has taken no calls yet
      107 (Local/107 at from-queue/n) (Unavailable) has taken no calls yet
      106 (Local/106 at from-queue/n) (Unavailable) has taken no calls yet
      105 (Local/105 at from-queue/n) (Unavailable) has taken no calls yet
      104 (Local/104 at from-queue/n) (Unavailable) has taken no calls yet
      103 (Local/103 at from-queue/n) (Unavailable) has taken no calls yet
      102 (Local/102 at from-queue/n) (Unavailable) has taken no calls yet
      101 (Local/101 at from-queue/n) (Unavailable) has taken no calls yet
      100 (Local/100 at from-queue/n) (Ringing) has taken no calls yet
      114 (Local/114 at from-queue/n) (Unavailable) has taken no calls yet
      113 (Local/113 at from-queue/n) (Unavailable) has taken no calls yet
      112 (Local/112 at from-queue/n) (Unavailable) has taken no calls yet
      111 (Local/111 at from-queue/n) (Unavailable) has taken no calls yet
      110 (Local/110 at from-queue/n) (Unavailable) has taken no calls yet
   Callers: 
      1. SIP/0000-00000000 (wait: 0:24, prio: 0)
      2. SIP/0000-00000001 (wait: 0:24, prio: 0)
      3. SIP/0000-00000002 (wait: 0:24, prio: 0)
      4. SIP/0000-00000003 (wait: 0:24, prio: 0)
      5. SIP/0000-00000004 (wait: 0:24, prio: 0)

But after only 1minute, 41 seconds queue is ?eases to call member 100.
Then I see:

asterisk -rx "queue show"
0000001 has 6 calls (max unlimited) in 'ringall' strategy (3s holdtime, 1s
talktime), W:0, C:1, A:9, SL:100.0% within 60s
   Members: 
      109 (Local/109 at from-queue/n) (Unavailable) has taken no calls yet
      108 (Local/108 at from-queue/n) (Unavailable) has taken no calls yet
      107 (Local/107 at from-queue/n) (Unavailable) has taken no calls yet
      106 (Local/106 at from-queue/n) (Unavailable) has taken no calls yet
      105 (Local/105 at from-queue/n) (Unavailable) has taken no calls yet
      104 (Local/104 at from-queue/n) (Unavailable) has taken no calls yet
      103 (Local/103 at from-queue/n) (Unavailable) has taken no calls yet
      102 (Local/102 at from-queue/n) (Unavailable) has taken no calls yet
      101 (Local/101 at from-queue/n) (Unavailable) has taken no calls yet
      100 (Local/100 at from-queue/n) (Not in use) has taken 1 calls (last
was 35 secs ago)
      114 (Local/114 at from-queue/n) (Unavailable) has taken no calls yet
      113 (Local/113 at from-queue/n) (Unavailable) has taken no calls yet
      112 (Local/112 at from-queue/n) (Unavailable) has taken no calls yet
      111 (Local/111 at from-queue/n) (Unavailable) has taken no calls yet
      110 (Local/110 at from-queue/n) (Unavailable) has taken no calls yet
   Callers: 
      1. SIP/0000-00000008 (wait: 0:57, prio: 0)
      2. SIP/0000-00000010 (wait: 0:27, prio: 0)
      3. SIP/0000-00000011 (wait: 0:27, prio: 0)
      4. SIP/0000-00000012 (wait: 0:27, prio: 0)
      5. SIP/0000-00000013 (wait: 0:27, prio: 0)
      6. SIP/0000-00000014 (wait: 0:04, prio: 0)

asterisk -rx "core show uptime"
System uptime: 1 minute, 41 seconds 

asterisk -rx "core show channels"
Channel              Location             State   Application(Data)       
     
SIP/0000-00000022    0000001 at ext-queues:9 Up      Queue(0000001,t,,)      
     
SIP/0000-00000021    0000001 at ext-queues:9 Up      Queue(0000001,t,,)      
     
SIP/0000-00000020    0000001 at ext-queues:9 Up      Queue(0000001,t,,)      
     
SIP/0000-0000001f    0000001 at ext-queues:9 Up      Queue(0000001,t,,)      
     
SIP/0000-0000001e    0000001 at ext-queues:9 Up      Queue(0000001,t,,)      
     
Local/100 at from-queue 0000001 at from-queue:1 Ringing AppQueue((Outgoing
Line))     
6 active channels
6 active calls
165 calls processed

top - 16:06:09 up  5:04,  2 users,  load average: 0.00, 0.02, 0.18

Cpu(s):  1.2%us,  2.3%sy,  0.0%ni, 95.0%id,  0.0%wa,  0.3%hi,  1.2%si, 
0.0%st

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+ COMMAND         
                                                                           
             
16815 asterisk  20   0 42116  19m 8376 S    8  1.9   0:20.26 asterisk    

It is not all. After the termination of the sipp, asterisk become strange:
it execute commands whits small delay & want no to execute command "core
restart now". I can restart asterisk only with killing PID.
So, i thik it is a bug. 
I tryed to find similar issue on this site before.
====================================================================== 

---------------------------------------------------------------------- 
 (0132261) davidw (reporter) - 2011-02-22 08:14
 https://issues.asterisk.org/view.php?id=18866#c132261 
---------------------------------------------------------------------- 
There doesn't seem to be a performance problem (load average is very low);
there is some hint of a deadlock.

Firstly, if you have to kill asterisk, you always need to supply
backtraces from an unoptimised compilation (attach gdb before killing, or
use gcore).  ^\ may not show all the processes.

Also, given this looks like there is some sort of deadlock, you need to
have built with thread debugging, and to run core show locks.  If a CLI has
stalled, you can usually still do this by starting a new one and issuing it
as the first command.

I think, for 1.6.2, this is still documented in the doc directory in the
source tree.  For later versions it is in the wiki. 

Issue History 
Date Modified    Username       Field                    Change               
====================================================================== 
2011-02-22 08:14 davidw         Note Added: 0132261                          
======================================================================




More information about the asterisk-bugs mailing list