Назад | Перейти на главную страницу

Низкая производительность на NTFS-диске с большим количеством файлов

Я смотрю на эту установку:

Когда приложение обращается к файлам, хранящимся в случайных папках, чтение каждого файла занимает 60-100 мс. С тестовым инструментом кажется, что при открытии файла возникает задержка. Тогда чтение данных занимает лишь часть времени.

В итоге это означает, что чтение 50 файлов может занять 3-4 секунды, что намного больше, чем ожидалось. Запись выполняется партиями, поэтому производительность здесь не проблема.

Я уже последовал совету по SO и SF, чтобы получить эти цифры.

Что делать со временем чтения?

ОБНОВИТЬ

  1. Как упоминалось в комментариях, в системе работает Symantec Endpoint Protection. Однако его отключение не влияет на время чтения.

  2. PerfMon измеряет 10-20 мс на чтение. Это будет означать, что любое чтение файла требует ~ 6 операций чтения ввода-вывода, верно? Будет ли это поиском MFT и проверкой ACL?

  3. MFT имеет размер ~ 8,5 ГБ, что больше, чем основная память.

На сервере не хватило памяти. Вместо кеширования данных метафайлов NTFS в памяти для каждого доступа к файлу требовалось несколько операций чтения с диска. Как обычно, проблема очевидна, как только вы ее видите. Позвольте мне поделиться тем, что омрачало мою перспективу:

  • Сервер показал 2 ГБ памяти, доступной как в диспетчере задач, так и в RamMap. Так что либо Windows решила, что доступной памяти недостаточно для хранения значимой части данных метафайлов. Или какое-то внутреннее ограничение не позволяет использовать последний бит памяти для данных метафайла.

  • После обновления диспетчер задач RAM не показывал больше используемой памяти. Однако RamMap сообщил, что несколько ГБ данных метафайлов хранятся в качестве резервных данных. Судя по всему, данные в режиме ожидания могут иметь существенное влияние.

Инструменты, используемые для анализа:

  • fsutil fsinfo ntfsinfo driveletter: чтобы показать размер NTFS MFT (или NTFSInfo)
  • RamMap чтобы показать распределение памяти
  • Монитор процесса чтобы показать, что каждому чтению файла предшествуют примерно 4 операции чтения с диска: \ $ Mft и диска: \ $ Directory. Хотя я не смог найти точное определение $ Directory, это похоже, связано с MFT также.