Jump to content

Нулевая копия

(Перенаправлено из ввода-вывода в режиме LOCATE )

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

с нулевым копированием Методы программирования могут использоваться при обмене данными внутри процесса пользовательского пространства (т. е. между двумя или более потоками и т. д.) и/или между двумя или более процессами (см. также проблему производитель-потребитель ) и/или когда данные должны быть быть доступными, скопированными или перемещенными внутри пространства ядра или между процессом пользовательского пространства и частями пространства ядра операционных систем (ОС).

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

Если данные необходимо скопировать или переместить из источника в место назначения, и оба они расположены внутри пространства ядра (т. е. два файла, файл и сетевая карта и т. д.), то ненужные данные копируются из пространства ядра в пространство пользователя и из пространства пользователя в пространство пользователя. пространства ядра можно избежать, используя специальные системные вызовы (с нулевым копированием), обычно доступные в последних версиях популярных операционных систем.

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

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

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

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

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

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

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

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

Программные интерфейсы

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

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

Здесь перечислены лишь несколько хорошо известных системных вызовов/API, доступных в большинстве популярных ОС.

Novell NetWare поддерживает форму нулевого копирования с помощью блоков управления событиями (ECB), см. NCOPY .

Внутренняя . команда COPY в некоторых версиях DR-DOS, начиная с 1992 года, также инициирует это, когда COMMAND.COM обнаруживает, что файлы, подлежащие копированию, хранятся на файловом сервере NetWare [7] в противном случае происходит возврат к обычному копированию файлов .Внешняя , команда MOVE начиная с DR DOS 6.0 (1991 г.) и MS-DOS 6.0 (1993 г.), внутренне выполняет RENAME (вызывая только записей каталога изменение в файловой системе вместо физического копирования данных файла), когда источник и место назначения совпадают. расположены на одном логическом томе. [8]

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

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

FreeBSD , NetBSD , OpenBSD , DragonFly BSD и т. д. поддерживают нулевое копирование, по крайней мере, посредством следующих системных вызовов:

  • отправить файл; [17]
  • писать, [18] писать [19] + ммап [20] при записи данных в сетевой сокет.

MacOS должна поддерживать нулевое копирование через часть ядра FreeBSD, поскольку она предлагает те же системные вызовы (а ее страницы руководства по-прежнему имеют тег BSD), такие как:

  • отправить файл. [21]

Oracle Solaris поддерживает нулевое копирование, по крайней мере, посредством следующих системных вызовов:

Microsoft Windows поддерживает нулевое копирование, по крайней мере, с помощью этого системного вызова:

  • ПередатьФайл. [27]

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

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

См. также

