Zła wydajność NTFS

21

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ę?

JesperE
źródło
4
Być może można to przeredagować, aby zapytać, jak poprawić wydajność NTFS w przypadku dużej liczby małych plików, zamiast pytać, dlaczego NTFS jest do bani w porównaniu do ext3?
ChrisInEdmonton
Zgadzam się z @Chris, to pytanie jest w pewnym sensie bezcelowe.
Sasha Chedygov
4
Cóż, jestem naprawdę zainteresowany tym, dlaczego NTFS działa źle. Jeśli odpowiedź brzmi „zrób X, aby przyspieszyć”, to świetnie, ale zadowolę się zrozumieniem problemu.
JesperE
Ach, okej, przepraszam za nieporozumienie.
Sasha Chedygov
2
BTW, kiedy korzystałeś z SVN na komputerze z systemem Windows, czy ta maszyna miała skaner antywirusowy z włączoną ochroną w czasie rzeczywistym? To może być złe.
dlamblin

Odpowiedzi:

35

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.

dlamblin
źródło
2
Masz rację, że tutaj znajdują się małe pliki, ale nie jestem pewien, dlaczego to powinno kłaść nacisk na MFT. Czy nie ułatwiłoby to znacznie czytania tych plików, ponieważ masz gwarancję, że ściągniesz wiele z tych plików do pamięci podręcznej, gdy ściągniesz którykolwiek z nich?
ChrisInEdmonton
1
@ChrisInEdmonton Podkreślają to aktualizacje MFT, ponieważ nie dotykasz bloków, w których dostępna jest sąsiednia przestrzeń, w końcu przesuwasz rzeczy, a także unieważniasz buforowane części MFT. Przyznaję, że na papierze MFT powinien być bardzo szybkim sposobem obsługi małych plików. To po prostu nie wytrzymuje w praktyce.
dlamblin
6

Twoim szczególnym problemem jest to, że

  1. Sam Subversion pochodzi ze świata UNIX, dlatego wersja Windows przyjmuje podobne parametry wydajności.
  2. Wydajność NTFS naprawdę nie jest świetna w przypadku gazillionów małych plików.

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 .svnkatalogu). 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 ...

Joey
źródło
1
Ale dlaczego wydajność NTFS jest niska w przypadku gazillionu małych plików? Czy trzeba to poświęcić, aby uzyskać coś innego?
JesperE
3

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.

Kenneth Cochran
źródło