Нулевое копирование

редактировать

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

Содержание
  • 1 Принцип
  • 2 Аппаратные реализации
  • 3 Программный доступ
  • 4 См. также
  • 5 Ссылки
Принцип

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

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

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

Аппаратные реализации

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

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

Новый подход, используемый Гетерогенной системной архитектурой (HSA), упрощает передачу указателей между CPU и GPU., а также другие процессоры. Для этого требуется единое адресное пространство для CPU и GPU.

Программный доступ

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

Ядро Linux поддерживает нулевое копирование с помощью различных системных вызовов, таких как файл sendfile

  • sys / socket.h, sendfile64
  • splice, tee, vmsplice
  • process_vm_readv, process_vm_writev
  • copy_file_range
  • сырые сокеты с пакетом mmap или AF_XDP

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

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

macOS поддерживает нулевое копирование через часть ядра FreeBSD.

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

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

См. Также
Ссылки
Последняя правка сделана 2021-06-23 08:37:06
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте