Niska wydajność na dysku NTFS z dużą liczbą plików

12

Patrzę na tę konfigurację:

  • Windows Server 2012
  • Dysk NTFS 1 TB, klastry 4 KB, pełne ~ 90%
  • ~ 10 mln plików przechowywanych w 10 000 folderów = ~ 1000 plików / folder
  • Pliki w większości dość małe <50 KB
  • Dysk wirtualny hostowany na macierzy dyskowej

Gdy aplikacja uzyskuje dostęp do plików przechowywanych w losowych folderach, odczytanie każdego pliku zajmuje 60–100 ms. Za pomocą narzędzia testowego wydaje się, że opóźnienie występuje podczas otwierania pliku. Odczyt danych zajmuje wtedy ułamek czasu.

Podsumowując, oznacza to, że odczyt 50 plików może z łatwością zająć 3-4 sekundy, czyli znacznie więcej niż oczekiwano. Pisanie odbywa się wsadowo, więc wydajność nie jest tutaj problemem.

Postępowałem już zgodnie z zaleceniami dotyczącymi SO i SF, aby dojść do tych liczb.

Co zrobić z czasami czytania?

  • Uważaj, że 60-100 ms na plik jest w porządku (tak nie jest, prawda?)
  • Wszelkie pomysły, w jaki sposób można ulepszyć konfigurację?
  • Czy istnieją narzędzia monitorowania niskiego poziomu, które mogą powiedzieć, na co dokładnie spędza czas?

AKTUALIZACJA

  1. Jak wspomniano w komentarzach, system uruchamia Symantec Endpoint Protection. Jednak wyłączenie go nie zmienia czasów odczytu.

  2. PerfMon mierzy 10-20 ms na odczyt. Oznaczałoby to, że każdy odczyt pliku wymaga ~ 6 operacji odczytu I / O, prawda? Czy byłoby to wyszukiwanie MFT i kontrole ACL?

  3. Rozmiar MFT wynosi ~ 8,5 GB, czyli więcej niż pamięć główna.

Paul B.
źródło
Aby wykluczyć coś, czy miałbyś coś przeciwko udostępnieniu zrzutu ekranu RAMMap ?
Tomas Dabasinskas
Masz na myśli tabelę Podsumowanie plików? Teraz, gdy o tym wspomniałeś, widzę plik SYMEFA.DB z 900 MB pamięci, który przypomina mi, że w systemie jest zainstalowany program Symantec Endpoint Protection. Może to winowajca? Spróbuję dowiedzieć się więcej.
Paul B.
Właściwie bardziej interesowało mnie użycie Metafile
Tomas Dabasinskas,
Ok, rozumiem. Metaplik pokazuje łącznie 250 MB, 40 aktywnych, 210 gotowości. Wydaje się normalny czy nie?
Paul B.
Tak, wydaje się, że tak
Tomas Dabasinskas,

Odpowiedzi:

5

Serwer nie miał wystarczającej ilości pamięci. Zamiast buforować dane metapliku NTFS w pamięci, każdy dostęp do pliku wymagał wielu odczytów dysku. Jak zwykle problem jest oczywisty, gdy go zobaczysz. Pozwólcie, że podzielę się tym, co zaciemniło moją perspektywę

  • Serwer pokazał 2 GB pamięci dostępnej zarówno w Menedżerze zadań, jak i RamMap. Tak więc albo Windows zdecydował, że dostępna pamięć nie jest wystarczająca do przechowywania znaczącej części danych metapliku. Lub niektóre ograniczenia wewnętrzne nie pozwalają na użycie ostatniego bitu pamięci dla danych metapliku.

  • Po uaktualnieniu pamięci RAM Menedżer zadań nie wyświetlał więcej używanej pamięci. Jednak RamMap zgłosił, że wiele GB danych metapliku jest przechowywanych jako dane rezerwowe. Najwyraźniej dane w trybie gotowości mogą mieć znaczący wpływ.

Narzędzia użyte do analizy:

Paul B.
źródło
Czy zwiększenie pamięci fizycznej poprawiło czasy reakcji? Nie skonfigurowałeś żadnych ustawień rejestru?
D-Klotz,
1
Tak. Wcześniej bawiłem się ustawieniami rejestru. Ale w końcu po dodaniu pamięci nie było potrzeby zmiany.
Paul B.
Pamięć rezerwowa to regiony pamięci gotowe do użycia przez programy. Ale ponieważ nie są jeszcze używane, system operacyjny wykorzysta je jako pamięć podręczną. Gdy jakikolwiek program potrzebuje tej pamięci, zostanie natychmiast zwolniony
phuclv