Z moich obserwacji jako programisty Java pracującego na stacjach roboczych Windows, NTFS jest powolny w porównaniu do systemów plików Linux. Pytanie brzmi: czy w sterowniku NTFS jest coś, co można ręcznie dostroić, na przykład dać mu więcej pamięci na pamięć podręczną? Włączyć niektóre algorytmy eksperymentalne? Jeśli to nie jest dostępne, to może jest inny system plików, który może być używany w systemie Windows, może nawet komercyjny, szybszy niż NTFS?
Dla jasności, nie chcę poprawiać prędkości kompilacji dla projektów Maven, chciałbym uzyskać ogólną poprawę dla systemu operacyjnego. Mam wrażenie, że NTFS jest od dawna przestarzały i powolny w porównaniu do systemów plików Linux. Dziwi mnie to, że najpopularniejszy system operacyjny na świecie ma tylko jeden system plików, który wciąż wymaga ręcznej defragmentacji. Być może nie jest alternatywa?
Aktualizacja: Zgodnie z moimi obserwacjami, to jest powolne. Buduję / pakuję projekt, co oznacza wiele operacji odczytu / zapisu na dysku. System kompilacji jest wieloplatformowy (Java, Maven), więc mogę na przykład wykonywać dokładnie takie same działania po uruchomieniu z Ubuntu.
W Linuksie moje kompilacje są co najmniej 1/3 szybsze. Stąd pytanie o system plików. Przepraszam, jeśli jest źle umieszczone.
Odpowiedzi:
Chociaż chciałbym zobaczyć coś takiego jak ZFS dostępny dla hostów Windows, NTFS nie jest strasznym systemem plików. Obsługuje większość „nowoczesnych” funkcji systemu plików (rozszerzone atrybuty, kronikowanie, listy ACL, jak go nazywacie), ale jest utrudniony przez Eksploratora i większość innych aplikacji nieobsługujących żadnej z nich.
Jedną rzeczą, która absolutnie zabije jego wydajność, jest posiadanie „zbyt wielu” pozycji w katalogu. Po przejściu kilku tysięcy wpisów w jednym katalogu wszystko zwalnia do indeksowania. Dosłownie cała maszyna przestanie czekać, aż NTFS utworzy lub usunie wpisy, gdy tak się dzieje.
Pracowałem z aplikacją, która generowała dokumenty oparte na HTML dla zespołów .NET; tworzyłby jeden plik na właściwość, metodę, klasę, przestrzeń nazw itp. W przypadku większych zestawów zobaczylibyśmy ponad 20 plików k, wszystkie ładnie zrzucone do jednego katalogu. Maszyna spędziłaby kilka godzin podczas kompilacji zablokowanej na NTFS.
Teoretycznie system Windows obsługuje wtyczki systemu plików, które umożliwiłyby natywne ZFS, ext3 lub cokolwiek (nawet FUSE). W praktyce interfejsy API są nieudokumentowane, więc jesteś całkowicie sam.
Teraz, skoro zajmujesz się programowaniem w języku Java, czy możesz zainstalować inny system operacyjny na swoim komputerze lub użyć maszyny wirtualnej na systemie Windows?
Ponadto możesz wypróbować niektóre testy niezależne od platformy (iozone, bonnie ... prawdopodobnie są bardziej nowoczesne, których nie znam z góry, może nawet kilka napisanych w Javie), aby sprawdzić, czy to w rzeczywistości system plików powstrzymuje cię, lub jeśli jest to coś innego. Przedwczesna optymalizacja i wszystko ...
źródło
Wydaje mi się, że prawdziwym rozwiązaniem byłoby przepisanie systemu kompilacji tak, aby używał natywnego interfejsu API systemu plików Windows zamiast samego interfejsu unix API (fopen itp.) Pod ramą przenośności. Ale tak się nie stanie, więc w zasadzie utknąłeś na poziomie wydajności, który według nich był akceptowalny.
Często, gdy korzystasz z systemów, które nie zostały pierwotnie napisane dla systemu Windows, okazuje się, że przechodzenie przez katalog jest bardzo słabo obsługiwane, więc upewnij się, że masz bardzo płaskie drzewo katalogów.
źródło
Istnieje jeden system plików obsługiwany przez nowy system operacyjny Windows ORAZ jest szybszy niż NTFS. To exFAT. Istnieje możliwość użycia go jako dysku systemowego. Ale nie wiadomo, jakie mogą mieć komplikacje.
Z pewnością możesz go użyć do innych partycji. Jest to szybsze dzięki przypadkowym operacjom odczytu / zapisu. Idealny na przykład na dysk SSD.
źródło
opendir()
wywołaniu (lub równoważnym).Czy masz uruchomiony program antywirusowy, który sprawdza dostęp / zapis w folderze projektu?
Kompilacja polega na szybkim odczytywaniu i zapisywaniu wielu małych plików, które mogą przytłoczyć skaner antywirusowy. Dodaj folder projektu do listy wykluczonych folderów i sprawdź, czy to poprawi sytuację.
W systemie Linux (prawdopodobnie) nie masz oprogramowania antywirusowego ....
źródło