Perché Linux 30x è più veloce di Windows 10 nella copia dei file?


20

Ho ottenuto 20,3 Gig di file e cartelle per un totale di oltre 100k elementi. Ho duplicato tutti quei file in una directory da Windows 10 e mi ci sono voluti 3 ore di copiatura. Fatto.

L'altro giorno, ho avviato Linux Fedora 24, ho ricopiato la stessa cartella e bam! Mi ci sono voluti solo 5 minuti per duplicarlo nello stesso posto ma directory diversa.

Perché Linux è così veloce? E Windows è meticolosamente lento?

C'è una domanda simile qui

(Ubuntu) L'algoritmo di copia dei file Linux è migliore di Windows 7?

Ma la risposta accettata è piuttosto carente.


Non usi "Windows" o "Linux" per copiare file, usi alcuni programmi specifici in esecuzione in ognuno di quei sistemi operativi. I programmi variano ampiamente nei metodi che usano e nei compromessi che fanno. Quali stavi usando? E come?
kreemoweet,

5
@kreemoweet: Lo stesso vale per i sistemi operativi: è noto che NTFS di Windows gestisce molto male molti file di piccole dimensioni, rispetto alla maggior parte degli altri filesystem.
user1686,

2
E bel downvote da un fan di Windows eh. Vedi, la copia dei file, sebbene semplice abbia molte applicazioni che vanno dal backup dei dati in bussiness agli studi scientifici. Ad esempio, nel CERN ci sono Petabyte di dati da gestire, una copia lenta sarebbe inaccettabile.
Jones G,

Dallo stesso link: controlla la seconda risposta dal basso. Linux memorizza nella cache tutti i file nella RAM disponibile e scrive su disco quando possono - quindi perché sembra più veloce (poiché deve solo leggere per ora e scrivere quando possono).
Dario,

I file system @DominicGuana fanno la loro parte (ext3 / ext4 può allocare blocchi di 100 Mb contemporaneamente). Hai considerato che anche l'antivirus sotto Windows può svolgere un ruolo (rallentante)? A proposito di problemi simili con il flusso di acquisizione dati SLAC (dopo il trigger di 1 ° livello c'erano troppi dati) abbiamo imparato a scrivere su HDD in parallelo ...
Hastur

Risposte:


25

Le basi di esso si dividono in alcuni componenti chiave dell'intero sistema: l'elemento UI (la parte grafica), il kernel stesso (ciò che parla all'hardware) e il formato in cui sono memorizzati i dati (cioè il file system ).

Andando indietro, NTFSè stato de facto per Windows per qualche tempo, mentre il de facto per le principali varianti di Linux è il extfile system. Il file system NTFS stesso non è cambiato da Windows XP (2001), esistono molte funzionalità (come la riduzione / correzione della partizione, NTFS transazionale, ecc.) Sono funzionalità del sistema operativo (Windows Vista / 7/8/10) e non NTFS stesso. Il extfile system ha avuto l'ultima versione stabile stabile ( ext4) nel 2008. Dal momento che il file system stesso è ciò che governa come e dove si accede ai file, se stai usando ext4c'è una probabilità che noterai un miglioramento per accelerare su NTFS; nota tuttavia se hai usato ext2potresti notare che è comparabile in termini di velocità.

Potrebbe anche essere che una partizione sia formattata in blocchi più piccoli dell'altra. L'impostazione predefinita per la maggior parte dei sistemi è 4096 byte 1 , 2 dimensioni del cluster, ma se si formatta la ext4partizione in modo simile a 16k 3, ogni lettura sul ext4sistema otterrebbe 4x i dati rispetto al sistema NTFS (il che potrebbe significare 4x i file a seconda di ciò che è memorizzato dove / come e quanto grande, ecc.). Anche la frammentazione dei file può avere un ruolo nelle velocità. NTFS gestisce la frammentazione dei file in modo molto diverso rispetto al extfile system e con 100k + file, ci sono buone probabilità che ci sia della frammentazione.

Il componente successivo è il kernel stesso (non l'interfaccia utente, ma il codice che parla effettivamente all'hardware, al vero sistema operativo). Qui, onestamente non c'è molta differenza. Entrambi i kernel possono essere configurati per fare determinate cose, come la memorizzazione nella cache / buffering del disco, per velocizzare le letture e le scritture percepite, ma queste configurazioni di solito hanno gli stessi compromessi indipendentemente dal sistema operativo; ad esempio, la memorizzazione nella cache potrebbe aumentare notevolmente la velocità di copia / salvataggio, ma se si perde energia durante la scrittura della cache (o si estrae l'unità USB), si perderanno tutti i dati non effettivamente scritti su disco e probabilmente anche i dati corrotti già scritti su disco.

