Нулевая копия - Zero-copy
эта статья может быть слишком техническим для большинства читателей, чтобы понять. Пожалуйста помогите улучшить это к Сделайте это понятным для неспециалистов, не снимая технических деталей. (Июнь 2016) (Узнайте, как и когда удалить этот шаблон сообщения) |
"Нулевая копия"описывает компьютерные операции, в которых ЦПУ не выполняет задачу копирования данных с одного объем памяти область в другую. Это часто используется для экономии циклов процессора и пропускной способности памяти при передаче файла по сети.[1]
Принцип
Нулевые копии Операционная система элементы, такие как драйверы устройств, файловые системы, и стеки сетевых протоколов, значительно повышают производительность некоторых прикладных программ и более эффективно используют системные ресурсы. Производительность повышается, позволяя ЦП переходить к другим задачам, в то время как копии данных выполняются параллельно в другой части машины. Кроме того, операции нулевого копирования сокращают количество трудоемких переключений между режимами. пространство пользователя и пространство ядра. Системные ресурсы используются более эффективно, поскольку использование сложного процессора для выполнения обширных операций копирования, что является относительно простой задачей, является расточительным, если другие более простые системные компоненты могут выполнять копирование.
Например, для чтения файла с последующей отправкой его по сети традиционным способом требуется две копии данных и два переключения контекста на цикл чтения / записи. Одна из этих копий данных использует ЦП. Отправка того же файла через нулевую копию сокращает переключение контекста до двух и исключает все копии данных ЦП.[1]
Протоколы с нулевым копированием особенно важны для высокоскоростных сетей, в которых пропускная способность сетевого канала приближается к вычислительной мощности центрального процессора или превышает ее. В таком случае ЦП тратит почти все свое время на копирование передаваемых данных и, таким образом, становится узким местом, которое ограничивает скорость передачи данных ниже пропускной способности канала. В отрасли используется практическое правило: для обработки одного бита входящих данных требуется примерно один такт процессора.
Аппаратные реализации
Ранняя реализация была IBM OS / 360 где программа может проинструктировать канальная подсистема для чтения блоков данных из одного файла или устройства в буфер и писать в другой из того же буфера, не перемещая данные.
Методы создания программного обеспечения с нулевым копированием включают использование прямой доступ к памяти (DMA) на основе копирования и отображения памяти через блок управления памятью (MMU). Эти функции требуют специальной аппаратной поддержки и обычно включают особые требования к выравниванию памяти.
Новый подход, используемый Гетерогенная системная архитектура (HSA) облегчает прохождение указатели между ЦПУ и GPU а также другие процессоры. Это требует единое адресное пространство для CPU и GPU.[2][3]
Программный доступ
Некоторые операционные системы поддерживают нулевое копирование файлов через определенные API.
В Ядро Linux поддерживает нулевое копирование через различные системные вызовы, такие как
- файл отправки sys / socket.h, sendfile64
- сращивание, тройник, vmsplice
- process_vm_readv, process_vm_writev
- copy_file_range
- сырые сокеты с пакетом mmap[4] или AF_XDP
Некоторые из них указаны в POSIX и поэтому также присутствует в BSD ядра или IBM AIX, некоторые уникальны для API ядра Linux.
Майкрософт Виндоус поддерживает нулевое копирование через TransmitFile API.
macOS поддерживает нулевое копирование через часть ядра FreeBSD[нужна цитата ].
Ява входные потоки могут поддерживать нулевое копирование с помощью метода transferTo () java.nio.channels.FileChannel, если базовая операционная система также поддерживает нулевое копирование.[5]
RDMA Протоколы (Remote Direct Memory Access) в значительной степени полагаются на методы нулевого копирования.
Смотрите также
- AF_XDP
- Звоните по ссылке
- Драйвер устройства
- Встроенная система
- Infiniband
- Местоположение ссылки
- NCOPY
- netsniff-ng
- Программируемый ввод / вывод
- Протокол Socket Direct
использованная литература
- ^ а б Zero Copy I: перспектива пользовательского режима в Linux Journal - 1 января 2003 г.
- ^ «Путеводитель программиста по галактике APU» (PDF).
- ^ «AMD излагает план развития HSA: унифицированная память для CPU / GPU». 2012-02-02.
- ^ "Документация Linux PACKET_MMAP". kernel.org.
- ^ Эффективная передача данных через нулевое копирование Сатиш К. Паланиаппан и Прамод Б. Нагараджа. Сентябрь 2008 г.