Your SlideShare is downloading. ×
Механизмы C-extensions в Erlang
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

534
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
534
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. С-extensions в Erlang Щербак Илья инженер-программист Февраль 2013 www.eltex.nsk.ruсуббота, 9 февраля 13 г.
  • 2. Что делаем? или сервер видеоконференций (VCS) без батхертасуббота, 9 февраля 13 г.
  • 3. Задачи VCS • Обработка сигнальных потоков • Обработка медиа потоков (media processing)суббота, 9 февраля 13 г.
  • 4. Обработка медиа потока • депакетизация • декодирование • процессинг • кодирование • пакетизациясуббота, 9 февраля 13 г.
  • 5. Потоки данных в mp VCS одного потока H264/AVC 720p@30 decoder encoder депакетизатор-декодер ~2mbit/s декодер-микшер ~320mbit/s микшер-енкодер ~320mbit/s енкодер-пакетизатор ~2mbit/s rtpdepay rtppay Video mixerсуббота, 9 февраля 13 г.
  • 6. Erlang OTP Erlang? а почему бы и нет...суббота, 9 февраля 13 г.
  • 7. Erlang это • легкие, изолированные процессы (~600 байт) • иммутабельность данных • распределенность • Soft Realtime System • SMPсуббота, 9 февраля 13 г.
  • 8. Erlang – не панацея а жаль...суббота, 9 февраля 13 г.
  • 9. Си как средство для реализации вычислительных задач или средство реализации интерфейса к вычислителюсуббота, 9 февраля 13 г.
  • 10. Erlang как средство управления абстрактными вычислителямисуббота, 9 февраля 13 г.
  • 11. Методы Erlang extensions • port extensions • Erlang Distribution Protocol (EDP) • Native Implemented Function (NIF)суббота, 9 февраля 13 г.
  • 12. Методы взаимодействия через port • взаимодействие с внешним приложением • кастомный протокол или erl_interfaces • port driverсуббота, 9 февраля 13 г.
  • 13. Методы взаимодействия через Erlang DP • C-node • Go-node :)суббота, 9 февраля 13 г.
  • 14. Взаимодействия через NIFсуббота, 9 февраля 13 г.
  • 15. Взаимодействие с кодом vs взаимодействие с приложением скорость vs безопасность Erlang VMсуббота, 9 февраля 13 г.
  • 16. Взаимодействие с приложением process port data flow OS process Erlang VMсуббота, 9 февраля 13 г.
  • 17. Взаимодействие с кодом process shared library port Erlang VMсуббота, 9 февраля 13 г.
  • 18. Методы вызова Си кода Driver vs NIF NIF Driver контекст исполнение в исполнение в контексте контексте исполнения процесса порта представление internal external term данных structures format исполнения по обратному нативное вызову от кода исполнение события доступ к памяти прямой доступ через процесса к куче механизмы VMсуббота, 9 февраля 13 г.
  • 19. NIF & Driver & Scherduler NIF и Driver блокируют планировщиксуббота, 9 февраля 13 г.
  • 20. Что плохого в долгой блокировке • появляется латентность при реакции на события у процессов находящихся на планировщике • нагрузка становится менее равномерной • наблюдается лавинообразный рост памяти при разблокировке • архитектура Erlang VM подразумевает довольно частое переключение контекстов erlang процессов (reduction budget 2000 и не все BIF атомарны)суббота, 9 февраля 13 г.
  • 21. Борьба с long execution NIF Driver сделать выполнение долгой задачи прерываемым выносить исполнение в отдельную нить async thread poolсуббота, 9 февраля 13 г.
  • 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. Асинхронные 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. NIF – самый быстрый способ вызова Си кодасуббота, 9 февраля 13 г.
  • 25. Природа driver более асинхроннасуббота, 9 февраля 13 г.
  • 26. Если extension не стабилен – взаимодействие с кодом не для нассуббота, 9 февраля 13 г.
  • 27. Недостаток взаимодействия с приложением – оверхед на транспорт данных от вычислителя к Erlang VMсуббота, 9 февраля 13 г.
  • 28. Конец?суббота, 9 февраля 13 г.
  • 29. Не сейчас.суббота, 9 февраля 13 г.
  • 30. Shared memory lock-free доступ через private workspaceсуббота, 9 февраля 13 г.
  • 31. Из shared memory в Erlang VM zero-copy modeсуббота, 9 февраля 13 г.
  • 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. Устройство волшебных binary а также разница между binary, resource_binary и resourceсуббота, 9 февраля 13 г.
  • 34. Гибридная схема • NIF – управление памятью (пул из shm) • внешнее приложение – вычислительсуббота, 9 февраля 13 г.
  • 35. Гибридная схема Shared memory data process bin port data OS process Erlang VMсуббота, 9 февраля 13 г.
  • 36. Конец?суббота, 9 февраля 13 г.
  • 37. Дасуббота, 9 февраля 13 г.
  • 38. Спасибо за внимание С-extensions в Erlang Февраль 2013 www.eltex.nsk.ruсуббота, 9 февраля 13 г.

×