Назад | Перейти на главную страницу

IRP_MJ_WRITE задержка до 15 секунд

Мы написали приложение, которое выполняет небольшую (22 КБ) запись в несколько файлов одновременно (один поток выполняет асинхронную запись в очереди в несколько мест от имени других потоков) на одном и том же локальном томе (RAID1).
99,9% операций записи выполняются с низкой задержкой, но иногда (возможно, каждую минуту или две) мы получаем одну или две записи с огромной задержкой (я видел 10 секунд и выше) без каких-либо реальных объяснений.

Платформа: Win2003 Server с NTFS.
Мониторинг: Sysinternals Process Monitor (см. Ссылку ниже) и ведение журнала нашего собственного приложения.

Мы попробовали несколько вещей, чтобы попытаться решить эту проблему, которые были почерпнуты из нескольких веб-сайтов, например:

Но, похоже, ничего особенного не имеет. Есть множество вещей, которые мы еще не пробовали, но мы задались вопросом, сталкивался ли кто-нибудь с той же проблемой, причиной и решением (программным или нет)?

Мы можем воспроизвести проблему с помощью IOMeter и простой настройки:

  1. Запустите IOMeter и удалите все, кроме первого рабочего потока в «Топологии», используя кнопку отключения.

  2. Выберите рабочий поток и поставьте крестик в поле рядом с диском, который вы хотите использовать, на вкладке «Дисковые цели» и укажите «2000000» в поле «Максимальный размер диска» (ПРИМЕЧАНИЕ: должно быть не менее 1 ГБ свободного места; размер сектора составляет 512 байт).

  3. Затем создайте новую спецификацию доступа и добавьте ее в рабочий поток:

    • Размер запроса на передачу = 22 КБ

    • 100% последовательный

    • Процент спецификации доступа = 100%

    • Процент чтения / записи = 100% записи

  4. Измените частоту обновления отображения результатов на 5 секунд, время выполнения настройки теста на 20 секунд и установите оба параметра «Число рабочих для автоматического создания» на ноль.

  5. Выберите рабочий поток на панели «Топология» и 59 раз нажмите кнопку «Дублировать рабочий», чтобы создать 60 потоков с одинаковыми настройками.

Нажмите кнопку «Go» (зеленый флажок) и просмотрите вкладку «Результаты». «Максимальное время отклика ввода-вывода (мс)» на нашей машине всегда составляет не менее 3500. Наша машина не совсем медленная (8-ядерный стоечный сервер Xeon с 4 ГБ и встроенным RAID).

Мне было бы интересно посмотреть, что получают другие люди. У нас есть ощущение, что это может быть связано с файловой системой NTFS (наша в настоящее время на 75% заполнена фрагментированными файлами), и мы собираемся попробовать несколько вещей, связанных с этим принципом. Но это также связано с производительностью диска, поскольку мы не видим этого на RAMDisk, и это не так серьезно на массиве RAID10.

Любая помощь очень ценится.
Ричард

Щелкните правой кнопкой мыши и выберите «Открыть ссылку в новой вкладке»:
ProcMon Результат

Теперь у меня есть дополнительная информация по этому вопросу.

Протестировав описанный тест IOMeter на 12 разных машинах с использованием различного оборудования, я сузил его до определенного набора микросхем RAID (3 разные машины с одним набором микросхем демонстрируют такое поведение при использовании RAID1 и RAID10). Все остальные машины имеют результат как минимум на порядок лучше.

Чипсет: Intel 631xESB / 632xESB SATA RAID (он же ESB2)

См. Этот пост на сайте Intel для получения дополнительной информации и, надеюсь, ответа от Intel:
Intel 631xESB / 632xESB SATA RAID (он же ESB2) пишет медленно

Ричард