Dlaczego Linux jest 30x szybszy niż Windows 10 w kopiowaniu plików?

20

Mam 20,3 gigabajtów plików i folderów o łącznej wartości ponad 100 tysięcy pozycji. Zduplikowałem wszystkie te pliki w jednym katalogu z systemu Windows 10 i zajęło mi to dręczące 3 godziny kopiowania. Gotowy.

Któregoś dnia uruchomiłem w Linuksie Fedora 24, skopiowałem ten sam folder i bam! Powielenie go w tym samym miejscu, ale w innym katalogu zajęło mi tylko 5 minut.

Dlaczego Linux jest tak szybki? A Windows jest wyjątkowo powolny?

Tutaj jest podobne pytanie

Czy algorytm kopiowania plików (Ubuntu) Linux jest lepszy niż Windows 7?

Ale brakuje ogólnie przyjętej odpowiedzi.

James Guana
źródło
Nie używasz „Windows” ani „Linux” do kopiowania plików, używasz określonego programu działającego w każdym z tych systemów operacyjnych. Programy różnią się znacznie metodami, z których korzystają, oraz kompromisami, które podejmują. Z których korzystałeś? I jak?
kreemoweet
5
@kreemoweet: Podobnie jak systemy operacyjne - Windows NTFS bardzo źle radzi sobie z wieloma małymi plikami w porównaniu z większością innych systemów plików.
grawity
2
I fajna opinia od fanów Windowsa, huh. Widzisz, kopiowanie plików, choć proste ma wiele aplikacji, od tworzenia kopii zapasowych danych w biznesie po badania naukowe. Na przykład w CERN są Petabajty danych do rozwiązania, powolne kopiowanie byłoby niedopuszczalne.
James Guana
Z tego samego linku - sprawdź drugą odpowiedź od dołu. Linux buforuje wszystkie pliki do dostępnej pamięci RAM i zapisuje na dysk, gdy tylko jest to możliwe - dlatego wygląda to szybciej (ponieważ wystarczy na razie czytać i pisać, kiedy tylko mogą).
Dariusz
@DominicGuana Systemy plików wykonują swoją część (ext3 / ext4 może przydzielić porcje 100 Mb jednocześnie). Czy uważasz, że program antywirusowy w systemie Windows może również odgrywać (spowalniającą) rolę? BTW dla podobnych problemów z przepływem akwizycji danych SLAC (po wyzwoleniu 1. poziomu było za dużo danych) nauczyliśmy się pisać na HDD równolegle ...
Hastur

Odpowiedzi:

23

Jego podstawy dzielą się na kilka kluczowych elementów całego systemu: element interfejsu użytkownika (część graficzna), samo jądro (co mówi o sprzęcie) oraz format, w jakim dane są przechowywane (tj. System plików ).

Cofanie się NTFSod jakiegoś czasu było de facto dla systemu Windows, podczas gdy de facto dla głównych wariantów Linuksa jest to extsystem plików. Sam system plików NTFS nie zmienił się od czasu Windows XP (2001), wiele istniejących funkcji (takich jak zmniejszanie / leczenie partycji, transakcyjny NTFS itp.) To funkcje systemu operacyjnego (Windows Vista / 7/8/10) a nie sam NTFS. System extplików miał swoją ostatnią ważną stabilną wersję ( ext4) w 2008 roku. Ponieważ sam system plików określa sposób i miejsce dostępu do plików, jeśli używasz, ext4istnieje szansa, że ​​zauważysz poprawę prędkości w porównaniu z NTFS; zwróć uwagę, że jeśli użyłeś, ext2możesz zauważyć, że prędkość jest porównywalna.

Równie dobrze może być tak, że jedna partycja jest sformatowana w mniejsze fragmenty niż druga. Domyślną wartością dla większości systemów jest klaster o wielkości 4096 byte 1 , 2 , ale jeśli sformatujesz ext4partycję na coś takiego jak 16k 3, to każdy odczyt w ext4systemie uzyska 4x dane w porównaniu do systemu NTFS (co może oznaczać 4x pliki w zależności od tego, co jest przechowywane gdzie / jak i jak duży itp.). Fragmentacja plików może również odgrywać rolę w szybkości. NTFS radzi sobie z fragmentacją plików zupełnie inaczej niż w extsystemie plików, a przy plikach o wielkości ponad 100 tys. Istnieje duża szansa, że ​​fragmentacja będzie trochę większa.

Kolejnym składnikiem jest samo jądro (nie interfejs użytkownika, ale kod, który faktycznie komunikuje się ze sprzętem, prawdziwy system operacyjny). Tutaj naprawdę nie ma dużej różnicy. Oba jądra można skonfigurować do wykonywania pewnych czynności, takich jak buforowanie / buforowanie dysku, aby przyspieszyć odczyty i postrzegane zapisy, ale te konfiguracje zwykle mają takie same kompromisy niezależnie od systemu operacyjnego; np. buforowanie może wydawać się znacznie zwiększyć szybkość kopiowania / zapisywania, ale jeśli stracisz energię podczas zapisu w pamięci podręcznej (lub wyciągniesz dysk USB), stracisz wszystkie dane, które nie zostały faktycznie zapisane na dysku, a nawet uszkodzone dane już zapisane na dysk.

