Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

« Нулевое копирование » описывает компьютерные операции, в которых ЦП не выполняет задачу копирования данных из одной области памяти в другую. Это часто используется для экономии циклов процессора и пропускной способности памяти при передаче файла по сети. [1]

Принцип [ править ]

Нулевые копии элементов операционной системы , таких как драйверы устройств , файловые системы и стеки сетевых протоколов , значительно повышают производительность некоторых прикладных программ и более эффективно используют системные ресурсы. Производительность повышается, позволяя ЦП переходить к другим задачам, в то время как копии данных выполняются параллельно в другой части машины. Кроме того, операции нулевого копирования сокращают количество трудоемких переключений между пользовательским пространством и пространством ядра . Системные ресурсы используются более эффективно, поскольку использование сложного ЦП для выполнения обширных операций копирования, что является относительно простой задачей, является расточительным, если другие более простые компоненты системы могут выполнять копирование.

Например, для чтения файла и последующей его отправки по сети традиционным способом требуется две копии данных и два переключения контекста на цикл чтения / записи. Одна из этих копий данных использует ЦП. Отправка одного и того же файла через нулевую копию сокращает переключение контекста до двух и исключает все копии данных ЦП. [1]

Протоколы с нулевым копированием особенно важны для высокоскоростных сетей, в которых пропускная способность сетевого канала приближается к вычислительной мощности центрального процессора или превышает ее. В таком случае ЦП тратит почти все свое время на копирование переданных данных и, таким образом, становится узким местом, которое ограничивает скорость передачи данных ниже пропускной способности канала. Практическое правило, используемое в отрасли, заключается в том, что для обработки одного бита входящих данных требуется примерно один такт процессора.

Аппаратные реализации [ править ]

Ранней реализацией была IBM OS / 360, где программа могла инструктировать подсистему канала читать блоки данных из одного файла или устройства в буфер и записывать в другой из того же буфера без перемещения данных.

Методы создания программного обеспечения с нулевым копированием включают использование копирования на основе прямого доступа к памяти (DMA) и отображение памяти через блок управления памятью (MMU). Эти функции требуют специальной аппаратной поддержки и обычно связаны с особыми требованиями к выравниванию памяти.

Новый подход, используемый в гетерогенной системной архитектуре (HSA), облегчает передачу указателей между CPU и GPU, а также другими процессорами. Это требует единого адресного пространства для ЦП и ГП. [2] [3]

Программный доступ [ править ]

Некоторые операционные системы поддерживают нулевое копирование файлов через определенные API.

В Linux Kernel поддерживает нуль-копии с помощью различных системных вызовов , таких как

  • Файл отправки sys / socket.h, sendfile64
  • сращивание , тройник, vmsplice
  • process_vm_readv, process_vm_writev
  • copy_file_range
  • сырые сокеты с пакетом mmap [4] или AF_XDP

Некоторые из них указаны в POSIX и, следовательно, также присутствуют в ядрах BSD или IBM AIX , некоторые являются уникальными для API ядра Linux .

Microsoft Windows поддерживает нулевое копирование через TransmitFile API.

macOS поддерживает нулевое копирование через часть ядра FreeBSD [ необходима цитата ] .

Входные потоки Java могут поддерживать нулевое копирование с помощью метода transferTo () java.nio.channels.FileChannel, если базовая операционная система также поддерживает нулевое копирование. [5]

Протоколы RDMA (удаленный прямой доступ к памяти) в значительной степени полагаются на методы нулевого копирования.

См. Также [ править ]

  • AF_XDP
  • Звоните по ссылке
  • Драйвер устройства
  • Встроенная система
  • Infiniband
  • Местонахождение ссылки
  • NCOPY
  • netsniff-ng
  • Программируемый ввод / вывод
  • Протокол Socket Direct

Ссылки [ править ]

  1. ^ a b Zero Copy I: перспектива пользовательского режима в Linux Journal - 1 января 2003 г.
  2. ^ "Руководство программиста по галактике APU" (PDF) .
  3. ^ «AMD излагает план развития HSA: унифицированная память для CPU / GPU» . 2012-02-02.
  4. ^ "Документация Linux PACKET_MMAP" . kernel.org .
  5. ^ Эффективная передача данных через нулевую копию Сатиш К. Паланиаппан и Прамод Б. Нагараджа. Сентябрь 2008 г.