Я смотрю на эту настройку:
- 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 ГБ, что больше, чем основная память.