Zero-copy: ликбез

ANNA Systems
Dec 21, 2018 · 6 min read
  • Передающее приложение каждый раз кладёт данные в свой буфер, после чего делает системный вызов к ядру,
  • Ядро копирует в ядерное пространство буфер (хотя в некоторых операционных системах возможны встроенные оптимизации этого процесса) и производит его обработку (в случае с TCP/IP-стеком обработка может быть очень затратной),
  • Ядро переносит буфер в буферную зону памяти оконечного принимающего приложения, после чего инициализирует смену контекста в данное приложение.
  • Далее приложения инициализируют определенный канал связи (IPC, UNIX-сокет или даже сетевой сокет) для обмена сигналами о передачи данных.
  • После этого происходит сама передача, которая теперь происходит куда проще и быстрее: первое приложение отправляет второму данные просто положив их в свой буфер, и далее вызвав ядро для уведомления второго приложения о необходимости прочитать данные из буфера.
  • Ядро переключает контекст на себя, а затем на конечное (второе) приложение, уведомив его о новых данных в общем буфере. Второе приложение обрабатывает буфер.
  1. Многие приложения также используют вывод своих буферов изображений своих окон напрямую в память графической карты (используя изолированные виртуальные основные теневые и задние буферы, а также вызов к ядру для инициализации копирования из оперативной памяти CPU в оперативную память GPU), уведомляя композитный менеджер лишь об изменениях (используя OpenGL и DRI).
  2. Композитный менеджер использует OpenGL и DRI для наложения друг на друга изолированных буферов приложений при помощи шейдеров на самой видеокарте средствами GPU.

Автор:

Симакин Владимир Андреевич,

ИТ-Архитектор ANNA Systems

ANNA Systems

Hyperscale Blockchain GRID protocol of the fractal infrastructure

ANNA Systems

Written by

#Hyperscale Blockchain GRID protocol of the fractal infrastructure. Revolutionary changing #HPC and #Blockchain markets

ANNA Systems

Hyperscale Blockchain GRID protocol of the fractal infrastructure