С-extensions в Erlang                              Щербак Илья                           инженер-программист   Февраль 201...
Что делаем?               или сервер видеоконференций (VCS) без батхертасуббота, 9 февраля 13 г.
Задачи VCS              •     Обработка сигнальных потоков              •     Обработка медиа потоков (media processing)су...
Обработка медиа потока              •     депакетизация              •     декодирование              •     процессинг    ...
Потоки данных в                                                  mp     VCS одного потока         H264/AVC         720p@30...
Erlang OTP                             Erlang?                           а почему бы и нет...суббота, 9 февраля 13 г.
Erlang это              •     легкие, изолированные процессы (~600 байт)              •     иммутабельность данных        ...
Erlang – не панацея                           а жаль...суббота, 9 февраля 13 г.
Си как средство для                       реализации                  вычислительных задач              или средство реали...
Erlang как средство           управления абстрактными                вычислителямисуббота, 9 февраля 13 г.
Методы Erlang                            extensions                •     port extensions                •     Erlang Distr...
Методы взаимодействия                через port              •     взаимодействие с внешним приложением                   ...
Методы взаимодействия              через Erlang DP              •     C-node              •     Go-node :)суббота, 9 февра...
Взаимодействия через                      NIFсуббота, 9 февраля 13 г.
Взаимодействие с кодом                         vs           взаимодействие с приложением                                 с...
Взаимодействие с                         приложением          process                           port                      ...
Взаимодействие с                            кодом          process                                  shared library        ...
Методы вызова Си кода               Driver vs NIF                                              NIF          Driver        ...
NIF & Driver &                              Scherduler                           NIF и Driver блокируют планировщиксуббота...
Что плохого в долгой                    блокировке              •     появляется латентность при реакции на события       ...
Борьба с long execution                                 NIF                    Driver                           сделать вы...
NIF preemptable                                  Erlang side                large_workload(Arg) ->                  case l...
Асинхронные NIF                                        Erlang side                           large_workload(Arg) ->       ...
NIF – самый быстрый            способ вызова Си кодасуббота, 9 февраля 13 г.
Природа driver более                    асинхроннасуббота, 9 февраля 13 г.
Если extension не стабилен –           взаимодействие с кодом не для нассуббота, 9 февраля 13 г.
Недостаток взаимодействия с            приложением – оверхед на              транспорт данных от             вычислителя к...
Конец?суббота, 9 февраля 13 г.
Не сейчас.суббота, 9 февраля 13 г.
Shared memory                           lock-free доступ через private workspaceсуббота, 9 февраля 13 г.
Из shared memory в       Erlang VM zero-copy modeсуббота, 9 февраля 13 г.
Кастомные аллокаторы              и деалокаторы в NIF           #define SIZE 100           ErlNifResourceType *resource;  ...
Устройство волшебных                   binary                  а также разница между binary, resource_binary и            ...
Гибридная схема              •     NIF – управление памятью (пул из shm)              •     внешнее приложение – вычислите...
Гибридная схема                                        Shared memory                                          data        ...
Конец?суббота, 9 февраля 13 г.
Дасуббота, 9 февраля 13 г.
Спасибо за внимание                           С-extensions в Erlang   Февраль 2013                                    www....
Upcoming SlideShare
Loading in …5
×

Механизмы C-extensions в Erlang

