Asterisk

Производительность Asterisk систем

Производительность Asterisk систем


Типичные вопросы, которые можно увидеть в пользовательском списке рассылки asterisk-users, примерно такие:

Насколько быстрым и мощным должно быть аппаратное обеспечение моего сервера, чтобы он мог удовлетворять моим потребностям?
Сколько одновременных вызовов может обрабатывать сервер Asterisk?

К сожалению, не существует простого и однозначного ответа на этот вопрос. Вам нужно будет ответить для себя на некоторые вопросы, часть которых приведена ниже, чтобы хоть как-то стать ближе к ответу или более четко сформулировать свои требования в форумах или в пользовательских списках рассылок:

  1. Какие типы телефонов Вы планируете использовать (обычные аналоговые, SIP, Skinny, H.323, MGCP)?
  2. Сколько телефонов Вы планируете подключить?
  3. Сколько линий во внешний мир у Вас имеется, и какая для них используется технология (аналоговая линия, BRI, PRI, T1, VoIP)?
  4. Сколько у Вас, примерно, ожидается внутренних/внешних одновременных вызовов (например: 30%)? Обратитесь к таблицам для вычисления Эрланга (параметр интенсивности обработки требований в системах массового обслуживания) (смотри ссылки ниже), если у Вас есть сомнения по этому вопросу.
  5. Какие голосовые кодеки будут у Вас использоваться, и будет ли у Вас необходимость в перекодировании из одного кодека в другой (транскодировании)? Tip: наберите команду: SHOW TRANSLATION в CLI консоли.
  6. Какие возможности и сервисы будет предоставлять ваша система (подавление эха, голосовая почта, конференции и очереди вызовов & call-центр, запись разговоров, факсы, голосовое меню, синтез и распознавание речи)?
  7. Насколько надежной/Asterisk at large должна быть Ваша система?
  8. Сколько серверов с Asterisk вы планируете использовать для Вашей задачи?
  9. Что поддерживается Вашей IP сетью из возможностей (скорость, поддержка QoS, VLAN, Power-over-Ethernet)?

Следующими шагом можно сделать следующее:

Сколько вызовов сервер может обрабатывать одновременно?

Ниже приводиться коллекция отчетов из пользовательского списка рассылки "asterisk-users":

Замечание: Если у Вас возникнет желание что-то добавить в этот список, пожалуйста, используйте процент загрузки CPU и Памяти, а не параметр "load average". Это дает более конкретную информацию и имеет важное значение при сравнении разного аппаратного обеспечения и разных операционных систем. Записи отсортированы по мощности CPU.




Определение предельной загрузки

То, что действительно важно - это нагрузка на Вашу систему и типы каналов, которые у Вас используются. Каналы Zap более надежно работают при предельной загрузке, чем любые из VOIP каналов. Действия по управлению могут не работать на предельных нагрузках. Все VOIP каналы более подвержены проблеме потери качества на предельной нагрузке. При максимальной нагрузке, имеется ввиду значение load average, равное 5.00 и выше (10.00 на машине с двумя CPU) , влияют еще и другие факторы. Нагрузка на систему, создаваемая используемыми каналами связи, различается от сервера к серверу, в зависимости от используемого CPU/RAM/Motherboard и от других приложений, запущенных на этом же сервере.

Аппаратное обеспечение от Digium (Июль 2005)

Карты компании Digium теперь стали более интеллектуальными! Компания Digium гордо анонсировала второе поколение firmware для своих многоканальных карт TE-серии для PCI шины. Это firmware позволяет использовать некоторые новые возможности. Они позволяют картам обрабатывать больше задач средствами аппаратного обеспечения самих карт, тем самым, разгружая центральный процессор для выполнения других действий, при этом, увеличивая его производительность, и давая возможность обрабатывать больше каналов связи, проходящих через один PC или сервер.
... При этом на 67% увеличивается производительность, по сравнению с предыдущими проверками ...

