Còpia zero

operacions de l'ordinador que no copien la memòria

"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 modifica

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 modifica

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 modifica

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 modifica

  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].