SlideShare a Scribd company logo
1 of 38
Download to read offline
С-extensions в Erlang



                              Щербак Илья
                           инженер-программист



   Февраль 2013                                  www.eltex.nsk.ru
суббота, 9 февраля 13 г.
Что делаем?
               или сервер видеоконференций (VCS) без батхерта




суббота, 9 февраля 13 г.
Задачи VCS




              •     Обработка сигнальных потоков
              •     Обработка медиа потоков (media processing)




суббота, 9 февраля 13 г.
Обработка медиа потока


              •     депакетизация
              •     декодирование
              •     процессинг
              •     кодирование
              •     пакетизация



суббота, 9 февраля 13 г.
Потоки данных в
                                                  mp
     VCS одного потока
         H264/AVC
         720p@30
                                        decoder        encoder
     депакетизатор-декодер ~2mbit/s
     декодер-микшер      ~320mbit/s
     микшер-енкодер      ~320mbit/s
     енкодер-пакетизатор ~2mbit/s
                                       rtpdepay        rtppay


                                      Video mixer


суббота, 9 февраля 13 г.
Erlang OTP




                             Erlang?
                           а почему бы и нет...




суббота, 9 февраля 13 г.
Erlang это

              •     легкие, изолированные процессы (~600 байт)
              •     иммутабельность данных
              •     распределенность
              •     Soft Realtime System
              •     SMP



суббота, 9 февраля 13 г.
Erlang – не панацея
                           а жаль...




суббота, 9 февраля 13 г.
Си как средство для
                       реализации
                  вычислительных задач
              или средство реализации интерфейса к вычислителю




суббота, 9 февраля 13 г.
Erlang как средство
           управления абстрактными
                вычислителями


суббота, 9 февраля 13 г.
Методы Erlang
                            extensions

                •     port extensions
                •     Erlang Distribution Protocol (EDP)
                •     Native Implemented Function (NIF)




суббота, 9 февраля 13 г.
Методы взаимодействия
                через port

              •     взаимодействие с внешним приложением
                       •   кастомный протокол или erl_interfaces
              •     port driver




суббота, 9 февраля 13 г.
Методы взаимодействия
              через Erlang DP

              •     C-node
              •     Go-node :)




суббота, 9 февраля 13 г.
Взаимодействия через
                      NIF




суббота, 9 февраля 13 г.
Взаимодействие с кодом
                         vs
           взаимодействие с приложением
                                 скорость
                                    vs
                           безопасность Erlang VM




суббота, 9 февраля 13 г.
Взаимодействие с
                         приложением
          process

                           port

                                  data flow

                                               OS
                                             process
         Erlang VM



суббота, 9 февраля 13 г.
Взаимодействие с
                            кодом
          process
                                  shared library
                           port




         Erlang VM



суббота, 9 февраля 13 г.
Методы вызова Си кода
               Driver vs NIF
                                              NIF          Driver
                             контекст      исполнение в   исполнение в
                                             контексте      контексте
                            исполнения       процесса         порта
                           представление      internal    external term
                              данных         structures      format

                            исполнения                    по обратному
                                             нативное
                                                            вызову от
                               кода         исполнение
                                                             события
                       доступ к памяти     прямой доступ     через
                          процесса             к куче    механизмы VM

суббота, 9 февраля 13 г.
NIF & Driver &
                              Scherduler
                           NIF и Driver блокируют планировщик




суббота, 9 февраля 13 г.
Что плохого в долгой
                    блокировке
              •     появляется латентность при реакции на события
                    у процессов находящихся на планировщике
              •     нагрузка становится менее равномерной
              •     наблюдается лавинообразный рост памяти при
                    разблокировке

              •     архитектура Erlang VM подразумевает довольно
                    частое переключение контекстов erlang
                    процессов (reduction budget 2000 и не все BIF
                    атомарны)

суббота, 9 февраля 13 г.
Борьба с long execution

                                 NIF                    Driver

                           сделать выполнение долгой задачи прерываемым



                               выносить исполнение в отдельную нить



                                                      async thread pool



суббота, 9 февраля 13 г.
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 г.
Асинхронные 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 г.
NIF – самый быстрый
            способ вызова Си кода



суббота, 9 февраля 13 г.
Природа driver более
                    асинхронна



суббота, 9 февраля 13 г.
Если extension не стабилен –
           взаимодействие с кодом не для нас




суббота, 9 февраля 13 г.
Недостаток взаимодействия с
            приложением – оверхед на
              транспорт данных от
             вычислителя к Erlang VM



суббота, 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;
           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 г.
Устройство волшебных
                   binary
                  а также разница между binary, resource_binary и
                                    resource




