Может ли включение кэша обратной записи контроллера RAID повлиять на общую производительность?

У меня есть 8-ми дисковый RAID 10, подключенный к Adaptec 5805Z, с Centos 5.5 и планировщиком сроков.

Основной dd читать тест показывает 400мб / с, а базовый dd написать тест показывает примерно то же самое.

Когда я запускаю их одновременно, я вижу снижение скорости чтения до ~5 Мбит / с, в то время как скорость записи остается примерно равной 400 Мбит / с. Выход из iostat -x как и следовало ожидать, показывает, что очень мало транзакций чтения выполняется, пока диск засыпается записями.

Если я выключаю кэш обратной записи контроллера, я не вижу разделения 50:50, но я вижу заметное улучшение, где-то около 100 МБ / с читает и 300 МБ / с пишет. Я также обнаружил, что если я уменьшу значение nr_requests в очереди накопителя (где-то около 8 кажется оптимальным), я получу 150 МБ / с и 150 МБ / с; то есть. снижение общей пропускной способности, но, безусловно, больше подходит для моей рабочей нагрузки.

Это реальное явление? Или мой синтетический тест слишком упрощен?

Причина, по которой это может произойти, кажется достаточно ясной: когда планировщик переключается с чтения на запись, он может выполнять кучу запросов на запись, поскольку все они просто попадают в кэш контроллера, но должны быть выполнены в какой-то момент. Я полагаю, что фактическая запись на диск происходит, когда планировщик снова пытается выполнить чтение, в результате чего выполняется очень мало запросов на чтение.

Это кажется разумным объяснением, но также кажется огромным недостатком использования кэша обратной записи в системе с нетривиальными нагрузками записи. Я искал обсуждения вокруг этого весь день и ничего не нашел. Что мне не хватает?

2 ответа

Решение

Ну, простой dd, вероятно, не лучший способ измерить пропускную способность диска. Это не реалистичная нагрузка. Тем не менее, если вы запускаете ddПожалуйста, передайте oflag=direct флаг в командной строке, чтобы устранить эффект кеша файловой системы. Также см.: Как измерить пропускную способность диска? для предложений о том, как измерить рабочие нагрузки.

Я думаю, что ваш выбор планировщика оказывает большее влияние на ваши результаты, чем что-либо еще. Для RAID-контроллеров с батареей или кэш-памятью с флэш-памятью (кэш-память записи) я использовал для запуска deadline планировщик, но теперь используйте noop Планировщик, если кэш-память 512 МБ или 1 ГБ. Вы можете менять планировщик на лету, поэтому попробуйте выполнить тесты с noop алгоритм и тому oflag=direct и посмотрите, как выглядят результаты.

Ты бегал? bonnie++ или же iozone?

Если вы планируете использовать iozone Вот несколько способов проверить свою производительность. Это лучше чем dd поскольку они допускают тот тип теста, который вы ищете.

iozone -s 4G -a -i 0 -i 1 -i 2

Это будет запускать тесты с набором данных 4 ГБ (-s 4G), используя переменный размер записи и запустите тест записи (-i 0), чтение-тест (-i 1) и случайный тест чтения / записи (-i 2). Выбор размера файла имеет решающее значение. Если вы выберете тот, который помещается в ОЗУ, ваши результаты будут основываться больше на кеше файлов, чем на фактической производительности хранилища. Так что, если у вас есть сервер с 4 ГБ ОЗУ, протестируйте файл с размером, превышающим этот.

Однако, если у вас неприличное количество оперативной памяти (у меня один сервер с 12 ГБ) и вы хотите, чтобы ваши тесты заканчивались менее чем за несколько часов, вы можете предоставить -I опция, которая говорит iozone установить O_DIRECT и обойти кеш файловой системы. Там вы получите истинную производительность подсистемы хранения.

Вы также можете делать тесты, которые проверяют одновременный доступ.

iozone -s 128M -r 4k -t 32 -i 0 -i 1 -i 2

При этом будет запущено 32 параллельных потока объемом 128 МБ, выполняющих те же тесты, что и предыдущая команда, но с размером записи 4 КБ (-r 4k). Рабочий набор составляет 4 ГБ, но некоторые файлы помещаются в кэш-память файла. В зависимости от того, что вы делаете с этим хранилищем, это может быть более точным тестом вашей вероятной производительности. Как и прежде, -I Параметр установит O_DIRECT.

iozone -s 128M -r 4k -l 16 -u 32 -i 0 -i 1 -i 2

Это делает то же самое, что и приведенная выше команда, но запускает серию тестов, начиная с 16 потоков и увеличивая до 32 потоков.

Другие вопросы по тегам