Nulové kopírování - Zero-copy

"Nulové kopírování"popisuje operace počítače, ve kterých procesor neprovádí úlohu kopírování dat z jednoho Paměť oblast do jiné. Toto se často používá k uložení cyklů CPU a šířky pásma paměti při přenosu souboru po síti.[1]

Zásada

Verze s nulovým kopírováním operační systém prvky, jako např ovladače zařízení, souborové systémy, a stohy síťových protokolů, výrazně zvýšit výkon určitých aplikačních programů a efektivněji využívat systémové prostředky. Výkon se zvyšuje tím, že se CPU umožní přejít na další úkoly, zatímco kopírování dat probíhá paralelně v jiné části stroje. Také operace nulového kopírování snižují počet časově náročných přepínání režimů mezi nimi uživatelský prostor a prostor jádra. Systémové prostředky jsou využívány efektivněji, protože použití sofistikovaného CPU k provádění rozsáhlých kopírovacích operací, což je relativně jednoduchý úkol, je zbytečné, pokud kopírování zvládnou i jiné jednodušší systémové komponenty.

Například čtení souboru a jeho následné odeslání po síti tradičním způsobem vyžaduje dvě kopie dat a dva kontextové přepínače na cyklus čtení / zápisu. Jedna z těchto kopií dat používá CPU. Odeslání stejného souboru pomocí nulové kopie sníží kontextové přepínače na dva a eliminuje všechny kopie dat CPU.[1]

Protokoly nulového kopírování jsou zvláště důležité pro vysokorychlostní sítě, ve kterých se kapacita síťového spojení blíží nebo přesahuje kapacitu zpracování CPU. V takovém případě CPU tráví téměř veškerý čas kopírováním přenesených dat a stává se tak překážkou, která omezuje rychlost komunikace pod kapacitu linky. Pravidlem používaným v průmyslu je, že ke zpracování jednoho bitu příchozích dat je zapotřebí zhruba jeden taktovací cyklus CPU.

Hardwarové implementace

Včasná implementace byla IBM OS / 360 kde program může instruovat kanálový subsystém číst bloky dat z jednoho souboru nebo zařízení do a nárazník a zapisovat do jiného ze stejné vyrovnávací paměti bez přesunu dat.

Mezi techniky vytváření softwaru s nulovým kopírováním patří použití přímý přístup do paměti (DMA) kopírování a mapování paměti prostřednictvím jednotka správy paměti (MMU). Tyto funkce vyžadují specifickou hardwarovou podporu a obvykle zahrnují konkrétní požadavky na zarovnání paměti.

Novější přístup používaný Heterogenní systémová architektura (HSA) usnadňuje předávání ukazatele mezi procesor a GPU a také další procesory. To vyžaduje a jednotný adresní prostor pro CPU a GPU.[2][3]

Programový přístup

Několik operačních systémů podporuje nulové kopírování souborů prostřednictvím specifických rozhraní API.

The Linuxové jádro podporuje nulové kopírování prostřednictvím různých systémová volání, jako

  • sys / socket.h's sendfile, sendfile64
  • spojit, tričko, vmsplice
  • process_vm_readv, process_vm_writev
  • copy_file_range
  • syrové zásuvky s paketem mmap[4] nebo AF_XDP

Některé z nich jsou uvedeny v POSIX a tedy také přítomny v BSD jádra nebo IBM AIX, některé jsou jedinečné pro Linuxové jádro API.

Microsoft Windows podporuje nulové kopírování prostřednictvím rozhraní TransmitFile API.

Operační Systém Mac podporuje nulové kopírování přes část FreeBSD jádra[Citace je zapotřebí ].

Jáva vstupní proudy mohou podporovat nulové kopírování pomocí metody transferTo () java.nio.channels.FileChannel, pokud základní operační systém také podporuje nulové kopírování.[5]

RDMA Protokoly (Remote Direct Memory Access) se hluboce spoléhají na techniky nulového kopírování.

Viz také

Reference

  1. ^ A b Zero Copy I: Perspektiva uživatelského režimu v deníku Linux - 1. ledna 2003
  2. ^ „Programátorský průvodce galaxií APU“ (PDF).
  3. ^ „AMD popisuje HSA Roadmap: Unified Memory for CPU / GPU“. 2012-02-02.
  4. ^ „Linux PACKET_MMAP dokumentace“. kernel.org.
  5. ^ Efektivní přenos dat prostřednictvím nulové kopie od Sathish K. Palaniappan a Pramod B. Nagaraja. Září 2008