суббота, 9 февраля 13 г.
Гибридная схема


              •     NIF – управление памятью (пул из shm)
              •     внешнее приложение – вычислитель




суббота, 9 февраля 13 г.
Гибридная схема
                                        Shared memory
                                          data
          process          bin

                                 port
                                                        data

                                                      OS
                                                    process
         Erlang VM



суббота, 9 февраля 13 г.
Конец?



суббота, 9 февраля 13 г.
Да



суббота, 9 февраля 13 г.
Спасибо за внимание



                           С-extensions в Erlang




   Февраль 2013                                    www.eltex.nsk.ru
суббота, 9 февраля 13 г.

More Related Content

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

Алексей Туля - А нужен ли вам erlang?
Алексей Туля - А нужен ли вам erlang?Алексей Туля - А нужен ли вам erlang?
Алексей Туля - А нужен ли вам erlang?Minsk Linux User Group
 
Макс Лапшин - "EventMachine и evented архитектура"
Макс Лапшин - "EventMachine и evented архитектура"Макс Лапшин - "EventMachine и evented архитектура"
Макс Лапшин - "EventMachine и evented архитектура"railsclub
 
Антон Тюрин — Облачная платформа Cocaine — облако своими руками
Антон Тюрин — Облачная платформа Cocaine — облако своими рукамиАнтон Тюрин — Облачная платформа Cocaine — облако своими руками
Антон Тюрин — Облачная платформа Cocaine — облако своими рукамиYandex
 
[jeeconf-2011] Java Platform Performance BoF
[jeeconf-2011] Java Platform Performance BoF[jeeconf-2011] Java Platform Performance BoF
[jeeconf-2011] Java Platform Performance BoFAleksey Shipilev
 
“Чем хорош Erlang вообще и для веб-разработки в частности?”

“Чем хорош Erlang вообще и для веб-разработки в частности?”
“Чем хорош Erlang вообще и для веб-разработки в частности?”

“Чем хорош Erlang вообще и для веб-разработки в частности?”
Olga Lavrentieva
 
Разработка сетевых приложений с gevent
Разработка сетевых приложений с geventРазработка сетевых приложений с gevent
Разработка сетевых приложений с geventAndrey Popp
 
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решения
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решенияДмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решения
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решенияFProg
 
REPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикREPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикIT61
 
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4rit2011
 
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest
 
Опыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхОпыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхVasil Remeniuk
 
Eventmachine: структура evented-приложений
Eventmachine: структура evented-приложенийEventmachine: структура evented-приложений
Eventmachine: структура evented-приложенийАлександр Ежов
 
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
 PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо... PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...it-people
 
Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистя...
Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистя...Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистя...
Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистя...Serguei Gitinsky
 
Мой modern Perl (весенняя встреча Piter United)
Мой modern Perl (весенняя встреча Piter United)Мой modern Perl (весенняя встреча Piter United)
Мой modern Perl (весенняя встреча Piter United)Alex Chistyakov
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализацияYandex
 
F# функциональный язык "новой" волны
F# функциональный язык "новой" волныF# функциональный язык "новой" волны
F# функциональный язык "новой" волныArtem Prysyazhnuk
 

Similar to Механизмы C-extensions в Erlang (18)

Алексей Туля - А нужен ли вам erlang?
Алексей Туля - А нужен ли вам erlang?Алексей Туля - А нужен ли вам erlang?
Алексей Туля - А нужен ли вам erlang?
 
Макс Лапшин - "EventMachine и evented архитектура"
Макс Лапшин - "EventMachine и evented архитектура"Макс Лапшин - "EventMachine и evented архитектура"
Макс Лапшин - "EventMachine и evented архитектура"
 
Антон Тюрин — Облачная платформа Cocaine — облако своими руками
Антон Тюрин — Облачная платформа Cocaine — облако своими рукамиАнтон Тюрин — Облачная платформа Cocaine — облако своими руками
Антон Тюрин — Облачная платформа Cocaine — облако своими руками
 
[jeeconf-2011] Java Platform Performance BoF
[jeeconf-2011] Java Platform Performance BoF[jeeconf-2011] Java Platform Performance BoF
[jeeconf-2011] Java Platform Performance BoF
 
Erlang ruby
Erlang rubyErlang ruby
Erlang ruby
 
“Чем хорош Erlang вообще и для веб-разработки в частности?”

“Чем хорош Erlang вообще и для веб-разработки в частности?”
“Чем хорош Erlang вообще и для веб-разработки в частности?”

“Чем хорош Erlang вообще и для веб-разработки в частности?”

 
Разработка сетевых приложений с gevent
Разработка сетевых приложений с geventРазработка сетевых приложений с gevent
Разработка сетевых приложений с gevent
 
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решения
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решенияДмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решения
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решения
 
REPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикREPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчик
 
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4что и почему вы должны программировать на Erlang.максим лапшин. зал 4
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
 
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
 
Опыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхОпыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событиях
 
Eventmachine: структура evented-приложений
Eventmachine: структура evented-приложенийEventmachine: структура evented-приложений
Eventmachine: структура evented-приложений
 
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
 PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо... PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
 
Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистя...
Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистя...Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистя...
Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистя...
 
Мой modern Perl (весенняя встреча Piter United)
Мой modern Perl (весенняя встреча Piter United)Мой modern Perl (весенняя встреча Piter United)
Мой modern Perl (весенняя встреча Piter United)
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализация
 
F# функциональный язык "новой" волны
F# функциональный язык "новой" волныF# функциональный язык "новой" волны
F# функциональный язык "новой" волны
 

More from DevDay

«Bdd и реактивщина в 2ГИС», Евгений Тютюев
«Bdd и реактивщина в 2ГИС», Евгений Тютюев«Bdd и реактивщина в 2ГИС», Евгений Тютюев
«Bdd и реактивщина в 2ГИС», Евгений ТютюевDevDay
 
«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин
«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин
«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий МузюкинDevDay
 
«Я спросил у сервера...», Илья Пастушков
«Я спросил у сервера...», Илья Пастушков«Я спросил у сервера...», Илья Пастушков
«Я спросил у сервера...», Илья ПастушковDevDay
 
Фреймворк Slot, Good Parts, Александр Бирюков
Фреймворк Slot, Good Parts, Александр БирюковФреймворк Slot, Good Parts, Александр Бирюков
Фреймворк Slot, Good Parts, Александр БирюковDevDay
 
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковРендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковDevDay
 
Inversion of Control в деталях, Дмитрий Кожевников
Inversion of Control в деталях, Дмитрий КожевниковInversion of Control в деталях, Дмитрий Кожевников
Inversion of Control в деталях, Дмитрий КожевниковDevDay
 
«Используем неизменяемые данные и создаем качественный код», Игорь Кудрин
«Используем неизменяемые данные и создаем качественный код», Игорь Кудрин«Используем неизменяемые данные и создаем качественный код», Игорь Кудрин
«Используем неизменяемые данные и создаем качественный код», Игорь КудринDevDay
 
«Велогосипед», Данил Ильиных
«Велогосипед», Данил Ильиных«Велогосипед», Данил Ильиных
«Велогосипед», Данил ИльиныхDevDay
 
«Процесс создания продукта», Максим Берёзкин
«Процесс создания продукта», Максим Берёзкин«Процесс создания продукта», Максим Берёзкин
«Процесс создания продукта», Максим БерёзкинDevDay
 
«Вывод продукта на новых территориях», Елизавета Алексеенко
«Вывод продукта на новых территориях», Елизавета Алексеенко«Вывод продукта на новых территориях», Елизавета Алексеенко
«Вывод продукта на новых территориях», Елизавета АлексеенкоDevDay
 
Манипулятор на Ti Stellaris Launchpad, Лёша Романенко
Манипулятор на Ti Stellaris Launchpad, Лёша РоманенкоМанипулятор на Ti Stellaris Launchpad, Лёша Романенко
Манипулятор на Ti Stellaris Launchpad, Лёша РоманенкоDevDay
 
Лабиринт на Arduino, Вадим Ипполитов
Лабиринт на Arduino, Вадим ИпполитовЛабиринт на Arduino, Вадим Ипполитов
Лабиринт на Arduino, Вадим ИпполитовDevDay
 
«Хоба-хоба и в продакшн», Женя Пономарёв
«Хоба-хоба и в продакшн», Женя Пономарёв«Хоба-хоба и в продакшн», Женя Пономарёв
«Хоба-хоба и в продакшн», Женя ПономарёвDevDay
 
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев «Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев DevDay
 
«Роль исследований в формировании продуктового видения компании», Лиза Алексе...
«Роль исследований в формировании продуктового видения компании», Лиза Алексе...«Роль исследований в формировании продуктового видения компании», Лиза Алексе...
«Роль исследований в формировании продуктового видения компании», Лиза Алексе...DevDay
 
«Тестируем веб приложения», Павел Сташевский
«Тестируем веб приложения», Павел Сташевский«Тестируем веб приложения», Павел Сташевский
«Тестируем веб приложения», Павел СташевскийDevDay
 
«Открытая веб картография», Илья Таратухин
«Открытая веб картография», Илья Таратухин«Открытая веб картография», Илья Таратухин
«Открытая веб картография», Илья ТаратухинDevDay
 
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис РечкуновDevDay
 
