Pourquoi Linux 30x est-il plus rapide que Windows 10 pour copier des fichiers?

20

J'ai obtenu 20,3 Go de fichiers et de dossiers totalisant 100 000 éléments et plus. J'ai dupliqué tous ces fichiers dans un répertoire à partir de Windows 10, et cela m'a pris une atroce 3 heures de copie. Terminé.

L'autre jour, j'ai démarré sous Linux Fedora 24, recopié le même dossier et bam! Il m'a fallu seulement 5 minutes pour le dupliquer au même endroit mais dans un répertoire différent.

Pourquoi Linux est-il si rapide? Et Windows est extrêmement lent?

Il y a une question similaire ici

(Ubuntu) L'algorithme de copie de fichiers Linux est-il meilleur que Windows 7?

Mais la réponse acceptée fait tout à fait défaut.

Jones G
la source
Vous n'utilisez pas "Windows" ou "Linux" pour copier des fichiers, vous utilisez un programme spécifique exécuté dans chacun de ces systèmes d'exploitation. Les programmes varient considérablement dans les méthodes qu'ils utilisent et les compromis qu'ils font. Lesquelles utilisiez-vous? Et comment?
kreemoweet
5
@kreemoweet: Il en va de même pour les systèmes d'exploitation - le NTFS de Windows est connu pour traiter très mal de nombreux petits fichiers, par rapport à la plupart des autres systèmes de fichiers.
user1686
2
Et gentil downvote d'un fan de Windows hein. Vous voyez, la copie de fichiers, bien que simple, a de nombreuses applications allant de la sauvegarde de données en entreprise aux études scientifiques. Par exemple, au CERN, il y a des pétaoctets de données à traiter, une copie lente serait inacceptable.
Jones G
À partir de ce même lien - vérifiez la 2e réponse à partir du bas. Linux met en cache tous les fichiers dans la RAM disponible et écrit sur le disque quand ils le peuvent - d'où pourquoi il semble plus rapide (car il n'a besoin que de lire pour l'instant et d'écrire quand ils le peuvent).
Darius
Les systèmes de fichiers @DominicGuana font leur part (ext3 / ext4 peut allouer des morceaux de 100 Mo à la fois). Avez-vous considéré que l'antivirus sous Windows peut également jouer un rôle (de ralentissement)? BTW pour des problèmes similaires avec le flux d'acquisition de données SLAC (après le déclenchement du 1er niveau, il y avait trop de données), nous avons appris à écrire sur le disque dur en parallèle ...
Hastur

Réponses:

25

Les bases de celui-ci se décomposent en quelques composants clés du système total: l'élément d'interface utilisateur (la partie graphique), le noyau lui-même (ce qui parle au matériel) et le format dans lequel les données sont stockées (c'est-à-dire le système de fichiers ).

Revenir en arrière NTFSa été de facto pour Windows pendant un certain temps, tandis que de facto pour les principales variantes de Linux est le extsystème de fichiers. Le système de fichiers NTFS lui-même n'a pas changé depuis Windows XP (2001), de nombreuses fonctionnalités qui existent (comme la réduction / guérison des partitions, NTFS transactionnel, etc.) sont des fonctionnalités du système d'exploitation (Windows Vista / 7/8/10) et non NTFS lui-même. Le extsystème de fichiers a eu sa dernière version stable majeure ( ext4) en 2008. Puisque le système de fichiers lui-même est ce qui régit comment et où les fichiers sont accédés, si vous utilisez, ext4il y a de fortes chances que vous remarquiez une amélioration de la vitesse par rapport à NTFS; notez cependant que si vous l'avez utilisé, ext2vous remarquerez peut-être qu'il est comparable en vitesse.

Il se pourrait aussi qu'une partition soit formatée en plus petits morceaux que l'autre. La valeur par défaut pour la plupart des systèmes est une taille de cluster de 4096 byte 1 , 2 , mais si vous avez formaté votre ext4partition en quelque chose comme 16k 3, chaque lecture sur le ext4système obtiendrait 4x les données par rapport au système NTFS (ce qui pourrait signifier 4x les fichiers en fonction de ce qui est stocké). où / comment et quelle taille, etc.). La fragmentation des fichiers peut également jouer un rôle dans les vitesses. NTFS gère la fragmentation des fichiers très différemment du extsystème de fichiers, et avec plus de 100 000 fichiers, il y a de fortes chances qu'il y ait une certaine fragmentation.

