Lev Walkin (lionet) wrote,
Lev Walkin
lionet

Category:

К вопросу о быстродействии Erlang

Было интересно помассировать наш эрланговский код в нескольких измерениях.

1. Машины:
— Sun UltraSPARC IIi 650 MHz (PC133) (Sun Fire V120)
— PowerPC 1.5 GHz (166 MHz bus), (PowerBook G4)
— AMD 2x2 (два двухкорных) 2.2 GHz (серверное исполнение)
— Xeon 1x4 (четырёхъядерный) 2.66 GHz
2. Компилирование в нативный код (erlc +native) или в байт-код
3. Компилирование для SMP VM (erlc -smp)
4. Использование SMP VM (erl -smp enable/disable)

Задачи:

5. Lock: код на gen_server, исползующий ets[set, private] и порождающий процесс на каждый запрос.
6. TCP I/O: код, общающийся с memcached -m64 (для простоты) по единственному долгоиграющему соединению, и доступный через gen_server примитивы (rpc); также использует ets[set].

Варианты нагрузки задач:
— Sequential - последовательный вызов 10000 микротестов.
— Parallel - параллельный вызов 10000/N микротестов в N порожденных процессах, где N из {2,4,10,100}. Выбирались лучшие времена. Время порождения процессов не отбрасывалось.

Цифры в столбиках — вычисленное количество транзакций в секунду. На каждую цифру тест работал несколько секунд, и было произведено несколько прогонов чтобы выбрать лучший результат.



Выводы:

1. Поддержка SMP систем в Эрланге оставляет желать лучшего.
2. HiPE в Эрланге порождает нативный код, который в итоге медленнее байткода.
3. В долларах на TPS лидирует Intel Xeon (четыре ядра по 2.66 GHz)
4. В TPS на мегагерц лидирует Sun UltraSparc (1 процессор на 650 MHz)

Вопросы:

1. Где я что-то недопонял, недочитал, недооптимизировал?

UPD: Обновил табличку, далее JS-Kit, Erlang, Amazon EC2
Tags: erlang
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 3 comments