Na przykład skopiuj wiele plików na dysk USB w formacie FAT w systemach Windows i Linux. W systemie Windows może to zająć 10 minut, podczas gdy w systemie Linux zajmie to 10 sekund; natychmiast po skopiowaniu plików bezpiecznie wyjmij dysk, wysuwając go. W systemie Windows zostałby natychmiast wyrzucony z systemu, dzięki czemu można usunąć dysk z portu USB, podczas gdy w systemie Linux może minąć 10 minut, zanim dysk zostanie rzeczywiście usunięty; dzieje się tak z powodu buforowania (tzn. Linux zapisał pliki do pamięci RAM, a następnie zapisał je na dysku w tle, podczas gdy system Windows bez pamięci podręcznej zapisał pliki natychmiast na dysk).

Ostatni to interfejs użytkownika (część graficzna, z którą użytkownik wchodzi w interakcje). Interfejs użytkownika może być ładnym oknem z kilkoma fajnymi wykresami i ładnymi paskami, które dają mi ogólny pogląd na to, ile plików jest kopiowanych, jak duże to wszystko i jak długo to potrwa; interfejs użytkownika może być również konsolą, która nie drukuje żadnych informacji, z wyjątkiem sytuacji, gdy jest to zrobione. Jeśli interfejs użytkownika musi najpierw przejść przez każdy folder i plik, aby określić, ile jest plików, a także ich rozmiar i podać przybliżone oszacowanie, zanim zacznie się kopiowanie, proces kopiowania może potrwać dłużej, ponieważ interfejs użytkownika musi Zrób to. Ponownie jest to prawdą niezależnie od systemu operacyjnego.

Możesz skonfigurować niektóre rzeczy, aby były równe (np. Buforowanie dysku lub rozmiar klastra), ale realistycznie rzecz biorąc, sprowadza się to do tego, jak wszystkie części łączą się ze sobą, aby system działał, a dokładniej, jak często te fragmenty kodu są aktualizowane. System operacyjny Windows przeszedł długą drogę od Windows XP, ale podsystem dyskowy jest obszarem, który od wielu lat nie widział wiele TLC w systemie operacyjnym we wszystkich wersjach (w porównaniu do ekosystemu Linux, który wydaje się widzieć nowy FS lub poprawa raczej często).

Mam nadzieję, że dodaje trochę jasności.

txtechhelp
źródło
Okropna odpowiedź w mojej opinii i przegłosowana. Wprowadzasz różnice tam, gdzie ich nie ma. Nikt nie pytał, w jaki sposób działają dyski podzielone na partycje. Oczywiście pytanie skupia się na zasadzie „wszystko inne jest równe”. Mogę wybrać fs dla 8 nvme raid0 w dowolny sposób, dzięki natywnej prędkości odczytu ponad 16 gigabajtów na sekundę, a mimo to kopia pliku systemu Windows osiąga maksymalny poziom 1,4-1,5 gigabajta przez cały czas. Nie ma to nic wspólnego z buforowaniem, fs, partycjami, ale bardziej z ograniczeniami systemu operacyjnego Windows.
Matt
@Matt W jakim systemie plików formatujesz wspomnianą macierz RAID? Jeśli jest to NTFS, może to wyjaśniać spowolnienie .. ale jeśli masz więcej informacji do przekazania, możesz dodać odpowiednią odpowiedź, szczególnie jeśli masz kod źródłowy (a nie zrzut zestawu) do podstawowego systemu operacyjnego Windows wyjaśnić bezpośrednio, dlaczego występuje wspomniane spowolnienie (szczególnie mnie to interesuje!).
txtechhelp
Używam NTFS, jaka jest lepsza opcja jako fs na serwerze Windows?
Matt
Skontaktowałem się z MSFT i przeprowadziłem wiele dyskusji, próbowałem wielu rzeczy przez lata i nigdy nie udało mi się przekroczyć 1,5 GB / sekundę, pomimo posiadania 100 Gb na każdej maszynie i całego ruchu na narzędzia profilujące Mellanox pokazują, że połączenia działają doskonale w Przepustowość 94-95 Gb / s. Żadnych spowolnień między maszynami z Linuksem, ale gdy tylko zaangażowana jest maszyna z systemem Windows, widzę te wąskie gardła
Matt
Mówię o przesyłaniu pojedynczych plików, wszystkie jednowątkowe. Nie ma żadnego wąskiego gardła sprzętowego, oparte wyłącznie na systemie operacyjnym.
Matt