2012-07-17 13 views
6

Esiste un progetto open-source o una guida alle best practice mostra il modo più veloce per copiare i file su una macchina locale, lan, san e wan, che può competere con la velocità del xcopy integrato di windows7 (o 8) o copia di Windows Explorer?Come posso rivaleggiare con la velocità di xcopy?

Per essere contundente, non tutto il file I/O è stato creato uguale. Ci sono diverse spese generali in alcuni protocolli e tecniche. Alcune librerie non sfruttano le operazioni asincrone o sfruttano la velocità della linea dell'hardware.

Sto facendo l'inventario dei trasferimenti di dati di grandi dimensioni che utilizziamo e cercando di valutare l'efficacia delle nostre applicazioni client e le applicazioni da fornitori esterni. Alcune applicazioni server sono le peggiori trasgressori (il java-based è il peggiore del peggiore).

Sto limitando lo scopo di questa ricerca a SMB 2 e 3 (cifs su windows7 e 8).

  • C'è uno svantaggio nella velocità nell'uso delle librerie POSIX. (Fread, fopen, fseek, ecc)
  • C'è qualche vantaggio di utilizzare le chiamate Win32 (CopyFile2, ReadFileEx)
+2

Sembra che xcopy utilizzi una funzione API non documentata, PrivCopyFileExW. Tuttavia, CopyFileEx documentato probabilmente funziona in modo molto simile. –

risposta

1

xcopy in realtà non è il modo più veloce per copiare i file, in particolare attraverso i dischi o attraverso una rete locale . C'è un prodotto commerciale chiamato TeraCopy che è molto più veloce. È closed-source quindi non so come funziona, ma una delle principali differenze è che invece di usare un singolo loop per leggere un blocco di dati in un buffer di memoria e quindi scrivere quel buffer nella nuova posizione, usa due thread e una coda produttore/consumatore.

Il produttore legge i blocchi del file di origine e li mette in coda. Il consumatore legge dalla coda e scrive sull'obiettivo. Il vantaggio qui è che la lettura e la scrittura possono essere eseguite contemporaneamente. Devi però fare attenzione e lasciare che il produttore tenga d'occhio le dimensioni della coda e non rendere la coda troppo grande per consumare troppa memoria - in genere la lettura sarà più veloce della scrittura, ma dipende anche dalla sorgente e dalla destinazione posizioni.