Ad esempio, copia molti file su un'unità USB formattata FAT in Windows e Linux. Su Windows potrebbero essere necessari 10 minuti, mentre su Linux ci vorranno 10 secondi; subito dopo aver copiato i file, rimuovi in ​​sicurezza l'unità espellendola. Su Windows verrebbe immediatamente espulso dal sistema e quindi potresti rimuovere l'unità dalla porta USB, mentre su Linux potrebbero essere necessari 10 minuti prima di poter effettivamente rimuovere l'unità; questo a causa della memorizzazione nella cache (ovvero Linux ha scritto i file su RAM, quindi li ha scritti sul disco in background, mentre Windows senza cache ha scritto immediatamente i file sul disco).

L'ultima è l'interfaccia utente (la parte grafica con cui l'utente interagisce). L'interfaccia utente potrebbe essere una bella finestra con alcuni grafici fantastici e belle barre che mi danno un'idea generale di quanti file vengono copiati, quanto è grande tutto e quanto tempo potrebbe richiedere; l'interfaccia utente potrebbe anche essere una console che non stampa alcuna informazione tranne quando è stata eseguita. Se l'interfaccia utente deve prima passare attraverso ogni cartella e file per determinare quanti file ci sono, oltre a quanto sono grandi e dare una stima approssimativa prima che possa effettivamente iniziare la copia, quindi il processo di copia può richiedere più tempo a causa dell'interfaccia utente che deve Fai questo. Ancora una volta, questo è vero indipendentemente dal sistema operativo.

È possibile configurare alcune cose in modo che siano uguali (come la memorizzazione nella cache del disco o le dimensioni del cluster), ma realisticamente parlando si riduce semplicemente al modo in cui tutte le parti si uniscono per far funzionare il sistema e più specificamente con quale frequenza vengono aggiornati effettivamente quei pezzi di codice. Il sistema operativo Windows ha fatto molta strada da Windows XP, ma il sottosistema del disco è un'area che non ha visto molti TLC nel sistema operativo in tutte le versioni per molti anni (rispetto all'ecosistema Linux che sembra vedere alcuni nuovi FS o miglioramento piuttosto frequentemente).

Spero che aggiunga un po 'di chiarezza.


Risposta orribile a mio avviso e votata in basso. Stai introducendo differenze dove non ce ne sono. Nessuno ha chiesto come funzionano le unità partizionate diversamente. Certamente il centro delle domande sul precetto "tutto il resto uguale". Posso scegliere un fs per un raid0 a 8 nvme come voglio con velocità di lettura native di oltre 16 gigabyte al secondo e tuttavia una copia di file Windows raggiunge il massimo a 1,4-1,5 gigabyte in qualsiasi momento, sempre. Non ha nulla a che fare con cache, fs, partizioni, ma di più con le limitazioni del sistema operativo Windows.
Matthias Wolf,

@Matt in quale file system stai formattando detto array RAID? Se si tratta di NTFS, ciò potrebbe spiegare il rallentamento .. ma se hai ulteriori informazioni da fornire, sei libero di aggiungere una risposta pertinente, soprattutto se hai un codice sorgente (e non un dump dell'assembly) al sistema operativo Windows principale per spiegare direttamente perché questo rallentamento si verifichi (io per uno sarei particolarmente interessato a questo!).
txtechhelp il

Uso ntfs, quale opzione migliore esiste come fs su un server Windows?
Matthias Wolf,

Ho contattato MSFT e ho avuto molte discussioni e ho provato molte cose nel corso degli anni e non ho mai superato 1,5 GB / secondo, nonostante ci siano 100 Gb su ogni macchina e tutto il traffico per gli strumenti di profilatura Mellanox dimostrano che le connessioni funzionano perfettamente 94-95Gb / sec throughput. Nessun rallentamento tra le macchine Linux, ma non appena viene coinvolta una macchina con sistema operativo Windows vedo quei colli di bottiglia
Matthias Wolf

Sto parlando di trasferimenti di file singoli, tutti a thread singolo. Non c'è alcun collo di bottiglia hardware, basato esclusivamente sul sistema operativo.
Matthias Wolf,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.