Я переглядаю цю настройку:
- Windows Server 2012
- 1 TB накопичувач NTFS, 4 Кб кластери, ~ 90% повно
- ~ 10М файлів, що зберігаються у 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 ГБ, що більше, ніж основна пам'ять.