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

11

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

  • Windows Server 2012
  • Диск NTFS 1 ТБ, кластеры 4 КБ, заполнение ~ 90%
  • ~ 10M файлов, хранящихся в 10000 папок = ~ 1000 файлов / папок
  • Файлы в основном довольно маленькие <50 КБ
  • Виртуальный диск размещен на дисковом массиве

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

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

Я уже следовал советам по SO и SF, чтобы прийти к этим числам.

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

  • Считайте, что 60-100 мс на файл будут в порядке (не так ли?)
  • Есть идеи, как улучшить настройку?
  • Существуют ли инструменты мониторинга низкого уровня, которые могут определить, на что именно тратится время?

ОБНОВИТЬ

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

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

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

Пол Б.
источник
Чтобы исключить что-нибудь, не могли бы вы поделиться скриншотом RAMMap ?
Томас Дабасинскас
Вы имеете в виду таблицу File Summary? Теперь, когда вы упомянули об этом, я вижу файл SYMEFA.DB с 900 МБ в памяти, который напоминает мне, что в системе установлен Symantec Endpoint Protection. Может быть, это виновник? Я постараюсь узнать больше.
Пол Б.
На самом деле меня больше интересовало использование метафайла
Томас Дабасинскас
Хорошо понял. Метафайл показывает всего 250 МБ, 40 активных, 210 в режиме ожидания. Кажется нормальным или нет?
Пол Б.
Да, похоже
Томас Дабасинскас

Ответы:

5

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

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

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

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

  • fsutil fsinfo ntfsinfo driveletter:показать размер NTFS MFT (или NTFSInfo )
  • RamMap, чтобы показать распределение памяти
  • Монитор процессов показывает, что каждому чтению файла предшествует около 4 операций чтения на диск: \ $ Mft и диск: \ $ Directory. Хотя я не смог найти точное определение $ Directory, похоже, оно также связано с MFT .
Пол Б.
источник
Так увеличение физической памяти улучшило время отклика? Вы не настраивали параметры реестра?
D-Klotz
1
Да. Я ранее играл с настройками реестра. Но в итоге никаких изменений не потребовалось после добавления памяти.
Пол Б.
Резервная память - это области памяти, которые готовы для использования программами. Но поскольку они еще не используются, ОС будет использовать их в качестве кэша. Когда любой программе понадобится эта память, она будет немедленно освобождена
phuclv