Información blog

Linux, tutoriales, noticias, sistemas, redes y seguridad informática, entre otras cosas.

martes, 4 de octubre de 2022

Cómo hacer un cálculo genérico de cuanto puede consumir Asterisk en Linux

Cuando entramos en los terrenos de VoIP, hay muchas variables y un mundo de factores que pueden influir y "alterar" nuestras mediciones, pero siempre es bueno tener algunas referencias genéricas a mano con el finde poder hacer algunas estimaciones aproximadas a la hora de dimensionar los recursos necesarios para montar una PBX. A la hora de decir "cuanto consume", generalmente se divide en tres sub-factores: Ancho de banda, consumo de CPU y consumo de RAM.


Asterisk_calc_portada

 

Ancho de banda Asterisk: 

Empecemos por el cálculo más sencillo, que sería el de ancho de banda, cosa que aquí concretamente es muy importante… Para ello, es importante saber que, dependiendo del códec utilizado el ancho de banda varía… Hablando en términos generales, históricamente se ha usado siempre el códec más común y standard en todos los softphone y tecnologías que hay a nivel nacional e internacional, el G711. Sí, el G729 es el más eficiente en términos de ancho de banda, pero representa varios inconvenientes dicho protocolo, y es que, más allá de que es de pago, NO permite transcoding. Aún así a continuación una tabla genérica:

  

ancho_banda_codec_audio

Tabla anchos de banda códecs 

 

El parámetro más importante de dicha tabla es el ancho de banda a nivel de ethernet, el resto son cálculos de ancho de banda de algunos servicios o de la cabecera VoIP sin más datos, pero todos los cálculos de ancho de banda VoIP lo sitúan en un consumo de entre 80-90Kbps, más cercanos a los 90. Es por ello que en nuestro cálculo usaremos 90kbps como base para nuestra medición… Partiendo de la base de que tenemos una tarjeta de red 1 Gb. 

 

1 Gbps=1000000 Kbps 

1000000 kbps /90 kbps= 11111 llamadas simultáneas 


Esto es un cálculo extremadamente simplificado e irrealista que obviamente está eliminando absolutamente cualquier otra interacción de, ya sea respuestas ARP, interacciones de servicios, accesos web, accesos SSH, etc… Interacciones que, obviamente, restan muchísimo al ancho de anda disponible, pero al menos mediante esta tabla, tenemos una base inicial sobre la que trabajar y, sobre todo, nos hace saber que cada llamada nos está repercutiendo en 90kbps de ancho de red… Con el añadido de que hay otros servicios que también consumen red. 

 

Si metemos video en la ecuación, el ancho de banda consumido por los elementos de video aumenta considerablemente. Dicho ancho depende del códec y de la resolución, pero he aquí una pequeña tabla: 


ancho_banda_codec_video

Tabla anchos de banda códecs video 

 

Si nos ponemos en el “peor” de los casos con H264 a 1080p y partiendo de la base de que las tarjetas de red son en general de 1Gbps. 


1 Gbps=1000 Mbps 

1000 Mbps / 6Mbps = 166 videollamadas simultáneas 


 

Cálculo de RAM Asterisk: 

El cálculo de RAM es algo tan sencillo como ejecutar el siguiente comando: 

ps -ylC asterisk | awk {x += $8;y += 1} END {print Memoria total usada (MB): x/1024} 

 
El consumo de memoria RAM en Asterisk es importante, pero hay multitud de otros procesos que comparten el mismo entorno, con consumos mucho mayores y mucho más delimitantes, este valor sería importante ver hasta qué punto puede incrementarse en PBX dedicadas o balanceadores de CARGA SIP, con lo que nos quedaremos con el consumo “base” que hace Asterisk, el cual ronda los 150 MBs. 

 

Consumo CPU Asterisk 

Utilizaremos el comando top de Asterisk para visualizar cuanto consume Asterisk (y sus llamadas): 

top -p $(ps -e |grep asterisk |awk {print $1}) 

 

Mediante este comando veremos solamente el proceso Asterisk, el cual cuando se encuentra en IDDLE no consume CPU (un consumo residual de apenas un 0,3%), en cambio cuando tenemos una llamada activa, es decir una llamada con una comunicación de audio activa, el consumo de cada llamada consume alrededor de un x% de un core, lo cual es importante tenerlo en cuenta también a la hora de dimensionar. Por ejemplo, hablando siempre de forma "genérica", en la mayoría de pruebas que he realizado el consumo por llamada se reduce a alrededor de un 1% de un core.


Para los cálculos estimaremos que alrededor habrá simultáneas alrededor de un 15% de llamadas con audio activas simultáneas (hay que tener en cuenta que a veces pueden haber llamadas que se “alargan”, de ahí que se ponga un 15 y no un 10. Con lo que nos baremos en esta fórmula para hacer los cálculos:

 

(1 * número total de teléfonos* 0.15 ) / 100 

 

Esto aplicado a una instalación con 100 teléfonos sería: 


(1 * 100 * 0.15 ) / 100 = 0,15 


Es decir, hablaríamos de un consumo de un 15% de CPU en una instalación con 100 puntos, siempre y cuando se cumpla ese 15% de teléfonos llamando simultáneamente. 


Sumando todos estos conceptos por separado podremos saber, de forma aproximada si nuestra máquina puede soportar un determinado número; obviamente hay mil factores, pero esto nos sirve como una buena base que sirva como punto de partida.


Espero que os haya resultado útil.


Saludos.