Я смотрю на эту настройку:
- Windows Server 2012
- Диск NTFS 1 ТБ, кластеры 4 КБ, заполнение ~ 90%
- ~ 10M файлов, хранящихся в 10000 папок = ~ 1000 файлов / папок
- Файлы в основном довольно маленькие <50 КБ
- Виртуальный диск размещен на дисковом массиве
Когда приложение обращается к файлам, хранящимся в случайных папках, чтение каждого файла занимает 60-100 мс. С помощью инструмента тестирования кажется, что задержка происходит при открытии файла. Чтение данных тогда занимает лишь часть времени.
Таким образом, это означает, что чтение 50 файлов может легко занять 3-4 секунды, что намного больше, чем ожидалось. Запись выполняется в пакетном режиме, поэтому производительность здесь не проблема.
Я уже следовал советам по SO и SF, чтобы прийти к этим числам.
- Использование папок для уменьшения количества файлов в папке ( Хранение миллиона изображений в файловой системе )
- Запуск
contig
для дефрагментации папок и файлов ( https://stackoverflow.com/a/291292/1059776 ) - 8.3 имена и время последнего доступа отключены ( Настройка файловой системы NTFS для производительности )
Что делать со временем чтения?
- Считайте, что 60-100 мс на файл будут в порядке (не так ли?)
- Есть идеи, как улучшить настройку?
- Существуют ли инструменты мониторинга низкого уровня, которые могут определить, на что именно тратится время?
ОБНОВИТЬ
Как уже упоминалось в комментариях, система запускает Symantec Endpoint Protection. Однако его отключение не меняет время чтения.
PerfMon измеряет 10-20 мс на чтение. Это будет означать, что для чтения любого файла требуется ~ 6 операций чтения ввода-вывода, верно? Будет ли это поиск MFT и проверки ACL?
MFT имеет размер ~ 8,5 ГБ, что больше, чем основная память.
источник
Ответы:
Серверу не хватило памяти. Вместо кэширования данных метафайла NTFS в памяти каждый доступ к файлу требовал многократного чтения с диска. Как обычно, проблема становится очевидной, когда вы ее видите. Позвольте мне поделиться тем, что омрачило мою точку зрения:
Сервер показал 2 ГБ памяти, доступной как в диспетчере задач, так и в RamMap. Поэтому либо Windows решила, что доступной памяти недостаточно для хранения значимой части данных метафайла. Или какое-то внутреннее ограничение не позволяет использовать последний бит памяти для данных метафайла.
После обновления RAM Task Manager не будет показывать больше используемой памяти. Тем не менее, RamMap сообщил, что несколько метабайлов данных ГБ хранятся в качестве резервных данных. По-видимому, данные в режиме ожидания могут оказать существенное влияние.
Инструменты, используемые для анализа:
fsutil fsinfo ntfsinfo driveletter:
показать размер NTFS MFT (или NTFSInfo )источник