1hippeus - zerocopy messaging по законам Спарты, Леонид Юрьев...

26

Upload: ontico

Post on 15-Jun-2015

404 views

Category:

Internet


0 download

DESCRIPTION

Доклад Леонида Юрьева на HighLoad++ 2014.

TRANSCRIPT

Page 1: 1Hippeus -  zerocopy messaging по законам Спарты, Леонид Юрьев (ПЕТЕР-СЕРВИС)
Page 2: 1Hippeus -  zerocopy messaging по законам Спарты, Леонид Юрьев (ПЕТЕР-СЕРВИС)

StarWars

^| *---+| || | +-----+| | | | +-------+| | | | | | +---------> 1000,000K

0 = | | | | | | msg/sec| | | | | | || | | | | +--------+| | | +------+| +----+|v

BitMining

Page 3: 1Hippeus -  zerocopy messaging по законам Спарты, Леонид Юрьев (ПЕТЕР-СЕРВИС)

Page 4: 1Hippeus -  zerocopy messaging по законам Спарты, Леонид Юрьев (ПЕТЕР-СЕРВИС)

XYZ

+---------+ +--------------+ +-----------+| NGINX | | LINUX KERNEL | | TARANTOOL ||---------| |--------------| |-----------|| | | | | || | | | | |+---------+ +--------------+ +-----------+

+--------------------------------------------+| || RAM, a lof of... || DMA_RING |+--------------------------------------------++--------------------------------------------+| PCI Express |+--------------------------------------------+

+-----+ +------+ +-------+ +----------+| NIC | | DISK | | GPU | | Xeon Phi |+-----+ +------+ +-------+ +----------+

xyz xyz xyz

Page 5: 1Hippeus -  zerocopy messaging по законам Спарты, Леонид Юрьев (ПЕТЕР-СЕРВИС)

3. MPI

4. ØMQ, nanomsg, …

Page 6: 1Hippeus -  zerocopy messaging по законам Спарты, Леонид Юрьев (ПЕТЕР-СЕРВИС)
Page 7: 1Hippeus -  zerocopy messaging по законам Спарты, Леонид Юрьев (ПЕТЕР-СЕРВИС)
Page 8: 1Hippeus -  zerocopy messaging по законам Спарты, Леонид Юрьев (ПЕТЕР-СЕРВИС)

≈ 2

• libt1h.1.0.so

Page 9: 1Hippeus -  zerocopy messaging по законам Спарты, Леонид Юрьев (ПЕТЕР-СЕРВИС)

+----------+| PRODUCER ||----------|| push() |+----------+

||\/

+----------+| || QUEUE || |+----------+

||\/

+----------+| pull() ||----------|| CONSUMER |+----------+

↔ ↔ ↔

Page 10: 1Hippeus -  zerocopy messaging по законам Спарты, Леонид Юрьев (ПЕТЕР-СЕРВИС)

+----------+| PRODUCER ||----------|| push() |+----------+

||\/

+----------+| || QUEUE || |+----------+

||\/

+----------+| pull() ||----------|| CONSUMER |+----------+

Page 11: 1Hippeus -  zerocopy messaging по законам Спарты, Леонид Юрьев (ПЕТЕР-СЕРВИС)

HOST_A

HOST_B

+----------+ SHARED MEMORY #1| PRODUCER | +-------+| push() | ==>> | QUEUE |+----------+ +-------+

||\/

+-----------+| pull() || TRANSPORT || push() |+-----------+

||\/

+-------+ +----------+| QUEUE | ==>> | CONSUMER |+-------+ | pull() |

SHARED MEMORY #2 +----------+

Page 12: 1Hippeus -  zerocopy messaging по законам Спарты, Леонид Юрьев (ПЕТЕР-СЕРВИС)

+---------+ +--------+| QUEUE | | BUFFER ||---------| | || 0 | | begin##|| 0 | |########| +--------+

TAIL-> PTR------->|####end | | BUFFER || PTR | +--------+ | || ... | | begin##|| PTR------->+--------+ |########|

HEAD-> 0 | | BUFFER | |########|| 0 | | chunk1----->|####end || 0 | | chunk2 | +--------+| 0 | | ... |+---------+ | chunkN----->+--------+

| | | BUFFER |+--------+ | |

| begin##||####end |+--------+

Page 13: 1Hippeus -  zerocopy messaging по законам Спарты, Леонид Юрьев (ПЕТЕР-СЕРВИС)

TAGGET_POINTER := pointer | flags

+---------+| POINTER ||---------|| | ALIEN| bit_0 | SLIM| bit_1 | => PARCEL| bit_2 | INCORPOREAL| | ...| bit_3 | \| ... | \ +--------+| | ------------->| BUFFER || | / |--------|| | / | |+---------+ | data |

| |+--------+

Page 14: 1Hippeus -  zerocopy messaging по законам Спарты, Леонид Юрьев (ПЕТЕР-СЕРВИС)

+-------------+ +-------------+ +-------------+| 1) SOLID | | 2) INDIRECT | | 3) WEAK ||-------------| |-------------| |-------------|| ref_counter | | ref_counter | | ref_counter || tag | | tag | | tag || _data >---------+ | _data >---------+ | _data >-----|--> ?..| | | +-------------+ | | VMT || ----------- | | | +----------+--+| |<--+ +-----------+ | || | | | | || space | | sk_buff |<--+ v| | | | class my_buffer| | +-----------+ : public T1H::buffer {| || || | virtual ~my_buffer();| | };| |+-------------+