Le composant suivant est le noyau lui-même (pas l'interface utilisateur, mais le code qui parle réellement au matériel, le vrai système d'exploitation). Ici, honnêtement, il n'y a pas beaucoup de différence. Les deux noyaux peuvent être configurés pour faire certaines choses, comme la mise en cache / tampon du disque, pour accélérer les lectures et les écritures perçues, mais ces configurations ont généralement les mêmes compromis quel que soit le système d'exploitation; Par exemple, la mise en cache peut sembler augmenter considérablement la vitesse de copie / sauvegarde, mais si vous perdez de l'énergie pendant l'écriture dans le cache (ou retirez le lecteur USB), vous perdrez toutes les données non réellement écrites sur le disque et peut-être même les données corrompues déjà écrites sur le disque.

Par exemple, copiez un grand nombre de fichiers sur un lecteur USB au format FAT sous Windows et Linux. Sous Windows, cela peut prendre 10 minutes tandis que sous Linux, cela prendra 10 secondes; immédiatement après avoir copié les fichiers, retirez le lecteur en toute sécurité en l'éjectant. Sous Windows, il serait immédiatement éjecté du système et vous pourriez donc retirer le lecteur du port USB, tandis que sous Linux, cela pourrait prendre 10 minutes avant de pouvoir réellement retirer le lecteur; cela est dû à la mise en cache (c'est-à-dire que Linux a écrit les fichiers sur la RAM, puis les a écrits sur le disque en arrière-plan, tandis que Windows sans cache a écrit les fichiers immédiatement sur le disque).

Le dernier est l'interface utilisateur (la partie graphique avec laquelle l'utilisateur interagit). L'interface utilisateur peut être une jolie fenêtre avec des graphiques sympas et de jolies barres qui me donnent une idée générale du nombre de fichiers copiés, de leur taille et de leur durée; l'interface utilisateur peut également être une console qui n'imprime aucune information, sauf lorsqu'elle est terminée. Si l'interface utilisateur doit d'abord parcourir chaque dossier et fichier pour déterminer le nombre de fichiers, ainsi que leur taille et donner une estimation approximative avant de pouvoir réellement commencer à copier, le processus de copie peut prendre plus de temps en raison de la nécessité pour l'interface utilisateur de fais ça. Encore une fois, cela est vrai quel que soit le système d'exploitation.

Vous pouvez configurer certaines choses pour qu'elles soient égales (comme la mise en cache du disque ou la taille du cluster), mais de manière réaliste, cela se résume simplement à la façon dont toutes les parties sont liées pour faire fonctionner le système et plus précisément à quelle fréquence ces morceaux de code sont réellement mis à jour. Le système d'exploitation Windows a parcouru un long chemin depuis Windows XP, mais le sous-système de disque est un domaine qui n'a pas vu beaucoup de TLC dans le système d'exploitation dans toutes les versions depuis de nombreuses années (par rapport à l' écosystème Linux qui semble voir de nouveaux FS ou amélioration assez fréquemment).

J'espère que cela ajoute de la clarté.

txtechhelp
la source
Réponse horrible à mon avis et rejetée. Vous introduisez des différences là où il n'y en a pas. Personne n'a demandé comment fonctionnaient les disques partitionnés différemment. Bien entendu, la question est centrée sur le précepte «toutes choses égales par ailleurs». Je peux choisir un fs pour un raid0 8 nvme comme je le souhaite avec des vitesses de lecture natives de plus de 16 gigaoctets par seconde et pourtant une copie de fichier Windows atteint un maximum de 1,4-1,5 gigaoctets à tout moment, tout le temps. N'a rien à voir avec la mise en cache, les fs, les partitions, mais plus avec les limitations du système d'exploitation Windows.
Matthias Wolf
@Matt dans quel système de fichiers formatez-vous ladite matrice RAID? Si c'est NTFS, cela pourrait expliquer le ralentissement .. mais si vous avez plus d'informations à fournir, vous êtes libre d'ajouter une réponse pertinente, surtout si vous avez un code source (et non un vidage d'assembly) au système d'exploitation Windows principal pour expliquer directement pourquoi ce ralentissement se produit (pour ma part je serais particulièrement intéressé par ça!).
txtechhelp
J'utilise ntfs, quelle meilleure option existe-t-il en tant que fs sur un serveur Windows?
Matthias Wolf
J'ai contacté MSFT et j'ai eu de nombreuses discussions et essayé beaucoup de choses au fil des ans et je n'ai jamais réussi à dépasser 1,5 Go / seconde, malgré le fait que les nics 100 Gb sur chaque machine et que tout le reste du trafic par les outils de profilage Mellanox montrent que les connexions fonctionnent parfaitement bien à Débit de 94 à 95 Gbit / s. Aucun ralentissement entre les machines Linux, mais dès qu'une machine Windows OS est impliquée, je vois ces goulots d'étranglement
Matthias Wolf
Je parle de transferts de fichiers uniques, tous à un seul thread. Il n'y a aucun goulot d'étranglement matériel, son purement basé sur le système d'exploitation.
Matthias Wolf