832 views
725 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
832
On SlideShare
0
From Embeds
0
Number of Embeds
132
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Механизмы C-extensions в Erlang

  1. 1. С-extensions в Erlang Щербак Илья инженер-программист Февраль 2013 www.eltex.nsk.ruсуббота, 9 февраля 13 г.
  2. 2. Что делаем? или сервер видеоконференций (VCS) без батхертасуббота, 9 февраля 13 г.
  3. 3. Задачи VCS • Обработка сигнальных потоков • Обработка медиа потоков (media processing)суббота, 9 февраля 13 г.
  4. 4. Обработка медиа потока • депакетизация • декодирование • процессинг • кодирование • пакетизациясуббота, 9 февраля 13 г.
  5. 5. Потоки данных в mp VCS одного потока H264/AVC 720p@30 decoder encoder депакетизатор-декодер ~2mbit/s декодер-микшер ~320mbit/s микшер-енкодер ~320mbit/s енкодер-пакетизатор ~2mbit/s rtpdepay rtppay Video mixerсуббота, 9 февраля 13 г.
  6. 6. Erlang OTP Erlang? а почему бы и нет...суббота, 9 февраля 13 г.
  7. 7. Erlang это • легкие, изолированные процессы (~600 байт) • иммутабельность данных • распределенность • Soft Realtime System • SMPсуббота, 9 февраля 13 г.
  8. 8. Erlang – не панацея а жаль...суббота, 9 февраля 13 г.
  9. 9. Си как средство для реализации вычислительных задач или средство реализации интерфейса к вычислителюсуббота, 9 февраля 13 г.
  10. 10. Erlang как средство управления абстрактными вычислителямисуббота, 9 февраля 13 г.
  11. 11. Методы Erlang extensions • port extensions • Erlang Distribution Protocol (EDP) • Native Implemented Function (NIF)суббота, 9 февраля 13 г.
  12. 12. Методы взаимодействия через port • взаимодействие с внешним приложением • кастомный протокол или erl_interfaces • port driverсуббота, 9 февраля 13 г.
  13. 13. Методы взаимодействия через Erlang DP • C-node • Go-node :)суббота, 9 февраля 13 г.
  14. 14. Взаимодействия через NIFсуббота, 9 февраля 13 г.
  15. 15. Взаимодействие с кодом vs взаимодействие с приложением скорость vs безопасность Erlang VMсуббота, 9 февраля 13 г.
  16. 16. Взаимодействие с приложением process port data flow OS process Erlang VMсуббота, 9 февраля 13 г.
  17. 17. Взаимодействие с кодом process shared library port Erlang VMсуббота, 9 февраля 13 г.
  18. 18. Методы вызова Си кода Driver vs NIF NIF Driver контекст исполнение в исполнение в контексте контексте исполнения процесса порта представление internal external term данных structures format исполнения по обратному нативное вызову от кода исполнение события доступ к памяти прямой доступ через процесса к куче механизмы VMсуббота, 9 февраля 13 г.
  19. 19. NIF & Driver & Scherduler NIF и Driver блокируют планировщиксуббота, 9 февраля 13 г.
  20. 20. Что плохого в долгой блокировке • появляется латентность при реакции на события у процессов находящихся на планировщике • нагрузка становится менее равномерной • наблюдается лавинообразный рост памяти при разблокировке • архитектура Erlang VM подразумевает довольно частое переключение контекстов erlang процессов (reduction budget 2000 и не все BIF атомарны)суббота, 9 февраля 13 г.
  21. 21. Борьба с long execution NIF Driver сделать выполнение долгой задачи прерываемым выносить исполнение в отдельную нить async thread poolсуббота, 9 февраля 13 г.
  22. 22. NIF preemptable Erlang side large_workload(Arg) -> case large_workload_nif(Arg) of {continue, Reductions, NewState} -> erlang:bump_reductions(Reductions), large_workload(NewState); {done, Reductions, Result} -> erlang:bump_reductions(Reductions), Result end.суббота, 9 февраля 13 г.
  23. 23. Асинхронные NIF Erlang side large_workload(Arg) -> case large_workload_nif(Arg) of {ok,wait}-> wait_result(); busy -> {error,resource_busy} end. wait_result()-> receive {done,Result}-> Result; end;суббота, 9 февраля 13 г.
  24. 24. NIF – самый быстрый способ вызова Си кодасуббота, 9 февраля 13 г.
  25. 25. Природа driver более асинхроннасуббота, 9 февраля 13 г.
  26. 26. Если extension не стабилен – взаимодействие с кодом не для нассуббота, 9 февраля 13 г.
  27. 27. Недостаток взаимодействия с приложением – оверхед на транспорт данных от вычислителя к Erlang VMсуббота, 9 февраля 13 г.
  28. 28. Конец?суббота, 9 февраля 13 г.
  29. 29. Не сейчас.суббота, 9 февраля 13 г.
  30. 30. Shared memory lock-free доступ через private workspaceсуббота, 9 февраля 13 г.
  31. 31. Из shared memory в Erlang VM zero-copy modeсуббота, 9 февраля 13 г.
  32. 32. Кастомные аллокаторы и деалокаторы в NIF #define SIZE 100 ErlNifResourceType *resource; static ERL_NIF_TERM sample_nif_function(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]){ void *data = enif_alloc_resource(resource, SIZE); return enif_make_resource(env, data); } static void x264_destructor(ErlNifEnv *env, void *obj){} static int load(ErlNifEnv *env, void **priv, ERL_NIF_TERM load_info){ resource = enif_open_resource_type(env, NULL, "resource", custom_destructor, ERL_NIF_RT_CREATE, NULL); return 0; }суббота, 9 февраля 13 г.
  33. 33. Устройство волшебных binary а также разница между binary, resource_binary и resourceсуббота, 9 февраля 13 г.
  34. 34. Гибридная схема • NIF – управление памятью (пул из shm) • внешнее приложение – вычислительсуббота, 9 февраля 13 г.
  35. 35. Гибридная схема Shared memory data process bin port data OS process Erlang VMсуббота, 9 февраля 13 г.
  36. 36. Конец?суббота, 9 февраля 13 г.
  37. 37. Дасуббота, 9 февраля 13 г.
  38. 38. Спасибо за внимание С-extensions в Erlang Февраль 2013 www.eltex.nsk.ruсуббота, 9 февраля 13 г.

×