Новая версия firmware меньше полагается на центральный процессор сервера для решения задач обработки сигналов в картах Digium, тем самым уменьшая нагрузку на CPU и увеличивая производительность в целом и позволяя обрабатывать больше количество одновременных вызовов. Например, сервер с двумя процессорами 3-GHz 800FSB Intel XEON с кэшом 1MB L2, и с установленной картой Digium 4-port T1/E1, теперь могут конвертировать 120 SIP каналов с голосовым кодеком G.729 в публичную телефонную сеть без модуля подавления эха от Digium, и 150 каналов с голосовым кодеком G.729 при использовании модулей подавления эха компании Digium.

Если у Вас имеется очень большой трафик.

Scott Stingel www.evtmedia.com пишет:
Мой крупный клиент имел конфигурацию из 15 серверов asterisk, которая могла обрабатывать до 1800 одновременных вызовов с использованием системы голосового меню (IVR), Поступающих с большой местной АТС DMS-100, через 60 E1 каналов. Обычно, вызовы были очень короткими (5 секунд).

512 одновременных вызовов SIP--SIP с Цифровой записью разговоров.

Как использовать RAM диск для устранения дефицита ресурсов системы ввода/вывода, связанного с использованием цифровой записи вызовов с помощью функции Monitor.
Аппаратное обеспечение для сервера Asterisk: Quad Xeon MP CPU 3.16 GHz с 20 GB RAM.

Тестирование нагрузки - Zap каналы

Scott Stingel: Вы можете построить тестовую систему для Zap каналов в asterisk, с использованием .call файлов (смотри: sample.call). Вот, что было найдено:

(a) Я не думаю, что это управление очередью нормально работает, если существует ограничение на количество ресурсов, которые используются для совершения исходящих вызовов. Например, если Вы определите группу (например, "g9"), в которую входят две линии для совершения исходящих вызовов, все это будет работать прекрасно, если число одновременных исходящих вызовов никогда не будет превышать двух. Третий call-файл, в данном примере, будет прочитан сервером, но его обработка сразу же закончиться с ошибкой. Итак, я сделал механизм в моем Perl скрипте для гарантии того, что предыдущий вызов был полностью завершен - это было сначала не так то просто, т.к. я не знал точно, когда наступает этот момент, но обработка в perl скрипте этих событий делает данную задачу проще.

(b) Существует проблема, связанная с одновременным созданием файлов в директории для формирования исходящих вызовов. При более чем 12-15 исходящих вызовов одновременно, естественно, если есть достаточное число каналов для совершения исходящих вызовов. Asterisk будет считывать их, но не сможет обработать некоторые фалы. Это сценарий для тестирования производительности, и, наверно, не очень реалистичный, но кое-что он позволяет проверить. Это не очень критично было для меня, если я использовал более мощный процессор. Отметьте, что эта проблема возможно уже решена (смотри текст далее).

Jesse Janzer: Краткая заметка, Мы реализовали систему для пейджинга и одновременно размещали более чем 30 файлов в директории для исходящих вызовов (в процессе выполнения agi скрипта), для совершения вызовов, проблем замечено не было...

Возможность использования директории и помещения туда .call файлов для совершения исходящих вызовов работает нормально при небольших количествах вызовов, если Вы равномерно создаете файлы в этой директории.

Фишка: Вы можете управлять временем начала совершения исходящего вызова, установив значение параметра mtime в Вашем .call файле. Смотри пример простого скрипта по ссылке: http://www.fnords.org/~eric/asterisk.

Тестирование производительности карт Quad T1 - Digium против Sangoma


Тестирование нагрузки - IP каналы.

Juanjo: Не забудьте увеличить максимальное число файловых дескрипторов и RTP портов.
Используется приложение SIPP.

Тест 1:
Я достиг значения в 1500 одновременных SIP/GSM вызовов, на екстеншен, где используется приложение Echo, с периодичностью в 50 вызовов в секунду и продолжительностью в 10 секунд, при использовании машины с одним процессором Xeon 2.4Ghz. Так или иначе, но Я пытался создать более менее реальный сценарий, полагая, что команда Echo не сильно занимается обработкой звукового потока, а просто копирует его из входящего канала в исходящий.
В процессе тестирования Я мониторил сервер Asterisk используя аппарат Cisco 7960, прослушивая музыку ожидания (MusicOnHold), примерно при количестве одновременных вызовов 500-600 начали наблюдаться перерывы в проигрывании музыки ожидания.