Page 15: 1Hippeus -  zerocopy messaging по законам Спарты, Леонид Юрьев (ПЕТЕР-СЕРВИС)

SERVER COMMON / SHARED+--------+ +----------------+| OBJECT | = CreateObject(TypeId, ------>| BINDER ||--------| "libprovider.so"); |----------------|| Body |<----------------------------------------| || TypeId | | TypeId || Handle >----------------+ | Handle |+--------+ | | libprovider.so |

| | Body ---------------+| | | || | | v

CLIENT | | +----------------------++--------+ v | | OBJECT's SHARED BODY || OBJECT | = TakeObject(Handle); ----------------->| |----------------------||--------| | | oxoo .... .... .... || TypeId |<------------------------------o---------| | xxox .... .... .... || Body | | +--| oooo .... .... .... || Handle | +----------------+ | | || Code |<---| libprovider.so |<--load--+ | data .... .... .... |+--------+ +----------------+ +----------------------+

Page 16: 1Hippeus -  zerocopy messaging по законам Спарты, Леонид Юрьев (ПЕТЕР-СЕРВИС)

t1h::thread_assign_policy(HIPPEUS_WAITFREE);v|

+---------+ || TLS | ||---------| || policy | <-----------+

+----index || +---------+||| +---------------------------| | QUEUE| |-------------------------| || | +------------++---->| ACTOR SLOT |

| |------------|| | futex || | tid || | ... || +------------+||

Page 17: 1Hippeus -  zerocopy messaging по законам Спарты, Леонид Юрьев (ПЕТЕР-СЕРВИС)

void my_service::process(t1h::junction &io){

t1h::batcher batch(io);

while(msg = batch.pull()) {/* ... */batch.push(msg); ----------------+

} |/* batcher's destructor here */ |

} |||

commit/flush * || +---------------+ || | ON STACK FIFO |<---+| +---------------+v

+-------+| QUEUE |+-------+

Page 18: 1Hippeus -  zerocopy messaging по законам Спарты, Леонид Юрьев (ПЕТЕР-СЕРВИС)
Page 19: 1Hippeus -  zerocopy messaging по законам Спарты, Леонид Юрьев (ПЕТЕР-СЕРВИС)

+-------------------------------------+| ALLOT ||-------------------------------------|| battery |

+---------+ +---------+ +---------+| DEPOT_1 | | DEPOT_2 | | DEPOT16 ||---------| |---------| ... |---------|| 256 | | 512 | | 16M |+---------+ +---------+ +---------+

+----------+ +------------+ +----+ +----+| BASKET_1 | | ACTOR SLOT |+ |TILE| |TILE||----------|+ |------------||+ |----|...|----|| usual || | |||+ | | | |+----------+|+ | CACHE FIFO |||| +----+ +----+| reserve || | ........ ||||+----------+|+ | ..BBBBBB |||| +----+ +----+|dedicated || | BBBBB... |||| |TILE| |TILE|+----------+| | |||| |----|...|----|| offline | +------------+||| |BBBB| |BBBB|+----------+ +------------+|| +----+ +----+

+------------+|+------------+

Page 20: 1Hippeus -  zerocopy messaging по законам Спарты, Леонид Юрьев (ПЕТЕР-СЕРВИС)

+----------+ +----------+| JUNCTION | | JUNCTION ||----------| |----------|| | | || in <<<<<<<<<<< QUEUE <<<<<<<<<<< out || | | || out >>>>>>>>>>> QUEUE >>>>>>>>>>> in || | | || allot ------------+ +---------- allot || | | | | || options | | | | options || | v v | |+----------+ +-------------+ +----------+

| ALLOCATOR ||-------------|| BUF BUF BUF || BUF BUF BUF || || BUF BUF BUF || BUF BUF BUF |+-------------+

Page 21: 1Hippeus -  zerocopy messaging по законам Спарты, Леонид Юрьев (ПЕТЕР-СЕРВИС)
Page 22: 1Hippeus -  zerocopy messaging по законам Спарты, Леонид Юрьев (ПЕТЕР-СЕРВИС)

+----------1 +----------1| PRODUCER |2 | CONSUMER |2|----------||3 |----------||3| push() |||4 | pull() |||4+----------+||| +----------+|||+----------+|| +----------+||+----------+| +----------+|+----------+ +----------+

v ^| || || +-------+ || | QUEUE | || |-------| |+-------> | | >------+

| |+-------+

Page 23: 1Hippeus -  zerocopy messaging по законам Спарты, Леонид Юрьев (ПЕТЕР-СЕРВИС)
Page 24: 1Hippeus -  zerocopy messaging по законам Спарты, Леонид Юрьев (ПЕТЕР-СЕРВИС)

ØMQ,

Page 25: 1Hippeus -  zerocopy messaging по законам Спарты, Леонид Юрьев (ПЕТЕР-СЕРВИС)

• R&D подразделение в Сколково

• решения для крупных операторов связи:BSS, Telco protocols, BigData, HA & Highload

• ≈ 21 год полного цикла:разработка, внедрение и сопровождение

• более 100 миллионов абонентовобслуживается при участии наших систем

http://www.billing.ru

Page 26: 1Hippeus -  zerocopy messaging по законам Спарты, Леонид Юрьев (ПЕТЕР-СЕРВИС)

https://github.com/1Hippeus