Матвей Мальков «Ещё один поиск контактов на Android»
Матвей Мальков «Ещё один поиск контактов на Android»Матвей Мальков «Ещё один поиск контактов на Android»
Матвей Мальков «Ещё один поиск контактов на Android»DevDay
 
Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»DevDay
 

More from DevDay (20)

«Bdd и реактивщина в 2ГИС», Евгений Тютюев
«Bdd и реактивщина в 2ГИС», Евгений Тютюев«Bdd и реактивщина в 2ГИС», Евгений Тютюев
«Bdd и реактивщина в 2ГИС», Евгений Тютюев
 
«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин
«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин
«Интеграция push-уведомлений в Яндекс.Браузер под iOS», Юрий Музюкин
 
«Я спросил у сервера...», Илья Пастушков
«Я спросил у сервера...», Илья Пастушков«Я спросил у сервера...», Илья Пастушков
«Я спросил у сервера...», Илья Пастушков
 
Фреймворк Slot, Good Parts, Александр Бирюков
Фреймворк Slot, Good Parts, Александр БирюковФреймворк Slot, Good Parts, Александр Бирюков
Фреймворк Slot, Good Parts, Александр Бирюков
 
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковРендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей Солодовников
 
Inversion of Control в деталях, Дмитрий Кожевников
Inversion of Control в деталях, Дмитрий КожевниковInversion of Control в деталях, Дмитрий Кожевников
Inversion of Control в деталях, Дмитрий Кожевников
 
«Используем неизменяемые данные и создаем качественный код», Игорь Кудрин
«Используем неизменяемые данные и создаем качественный код», Игорь Кудрин«Используем неизменяемые данные и создаем качественный код», Игорь Кудрин
«Используем неизменяемые данные и создаем качественный код», Игорь Кудрин
 
«Велогосипед», Данил Ильиных
«Велогосипед», Данил Ильиных«Велогосипед», Данил Ильиных
«Велогосипед», Данил Ильиных
 
«Процесс создания продукта», Максим Берёзкин
«Процесс создания продукта», Максим Берёзкин«Процесс создания продукта», Максим Берёзкин
«Процесс создания продукта», Максим Берёзкин
 
«Вывод продукта на новых территориях», Елизавета Алексеенко
«Вывод продукта на новых территориях», Елизавета Алексеенко«Вывод продукта на новых территориях», Елизавета Алексеенко
«Вывод продукта на новых территориях», Елизавета Алексеенко
 
Манипулятор на Ti Stellaris Launchpad, Лёша Романенко
Манипулятор на Ti Stellaris Launchpad, Лёша РоманенкоМанипулятор на Ti Stellaris Launchpad, Лёша Романенко
Манипулятор на Ti Stellaris Launchpad, Лёша Романенко
 
Лабиринт на Arduino, Вадим Ипполитов
Лабиринт на Arduino, Вадим ИпполитовЛабиринт на Arduino, Вадим Ипполитов
Лабиринт на Arduino, Вадим Ипполитов
 
«Хоба-хоба и в продакшн», Женя Пономарёв
«Хоба-хоба и в продакшн», Женя Пономарёв«Хоба-хоба и в продакшн», Женя Пономарёв
«Хоба-хоба и в продакшн», Женя Пономарёв
 
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев «Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев
«Бегущий по лезвию. Продуктовые сценарии в дизайне», Макс Карпылев
 
«Роль исследований в формировании продуктового видения компании», Лиза Алексе...
«Роль исследований в формировании продуктового видения компании», Лиза Алексе...«Роль исследований в формировании продуктового видения компании», Лиза Алексе...
«Роль исследований в формировании продуктового видения компании», Лиза Алексе...
 
«Тестируем веб приложения», Павел Сташевский
«Тестируем веб приложения», Павел Сташевский«Тестируем веб приложения», Павел Сташевский
«Тестируем веб приложения», Павел Сташевский
 
«Открытая веб картография», Илья Таратухин
«Открытая веб картография», Илья Таратухин«Открытая веб картография», Илья Таратухин
«Открытая веб картография», Илья Таратухин
 
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
 
Матвей Мальков «Ещё один поиск контактов на Android»
Матвей Мальков «Ещё один поиск контактов на Android»Матвей Мальков «Ещё один поиск контактов на Android»
Матвей Мальков «Ещё один поиск контактов на Android»
 
Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»
 

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

  • 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 г.
  • 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 г.
  • 38. Спасибо за внимание С-extensions в Erlang Февраль 2013 www.eltex.nsk.ru суббота, 9 февраля 13 г.