[ редактировать ]
  1. ^ Jump up to: а б Станцевич, Драган (1 января 2003 г.). «Нулевая копия I: перспектива пользовательского режима» . www.linuxjournal.com . Проверено 14 октября 2021 г.
  2. ^ Jump up to: а б Брёзе, Эдуард (01 января 2012 г.). «ZeroCopy: методы, преимущества и подводные камни». CiteSeerX   10.1.1.93.9589 . {{cite journal}}: Для цитирования журнала требуется |journal= ( помощь )
  3. ^ Jump up to: а б Сун, Цзя; Алвес-Фосс, Джим (1 января 2012 г.). «Обзор эффективности методов нулевого копирования» (PDF) . www.uidaho.edu . Проверено 14 октября 2021 г.
  4. ^ Jump up to: а б Болдуин, Джон (01 мая 2020 г.). «Разгрузка TLS в ядре» (PDF) . freebsdfoundation.org . Проверено 14 октября 2021 г.
  5. ^ «Путеводитель программиста по галактике APU» (PDF) .
  6. ^ «AMD описывает дорожную карту HSA: унифицированная память для CPU/GPU» . 2 февраля 2012 г.
  7. ^ «Комплект машиночитаемого исходного кода Caldera OpenDOS (MRS) 7.01» . Кальдера, Инк ., 1 мая 1997 г. Архивировано из оригинала 07 августа 2021 г. Проверено 02 января 2022 г. [1] (Примечание. Фактически реализовано после DR DOS «Panther» 22 июня 1992 г., см. COMCPY.C/DOSIF.ASM в исходниках COMMAND.COM OpenDOS 7.01 .)
  8. ^ Пол, Матиас Р. (30 июля 1997 г.) [1 мая 1994 г.]. «II.4. Недокументированные свойства внешних команд: MOVE.EXE». NWDOS-TIPs — Советы и рекомендации по Novell DOS 7 с учетом недокументированных подробностей, ошибок и обходных путей . Выпуск 157 (на немецком языке) (3-е изд.). Архивировано из оригинала 10 сентября 2017 г. Проверено 6 августа 2014 г. {{cite book}}: |work= игнорируется ( помощь ) (Примечание. NWDOSTIP.TXT — это всеобъемлющая работа по Novell DOS 7 и OpenDOS 7.01, включая описание многих недокументированных функций и внутренних устройств. Это часть еще более обширной работы автора. MPDOSTIP.ZIP Коллекция сохранялась до 2001 года и в то время распространялась на многих сайтах. Предоставленная ссылка указывает на более старую версию файла, преобразованную в HTML. NWDOSTIP.TXT файл.) [2]
  9. ^ «sendfile(2) — страница руководства Linux» . man7.org . 22 марта 2021 г. Проверено 13 октября 2021 г.
  10. ^ «splice(2) — страница руководства Linux» . man7.org . 22 марта 2021 г. Проверено 13 октября 2021 г.
  11. ^ «tee(2) — страница руководства Linux» . man7.org . 22 марта 2021 г. Проверено 13 октября 2021 г.
  12. ^ «vmsplice(2) — страница руководства Linux» . man7.org . 22 марта 2021 г. Проверено 13 октября 2021 г.
  13. ^ «process_vm_readv(2) — страница руководства Linux» . man7.org . 22 марта 2021 г. Проверено 13 октября 2021 г.
  14. ^ «process_vm_writev(2) — страница руководства Linux» . man7.org . 22 марта 2021 г. Проверено 13 октября 2021 г.
  15. ^ «copy_file_range(2) — страница руководства Linux» . man7.org . 22 марта 2021 г. Проверено 13 октября 2021 г.
  16. ^ «Документация Linux PACKET_MMAP» . ядро.орг .
  17. ^ «sendfile(2) — страницы руководства FreeBSD» . www.freebsd.org . 30 апреля 2020 г. Проверено 13 октября 2021 г.
  18. ^ «write(2) — страницы руководства FreeBSD» . www.freebsd.org . 30 апреля 2020 г. Проверено 13 октября 2021 г.
  19. ^ «writev(2) — страницы руководства по FreeBSD» . www.freebsd.org . 30 апреля 2020 г. Проверено 13 октября 2021 г.
  20. ^ «mmap(2) — страницы руководства FreeBSD» . www.freebsd.org . 30 апреля 2020 г. Проверено 13 октября 2021 г.
  21. ^ «sendfile(2) — страница руководства Mac OS X» . разработчик.apple.com . 31 марта 2006 г. Проверено 13 октября 2021 г.
  22. ^ «sendfile(3C) — страницы руководства по Solaris» . docs.oracle.com . 13 августа 2021 г. Проверено 13 октября 2021 г.
  23. ^ «sendfilev(3C) — страницы руководства по Solaris» . docs.oracle.com . 13 августа 2021 г. Проверено 13 октября 2021 г.
  24. ^ «write(2) — страницы руководства по Solaris» . docs.oracle.com . 13 августа 2021 г. Проверено 13 октября 2021 г.
  25. ^ "writev(2) — страницы руководства по Solaris" . docs.oracle.com . 13 августа 2021 г. Проверено 13 октября 2021 г.
  26. ^ «mmap(2) — страницы руководства по Solaris» . docs.oracle.com . 13 августа 2021 г. Проверено 13 октября 2021 г.
  27. ^ «Функция TransmitFile (Win32)» . docs.microsoft.com . 10 мая 2021 г. Проверено 13 октября 2021 г.
  28. ^ Паланиаппан, Сатиш К.; Нагараджа, Прамод Б. (2 сентября 2008 г.). «Нулевая копия Java» . разработчик.ibm.com . Проверено 13 октября 2021 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: faa5f603c355e5a226c6a8104f851cb3__1715168340
URL1:https://arc.ask3.ru/arc/aa/fa/b3/faa5f603c355e5a226c6a8104f851cb3.html
Заголовок, (Title) документа по адресу, URL1:
Zero-copy - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)