Dlaczego wydajność NTFS jest tak kiepska w porównaniu do, na przykład, Linux / ext3? Najczęściej widzę to podczas sprawdzania (dużych) drzew źródłowych z Subversion. Kasa trwa w systemie NTFS około 10-15 minut, podczas gdy odpowiednia kasa w systemie Linux (na prawie identycznym sprzęcie) zajmuje rząd wielkości szybciej (1 - 1,5 minuty).
Być może jest to specyficzne dla obsługi wielu małych plików, a NTFS jest lepszy, jeśli chodzi o duże pliki, ale dlaczego tak powinno być? Czy poprawa wydajności NTFS dla małych plików nie byłaby ogromnie korzystna dla wydajności systemu Windows?
EDYCJA: To nie jest rozumiane jako pytanie zapalne „NTFS w porównaniu do ext3”; Naprawdę interesuje mnie, dlaczego NTFS działa źle w niektórych przypadkach. Czy to po prostu zły projekt (w co wątpię), czy też istnieją inne problemy, które wchodzą w grę?
źródło
Odpowiedzi:
NTFS ma tę funkcję zwaną główną tabelą plików . Brzmi naprawdę fajnie, kiedy o tym czytasz.
Widać, że ext3 działa dobrze do około 95% użycia dysku, podczas gdy istnienie MFT oznacza, że NTFS tak naprawdę nie chce, abyś używał więcej niż 90% twojego dysku. Ale założę, że to nie jest twój problem i że twój problem dotyczy wielu operacji na wielu małych plikach.
Jedną z różnic tutaj jest to, co dzieje się podczas tworzenia małego pliku. Jeśli plik jest mniejszy niż rozmiar bloku, nie jest zapisywany w swoim własnym bloku, ale jest przechowywany w MFT. Jest to przydatne, jeśli plik pozostaje dokładnie taki, jak był podczas tworzenia. W praktyce oznacza to jednak, że gdy svn dotyka pliku, aby go utworzyć, a następnie dodaje do tego pliku, usuwa z niego lub po prostu modyfikuje go za mało, aby przenieść go do własnego bloku, operacja jest dość powolna. Również samo czytanie wielu małych plików kładzie nacisk na MFT tam, gdzie wszystkie się znajdują, z wielokrotnością na blok. Dlaczego miałby to zrobić? Zapobiega to unikaniu fragmentacji i bardziej efektywnemu wykorzystaniu większej liczby bloków, co ogólnie jest dobrą rzeczą.
Natomiast w ext2 i 3 bloki plików dla każdego pliku są przechowywane obok miejsca, w którym znajdują się metadane katalogu dla katalogu, w którym się znajdują (jeśli to możliwe, jeśli dysk jest niefragmentowany i masz około 20% wolnego miejsca). Oznacza to, że gdy svn otwiera katalogi, pewna liczba bloków jest buforowana w zasadzie za darmo w tej pamięci podręcznej 16 MB na dysku, a następnie ponownie w pamięci podręcznej jądra. Pliki te mogą zawierać plik .svn i pliki wersji ostatniej aktualizacji. Jest to przydatne, ponieważ są to prawdopodobnie niektóre pliki, które SVN przegląda w następnej kolejności. NTFS tego nie robi, chociaż duże części MFT powinny być buforowane w systemie, mogą nie być to części, które będziesz chciał później.
źródło
Twoim szczególnym problemem jest to, że
To, co widzisz, jest po prostu artefaktem czegoś zaprojektowanego dla konkretnego systemu operacyjnego z założeniami dotyczącymi wydajności w tych systemach operacyjnych. Zwykle źle się psuje, gdy jest przenoszony do innych systemów. Innymi przykładami byłyby rozwidlanie vs. gwintowanie. W systemie UNIX-owym tradycyjnym sposobem paraliżowania czegoś jest po prostu odrodzenie innego procesu. W systemie Windows, gdzie procesy trwają co najmniej pięć razy dłużej, jest to naprawdę zły pomysł.
Ogólnie rzecz biorąc, nie można po prostu wziąć żadnych artefaktów z konkretnego systemu operacyjnego na inny z całkowicie inną architekturą. Nie zapominaj również, że NTFS ma wiele funkcji systemu plików, które były nieobecne w powszechnie używanych systemach plików UNIX, takich jak kronikowanie i listy ACL. Te rzeczy mają swoją cenę.
Pewnego dnia, kiedy mam dużo wolnego czasu, planowałem napisać moduł systemu plików SVN, który wykorzystuje funkcje dostępne w systemie NTFS, takie jak obsługa transakcji (powinien wyeliminować problem „dotykania milionów małych plików”) i alternatywne dane strumienie (powinny wyeliminować potrzebę oddzielnego
.svn
katalogu). Byłoby miło, ale wątpię, aby twórcy SVN poradzili sobie z wdrażaniem takich rzeczy w dającej się przewidzieć przyszłości.Uwaga dodatkowa: Jedna aktualizacja dużego repozytorium SVN, którego używam, zajęła około 250 000 operacji na plikach. Jakiś drobny głos mówi mi, że to naprawdę dużo w przypadku 24 plików, które się zmieniły ...
źródło
Oto informacje Microsoftu o tym, jak działa NTFS. To może być przesada w stosunku do tego, czego szukasz, ale przestudiowanie go może rzucić nieco światła na to, z którymi scenariuszami NTFS ma problemy.
źródło