Мы написали приложение, которое выполняет небольшие (22kB) записи в несколько файлов одновременно (один поток, выполняющий асинхронную запись в очереди в нескольких местах от имени других потоков) на том же локальном томе (RAID1) ,
99,9% записей являются малой задержкой, но иногда (возможно, каждую минуту или две) мы получаем одну или две огромные записи задержек (я видел 10 секунд и выше) без каких-либо реальных объяснений.Задержка IRP_MJ_WRITE до 15 секунд
Платформа: Win2003 Сервер с NTFS.
Мониторинг: Монитор процессов Sysinternals и собственное ведение журнала приложений.
Мы пытались несколько вещей, чтобы попытаться решить это, которые были почерпнутые из нескольких веб-сайтов, например:
Создание первой части имен файлов, уникальных для помощи поколения 8.3 имя
Запись файлов в несколько каталогов
Changing Intel Disk Write Caching
Windows File/Printer Sharing
Минимизация памяти используется
Баланс
Увеличить скорость передачи данных для обмена
максимально увеличить пропускную способность для сетевых приложений файл
Система-> дополнительно-> достижение максимальной эффективности> Расширенный
NtfsDisableLastAccessUpdate - использовать Fsutil поведение множества disablelastaccess 1
отключить генерацию +8,3 имя - использовать "Fsutil поведение установлено disable8dot3 1" + перезагружать
Включить кэш большого размера файловой системы
Отключить подкачки коды ядра
IO Page Блокировка Limit
Turn Off (или On) служба индексирования
Но ничего, кажется, делает большой разницы. Есть целый ряд вещей, которые мы еще не пробовали, но мы задавались вопросом, не сталкивался ли кто-либо с той же проблемой, причиной и решением (программным или нет)?
Мы можем воспроизвести проблему с помощью IOMeter и простой установки:
Start IOMeter и удалить все, кроме первого рабочего потока в «Топология» с помощью кнопки отключения.
Выберите нить «Рабочий» и поставьте крест в поле рядом с диском, который вы хотите использовать на вкладке «Цели диска», и установите «2000000» в «Максимальный размер диска» (ПРИМЕЧАНИЕ: должно быть не менее 1 ГБ свободного места; размер 512 байт)
Следующая создать новую спецификацию доступа и добавить его в рабочий поток:
Transfer Request Size = 22kb
100% Последовательная
Процент доступа Spec = 100%
Процент Чтение/запись = 100% Написать
Изменить Отображение результатов Частота обновления 5 секунд, программа установки Test Run Time 20 секунд и оба параметра «Число рабочих для создания автоматически» до нуля.
Выберите Рабочую нить на панели «Топология» и нажмите кнопку «Дубликат рабочего» 59 раз, чтобы создать 60 потоков с одинаковыми настройками.
Нажмите кнопку «Перейти» (зеленый флаг) и откройте вкладку «Результаты». «Максимальное время отклика ввода/вывода (мс)» всегда набирает не менее 3500 на нашей машине. Наша машина не совсем медленная (сервер Xeon с 8 ядрами с 4 ГБ и встроенный RAID).
Мне было бы интересно узнать, что получают другие люди. У нас есть ощущение, что это может быть связано с файловой системой NTFS (наша в настоящее время на 75% заполнена фрагментированными файлами), и мы собираемся попробовать несколько вещей вокруг этого принципа. Но это также связано с производительностью диска, так как мы не видим его на RAMDisk, и это не так тяжело для массива RAID10.
Любая помощь очень ценится.
Ричард
правой кнопкой мыши и выберите «Открыть ссылку в новой вкладке»:
ProcMon Result