2010-01-28 2 views
0

Мы написали приложение, которое выполняет небольшие (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 и простой установки:

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

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

  3. Следующая создать новую спецификацию доступа и добавить его в рабочий поток:

    • Transfer Request Size = 22kb

    • 100% Последовательная

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

    • Процент Чтение/запись = 100% Написать

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

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

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

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

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

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

ответ

0

Эта проблема не кажется, ошибка программного обеспечения, так на самом деле не относится к StackOverflow.

Для этого я открыл поток на ServerFault, который, в свою очередь, ссылается на поток на сайте Intel.

Смежные вопросы