Илья Щербак, Eltex
description
Transcript of Илья Щербак, Eltex
Управление вычислительным кластером DSP процессоров на
Erlang Илья Щербак
I. Intro
С чего все начиналось?
Особенности специализированных вычислителей
• Различные архитектуры (DSP, GPU, FPGA, ARM, etc)
• Сложность разработки• Сложность отладки• Низкий уровень• Высокие требования к разработчику
– Как этого избежать?
– Как этого избежать?– Никак.
– Зачем это нужно?
– Зачем это нужно?– Решение специализированных задач более эффективно.
Когда это нужно
• Нужно повысить вычислительную плотность
• Нужно сэкономить на энергопотреблении• GPP не справляется с этой задачей или решение на GPP слишком дорого
Что хорошо делать на DSP
• Цифровая обработка сигналов• Анализ изображений• Обработка видео
Чего стоит избегать
• Бизнес логика на вычислителях• Монолитность системы
Модульная архитектура
• DSP выполняет узкоспециализированную задачу
• DSP могут быть скоммутированы произвольным образом
• Бизнес-логика системы находится на уровне хоста
DSP – специализированный вычислитель
The UNIX K.I.S.S.Простые части через прозрачный интерфейс
II. Actor model and Erlang
Особенности модели акторов
• Интефейс обмена сообщениями• Динамическое порождение других акторов• Изоляция данных внутри актора, отсутствие shared state
Модель акторов хорошо подходит для concurency систем
Erlang как реализация модели акторов
Особенности Erlang VM
• Очень дешевые процессы• Легкие байнари• Развитые extentions механизмы
• Сборщик мусора на каждый Erlang процесс (никакого Stop-World)
Erlang process как интерфейс к вычислителю
III. Cluster structure
Вычислительная частьTI TMS320C6678
Core Pack
• 8 ядер 1025 MGz
• 8 функциональных модулей на ядро
• VLIW (Very long instruction world) архитектура
• L1/L2 configurable cache
On-Chip Memory
• 256 KB L1 Program Memory/Cache
• 256 KB L1 Data Memory/Cache
• 4096 KB L2 Memory/Cache
• 4096 KB MSM
Peripherals• EMIF
• EDMA3
• SRIO
• PCIe
• Ethernet
• HyperLink
• TSIP
• SPI
• UART
• I2C
• GPIO
16 Features Copyright 2012 Texas Instruments Incorporated
SPRS691C—February 2012Multicore Fixed and Floating-Point Digital Signal ProcessorTMS320C6678
www.ti.com
1.3 Functional Block Diagram
Figure 1-1 shows the functional block diagram of the TMS320C6678 device. Figure 1-1 Functional Block Diagram
8 Cores @ up to 1.25 GHz
PowerManagement
Debug & Trace
Boot ROM
Semaphore
SR
IO4
!
PC
Ie2
!
UA
RT
TS
IP!
2
SP
I
IC
2
PacketDMA
Multicore Navigator
QueueManager
GP
IO
!3
PLL
EDMA
!3
EM
IF16
4MBMSM
SRAM
64-BitDDR3 EMIF
Memory Subsystem
MSMC
C66xCorePac
32KB L1P-Cache
32KB L1D-Cache
512KB L2 Cache
TeraNetHyperLink TeraNet
Network Coprocessor
Sw
itch
Eth
ern
et
Sw
itch
SG
MII
2!
PacketAccelerator
SecurityAccelerator
Peripherals use in cluster
• EMIF
• EDMA3
• PCIe
DSP programm
SYS/BIOS
• Real-time OS
• Управление памятью• Механизмы шедулинга
• Механизмы синхронизации
• Инструменты мониторинга и отладки
Транспортная частьPCI-E/DMA/MSI
PCIe
• Соединение точка-точка• Транзакционный протокол
Peripheral Component Interconnect
DMA
• Транспорт данных через EDMA для снижения нагрузки на хост/DSP
Direct Memory Access
MSI
• Отсутствие гонок • Расширенный набор векторов прерывания
Message Signalled Interrupt
IV. Driver interface
Функции драйвера
• Загрузка DSP
• Предоставление интерфейса к DSP
Boot protocol
Processprotocol
Implemented interfaces
• read/write – для синхронных операций
• mmap/ioctl/poll – для асинхронных запросов
V. Erlang interface
Взаимодействие с кодомvs
взаимодействие с приложениемСкорость
vsБезопасность VM
Erlang extentions
• Port extentions
• Port Driver
• Erlang DP
• NIF (Native Implemented Function)
Почему NIF – самый быстрый extention механизм
• Прямой вызов функции, как BIF
• Исполнение в контексте Erlang process
• Использование внутренних структур данных VM
• Прямой доступ к Heap процесса
NIF only
Erlang VM
DSP DSP
driver_lib.soHost
ClusterDSP DSP
Гибридная схема
• NIF – как интерфейс доступа к Shared Memory
• Port extention – как интерфейс доступа к вычислителю
Гибридная схема
Erlang VMOS Process
shm_lib.so
DSP DSP
shm_lib.so
Host
ClusterDSP DSP
Zero-copy mode илиMagic binary
Erlang binary resource
Кастомные аллокаторы в Erlang
#define SIZE 100ErlNifResourceType *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 custom_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;}
Потоки данных в системе
ProcessProducer
ProcessConsumer
Erlang VM
– реальный поток
– логический поток
– Erlang Port
Erlang VM как тонкий коммутатор
Erlang VM
OS
HostDSP cluster
App App App
Peripherials
VI. Shared memory framework
Задачи SHM framework
• Аллокация shared memory
• Серилизация/десерилизация• Получение объекта по id
Shared memory allocationBuddy memory allocation
Lock free memory accessCAS operators
VII. Coda
Основные идеи доклада
• Управляющая логика на Erlang
• Программа на DSP небольшая, хорошо выполняет определенную задачу
• Система на Erlang нужным образом коммутирует DSP
• При данной декомпозиции системы вычислитель легко заменяется, так как логика работает с ним как с черным ящиком