Тест 2:
Я настроил клиента (UAC) на генерацию вызовов с частотой 10 вызовов в секунду и продолжительностью 10 секунд и соответствующих вызываемых абонентов (UAS), которые отвечали на эти вызовы. Команда, которая использовалась для генерации вызовов с использованием кодека GSM, была следующая:
sipp 192.168.65.100 -s 700 -sf uac.xml -d 10000 -r 10

Команда для приема вызовов на другом сервере была такая:
sipp -sf uas.xml

Я использовал свои файлы uac.xml и uas.xml для работы с кодеком GSM, Мониторя качество звука на моем телефоне: Cisco 7960, прослушивая музыку ожидания (MusicOnHold). На моем процессоре Xeon 2.4Ghz, все вызовы обрабатывались нормально, и не было ни каких проблем с качеством прослушиваемой музыки. Обратите внимание, что у меня использовались настройки: nat=yes и canreinvite=no для вызывающего и вызываемого клиента (UAC/UAS), в файле конфигурации sip.conf. Старые версии приложения SIPP не поддерживают авторизацию.

Однако: Я не видел никакого RTP трафика, который бы шел с SIPP в роли вызывающего клиента (UAC), это говорит, что Asterisk вообще не генерирует трафика, после того, как он синхронизируется с сеансом, по которому поступил вызов AFAIK. Таким образом, может быть эти тесты и не измеряют общую производительность Asterisk, а только возможности стека протокола SIP. Другое решение - это направление всех вызовов в екстеншен с приложеним MusicOnHold, тогда весь трафик будет проходить через сервер Asterisk, что даст более взвешенный и полный результат.


Olle E Johansson сообщает свои результаты тестирования - свыше 10 000 одновременных вызовов!

В процессе замены большой устаревшей системы Nortel на несколько современных 1U-2U серверов было проведено множество тестов производительности новой системы, чтобы ответить на вопрос - как много вызовов обрабатывает один Asterisk сервер, в пересчёте на удельную себестоимость в евро?

Сначала обычным образом была достигнута производительность примерно в 2000 каналов при G.711 (64 Кбит * 2000 = 128 Мбит) на одном quad core процессоре и сетевой карте Intel Pro/1000 на сервере IBM. На этом этапе наблюдалась неустойчивая работа балансировщика IRQ, что приводило к пропусканию всего траффика только через одно ядро процессора. Этот тест проделывался несколько раз на нескольких системах с различными сетевыми интерфейсами, для того чтобы различными способами повысить производительность - с другими драйверами, другими картами, другим аппаратным обеспечением, но все признаки говорили о том, что проблема лежит в области обработки сетевого трафика RTP Астериск посредством CPU. Что также подтверждалось несколькими другими независимыми группами разработчиков.

И для меня стало неожиданным приятным сюрпризом в понедельник (24 августа 2009), когда мы проинсталлировали простую рабочую версию Asterisk 1.4 на новый HP Proliant DL380 Generation 6 сервер, и сделали циклические тесты на старые сервера IBM. Три сервера запетлевали звонки между собой, и общее количество одновременных вызовов достигло таким образом 10 000 каналов без каких-либо проблем! Соединения SIP to SIP, в режиме point-2-point RTP bridge, в основном с проксированием медиа. На этот момент наш дешёвый гигабитный коммутатор работал на пределе возможностей, также и сетевые интерфейсы. Замеры показывали примерно до 850 Мбит траффика на порт, что более, чем достаточно. Все CPU (а их было 16 вместе с hyperthreading) не были даже в пиковой загрузке, Астериск занимал некоторую часть наиболее правильным образом, но было ещё достаточно резерва, чтобы ещё запустить какие-то другие процессы в обработку.


Замечания

Таблицы для расчета Erlang'а

Расчет количества внешних телефонных линий, которые могут Вам понадобиться,

Ссылки по теме:



Оригинал: http://www.voip-info.org/wiki/view/Asterisk+dimensioning


© 2008 — 2012 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH