Высокая пульсация ввода-вывода при записи с ошибками dtrace

Мы наблюдаем «пульсирующие» записи на диск (от 1 записи в секунду до 142+ записей в секунду) примерно каждые 10 секунд.

См. этот пример изображения: https://discussions.apple.com/servlet/JiveServlet/showImage/2-22394173-269851/Screen+Shot+2013-07-03+at+13.22.28.png

Мы покопались в этих «пульсирующих» записях и обнаружили, что они происходят ровно в то же время, что и эти ошибки из IOTOP:

dtrace: error on enabled probe ID 5 (ID 992: io:mach_kernel:buf_strategy:start): illegal operation in action #3 at DIF offset 0

«Пульсация» происходит только тогда, когда указанная выше ошибка проявляется в IOTOP.

Примечание. Мы используем программное обеспечение Apple RAID для зеркалирования двух дисков.

Любые предложения, помощь и советы будут с благодарностью. Заранее спасибо.


person Ted Wilmont    schedule 03.07.2013    source источник


Ответы (1)


Пульсирующий шаблон ввода-вывода, который вы видите, характерен для приложений, в которых многие/большинство операций записи файловой системы являются асинхронными — это связано с тем, что файловая система группирует операции записи, поэтому она может выполнять множество операций одновременно, чтобы избежать выполнения одного поиска на диске при записи. . Самый распространенный пример, который я могу придумать, — это запись данных в базу данных — за исключением журнала упреждающей записи базы данных, все обычно записывается асинхронно; другие шаблоны доступа к транзакциям имеют тенденцию быть похожими, поскольку они имеют журнал упреждающей записи для восстановления, если некоторые асинхронные записи будут потеряны в результате сбоя. Это распространенный шаблон доступа, который не обязательно является проблемой, но может стать проблемой, когда ваш диск сильно фрагментирован и файловая система не может записывать все в пакетном режиме (вызывая много операций поиска, чего она и пыталась избежать) .

Ошибка DTrace/iotop, которую вы видите, означает наличие ошибки либо в самой реализации DTrace, либо в сценарии iotop DTrace. Глядя на исходный код iotop/usr/bin/iotop на OS X), есть три обратных вызова io:::start, которые могут быть виновниками. Вполне возможно, что в скрипте для некоторых типов ввода-вывода имеется какой-то доступ по нулевому указателю, но это маловероятно, судя по сценарию и аргументам, которые io:::start принимают зонды. Возможно, это лучше всего решить с помощью отчета об ошибке в Apple.

person Dan    schedule 15.07.2013
comment
Большое спасибо за ваш информативный комментарий. Я изучил это немного глубже, и кажется, что это MySQL вызывает эти тяжелые пульсирующие записи. Когда в таблицу добавляется или обновляется запись, нужно ли перезаписывать всю таблицу на диск или можно добавлять/изменять существующие данные? Мы используем таблицы MyISAM. Мы также используем запросы SELECT с полями ORDER BY и TEXT, которые, конечно, требуют записи во временную дисковую таблицу, однако они не будут опрашиваться, они будут записываться по мере поступления запроса. Любая помощь в диагностике этого очень ценится. . - person Ted Wilmont; 12.08.2013
comment
Итак, копнув еще глубже, я нашел ТОЧНУЮ причину проблемы. Кажется, что launchd в OS X записывает на диск (возможно, журналирование диска в OS X) следующим образом: 17:55:09.274758 IOCTL <DKIOCSYNCHRONIZECACHE> /dev/disk2 0.073689 W launchd.263* - person Ted Wilmont; 12.08.2013