Weitere ähnliche Inhalte Ähnlich wie 1Hippeus - zerocopy messaging по законам Спарты, Леонид Юрьев (ПЕТЕР-СЕРВИС) (20) Kürzlich hochgeladen (20) 1Hippeus - zerocopy messaging по законам Спарты, Леонид Юрьев (ПЕТЕР-СЕРВИС)2. StarWars
^
| *---+
||
|| +-----+
|| | | +-------+
|| | | | | +---------> 1000,000K
0=| | | | | | msg/sec
|| | | | | |
|| | | | +--------+
|| | +------+
|+----+
|
v
BitMining 4. XYZ
+---------+ +--------------+ +-----------+
| NGINX | | LINUX KERNEL | | TARANTOOL|
|---------| |--------------| |-----------|
| | | | | |
| | | | | |
+---------+ +--------------+ +-----------+
+--------------------------------------------+
| |
| RAM, a lofof... |
| DMA_RING|
+--------------------------------------------+
+--------------------------------------------+
| PCI Express |
+--------------------------------------------+
+-----+ +------+ +-------+ +----------+
| NIC | | DISK | | GPU | | Xeon Phi |
+-----+ +------+ +-------+ +----------+
xyz
xyz
xyz 9. +----------+
| PRODUCER|
|----------|
| push() |
+----------+
||
/
+----------+
| |
| QUEUE|
| |
+----------+
||
/
+----------+
| pull() |
|----------|
| CONSUMER|
+----------+ ↔ ↔ ↔ 10. +----------+
| PRODUCER|
|----------|
| push() |
+----------+
||
/
+----------+
| |
| QUEUE|
| |
+----------+
||
/
+----------+
| pull() |
|----------|
| CONSUMER|
+----------+ 11. HOST_A
HOST_B
+----------+ SHARED MEMORY #1
| PRODUCER| +-------+
| push() | ==>> | QUEUE|
+----------+ +-------+
||
/
+-----------+
| pull() |
| TRANSPORT|
| push() |
+-----------+
||
/
+-------+ +----------+
| QUEUE| ==>> | CONSUMER|
+-------+ | pull() |
SHARED MEMORY #2 +----------+ 12. +---------+ +--------+
| 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 |
+--------+ 13. TAGGET_POINTER:= pointer | flags
+---------+
| POINTER |
|---------|
| | ALIEN
| bit_0 | SLIM
| bit_1 | => PARCEL
| bit_2 | INCORPOREAL
| | ...
| bit_3 |
| ... | +--------+
| | ------------->| BUFFER |
| | / |--------|
| | / | |
+---------+ | data |
| |
+--------+ 14. +-------------+ +-------------+ +-------------+
| 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();
| | };
| |
+-------------+ 15. SERVERCOMMON / 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 .... .... .... |
+--------+ +----------------+ +----------------------+ 16. t1h::thread_assign_policy(HIPPEUS_WAITFREE);
v
|
+---------+ |
| TLS| |
|---------| |
| policy| <-----------+
+----index|
| +---------+
|
|
| +---------------------------
| | QUEUE
| |-------------------------
| |
| | +------------+
+---->| ACTOR SLOT|
| |------------|
| | futex|
| | tid|
| | ... |
| +------------+
|
| 17. void my_service::process(t1h::junction &io)
{
t1h::batcher batch(io);
while(msg= batch.pull()) {
/* ... */
batch.push(msg); ----------------+
} |
/* batcher's destructorhere */ |
} |
|
|
commit/flush* |
| +---------------+ |
| | ON STACK FIFO |<---+
| +---------------+
v
+-------+
| QUEUE |
+-------+ 19. +-------------------------------------+
| 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|
+----------+ +------------+|| +----+ +----+
+------------+|
+------------+ 20. +----------+ +----------+
| JUNCTION | | JUNCTION |
|----------| |----------|
| | | |
| in <<<<<<<<<<<QUEUE<<<<<<<<<<< out |
| | | |
| out >>>>>>>>>>>QUEUE>>>>>>>>>>>in|
| | | |
| allot ------------+ +----------allot |
| | | | | |
| options| | | | options|
| | v v| |
+----------+ +-------------+ +----------+
| ALLOCATOR |
|-------------|
| BUF BUFBUF|
| BUF BUFBUF|
| |
| BUF BUFBUF|
| BUF BUFBUF|
+-------------+
•
•
•
• 22. +----------1 +----------1
| PRODUCER |2 | CONSUMER |2
|----------||3 |----------||3
| push()|||4 | pull()|||4
+----------+||| +----------+|||
+----------+|| +----------+||
+----------+| +----------+|
+----------+ +----------+
v ^
| |
| |
| +-------+ |
| | QUEUE| |
| |-------| |
+-------> | | >------+
| |
+-------+ 25. •R&D подразделение в Сколково
•решения для крупных операторов связи: BSS,Telcoprotocols, BigData, HA & Highload
•≈ 21 годполного цикла: разработка, внедрение и сопровождение
•более 100 миллионов абонентовобслуживается при участии наших систем
http://www.billing.ru