Còpia zero

"Còpia zero" descriu les operacions de l'ordinador en què la CPU no realitza la tasca de copiar dades d'una àrea de memòria a una altra o en les quals s'eviten còpies de dades innecessàries. Això s'utilitza amb freqüència per estalviar cicles de CPU i amplada de banda de memòria en moltes tasques que consumeixen molt de temps, com per exemple quan es transmet un fitxer a gran velocitat a través d'una xarxa, etc., millorant així el rendiment dels programes (processos) executats per un ordinador.[1]

Principi

Les tècniques de programació de còpia zero es poden utilitzar quan s'intercanvien dades dins d'un procés d'espai d'usuari (és a dir, entre dos o més fils, etc.) i/o entre dos o més processos (vegeu també el problema productor-consumidor) i/o quan les dades s'han de s'hi pot accedir/copiar/desplaçar dins de l'espai del nucli o entre un procés d'espai d'usuari i parts de l'espai del nucli dels sistemes operatius (SO).[2]

En general, quan un procés d'espai d'usuari ha d'executar operacions del sistema com llegir o escriure dades des d'un dispositiu (és a dir, un disc, una NIC, etc.) a través de les seves interfícies de programari d'alt nivell o com moure dades d'un dispositiu a un altre, etc., ha de realitzar una o més trucades al sistema que després el sistema operatiu executa a l'espai del nucli.

Si les dades s'han de copiar o moure de l'origen a la destinació i totes dues es troben dins de l'espai del nucli (és a dir, dos fitxers, un fitxer i una targeta de xarxa, etc.), llavors les còpies de dades innecessàries, de l'espai del nucli a l'espai d'usuari i de l'espai d'usuari a l'espai d'usuari. L'espai del nucli, es pot evitar mitjançant l'ús de trucades especials (de còpia zero), normalment disponibles en les versions més recents dels sistemes operatius populars.[3]

Implementacions de maquinari

Una implementació primerenca va ser IBM OS/360 on un programa pot indicar al subsistema de canals perquè llegeixi blocs de dades d'un fitxer o dispositiu en una memòria intermèdia i escrigui en un altre des del mateix buffer sense moure les dades.

Les tècniques per crear programari de còpia zero inclouen l'ús de la còpia basada en l'accés directe a la memòria (DMA) i l'assignació de memòria mitjançant una unitat de gestió de memòria (MMU). Aquestes característiques requereixen suport de maquinari específic i solen implicar requisits d'alineació de memòria particulars.

Un enfocament més nou utilitzat per l'Arquitectura de sistema heterogeni (HSA) facilita el pas de punters entre la CPU i la GPU i també altres processadors. Això requereix un espai d'adreces unificat per a la CPU i la GPU.[4]

Interfícies del programa

El nucli de Linux admet la còpia zero mitjançant diverses trucades al sistema, com ara:

  • enviarfitxer, enviarfitxer64;
  • empalmament;
  • samarreta;
  • vmsplice;
  • process_vm_readv;
  • process_vm_writev;
  • copy_file_range;
  • endolls en brut amb paquet mmap o AF_XDP.


Alguns d'ells s'especifiquen a POSIX i, per tant, també estan presents als nuclis BSD o IBM AIX, alguns són exclusius de l' API del nucli de Linux.

Microsoft Windows admet la còpia zero mitjançant almenys aquesta trucada al sistema:

  • TransmetFile.

Referències

  1. «IBM Developer» (en anglès). [Consulta: 10 setembre 2023].
  2. Tony. «Linux — Zero Copy» (en anglès), 23-08-2022. [Consulta: 10 setembre 2023].
  3. «Improve file download efficiency with Zero Copy» (en anglès), 13-03-2022. [Consulta: 10 setembre 2023].
  4. «Improving Streaming Application Performance with Zero-copy and Asynchronous TDMS» (en anglès). [Consulta: 10 setembre 2023].