De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

" Copia cero " describe las operaciones de la computadora en las que la CPU no realiza la tarea de copiar datos de un área de memoria a otra. Esto se usa con frecuencia para ahorrar ciclos de CPU y ancho de banda de memoria cuando se transmite un archivo a través de una red. [1]

Principio [ editar ]

Las versiones de copia cero de los elementos del sistema operativo , como los controladores de dispositivos , los sistemas de archivos y las pilas de protocolos de red , aumentan en gran medida el rendimiento de ciertos programas de aplicación y utilizan los recursos del sistema de manera más eficiente. El rendimiento se mejora al permitir que la CPU pase a otras tareas mientras las copias de datos se realizan en paralelo en otra parte de la máquina. Además, las operaciones de copia cero reducen la cantidad de cambios de modo que consumen mucho tiempo entre el espacio del usuario y el espacio del kernel . Los recursos del sistema se utilizan de manera más eficiente ya que usar una CPU sofisticada para realizar operaciones de copia extensas, que es una tarea relativamente simple, es un desperdicio si otros componentes del sistema más simples pueden realizar la copia.

Por ejemplo, leer un archivo y luego enviarlo a través de una red de la forma tradicional requiere dos copias de datos y dos cambios de contexto por ciclo de lectura / escritura. Una de esas copias de datos usa la CPU. Enviar el mismo archivo a través de copia cero reduce los cambios de contexto a dos y elimina todas las copias de datos de la CPU. [1]

Los protocolos de copia cero son especialmente importantes para las redes de alta velocidad en las que la capacidad de un enlace de red se acerca o supera la capacidad de procesamiento de la CPU. En tal caso, la CPU pasa casi todo su tiempo copiando los datos transferidos y, por lo tanto, se convierte en un cuello de botella que limita la velocidad de comunicación por debajo de la capacidad del enlace. Una regla general utilizada en la industria es que se necesita aproximadamente un ciclo de reloj de CPU para procesar un bit de datos entrantes.

Implementaciones de hardware [ editar ]

Una implementación temprana fue IBM OS / 360 donde un programa puede instruir al subsistema de canal para que lea bloques de datos de un archivo o dispositivo en un búfer y escriba en otro desde el mismo búfer sin mover los datos.

Las técnicas para crear software de copia cero incluyen el uso de copia y mapeo de memoria basados ​​en acceso directo a memoria (DMA) a través de una unidad de administración de memoria (MMU). Estas características requieren soporte de hardware específico y generalmente involucran requisitos particulares de alineación de memoria.

Un enfoque más nuevo utilizado por la Arquitectura de sistemas heterogéneos (HSA) facilita el paso de punteros entre la CPU y la GPU y también otros procesadores. Esto requiere un espacio de direcciones unificado para la CPU y la GPU. [2] [3]

Acceso programático [ editar ]

Varios sistemas operativos admiten la copia cero de archivos a través de API específicas.

El kernel de Linux admite copia cero a través de varias llamadas al sistema , como

  • archivo de envío de sys / socket.h, sendfile64
  • empalme , tee, vmsplice
  • process_vm_readv, process_vm_writev
  • copy_file_range
  • sockets sin procesar con paquete mmap [4] o AF_XDP

Algunos de ellos están especificados en POSIX y, por lo tanto, también están presentes en los kernels BSD o IBM AIX , algunos son exclusivos de la API del kernel de Linux .

Microsoft Windows admite copia cero a través de la API TransmitFile.

macOS admite copia cero a través de la parte FreeBSD del kernel [ cita requerida ] .

Los flujos de entrada de Java pueden admitir copia cero a través del método transferTo () de java.nio.channels.FileChannel si el sistema operativo subyacente también admite copia cero. [5]

Los protocolos RDMA (Remote Direct Memory Access) se basan en gran medida en técnicas de copia cero.

Ver también [ editar ]

  • AF_XDP
  • Llamar por referencia
  • Controlador de dispositivo
  • Sistema Integrado
  • Infiniband
  • Localidad de referencia
  • NCOPY
  • netsniff-ng
  • Entrada / salida programada
  • Protocolo directo de socket

Referencias [ editar ]

  1. ^ a b Zero Copy I: perspectiva de modo de usuario en Linux Journal - 1 de enero de 2003
  2. ^ "La guía del programador de la galaxia APU" (PDF) .
  3. ^ "AMD describe la hoja de ruta de HSA: memoria unificada para CPU / GPU" . 2012-02-02.
  4. ^ "Documentación de Linux PACKET_MMAP" . kernel.org .
  5. ^ Transferencia de datos eficiente a través de copia cero por Sathish K. Palaniappan y Pramod B. Nagaraja. Septiembre de 2008