Как влияет размер полосы RAID на параметры упреждающего чтения?
Я пытаюсь выяснить правильные значения опережающего чтения для установки в массиве RAID10, и мне интересно, должен ли размер полосы RAID учитываться в моих соображениях.
Я слышал противоречивую информацию об этом в прошлом. Однажды я слышал, что вы всегда должны устанавливать значение упреждающего чтения, кратное размеру полосы RAID, и никогда не ниже размера полосы, потому что это минимальный объем данных, которые контроллер RAID когда-либо будет пытаться прочитать сразу.
Однако кто-то еще сказал мне, что установка опережающего чтения ниже размера полосы - это хорошо, и, фактически, может увеличить количество параллельных чтений, которые вы можете выполнять на устройствах в массиве, увеличивая производительность и уменьшая нагрузку на массив.
Так что это? Имеют ли смысл настройки опережающего чтения, не кратные размеру полосы, или нет?
1 ответ
Логика того, когда Linux применяет упреждающее чтение, сложна. Начиная с версии 2.6.23, есть действительно интересное чтение по требованию, а до этого он использовал менее сложный механизм прогнозирования. Цели проектирования опережающего чтения всегда включают в себя отсутствие опережающего чтения, если у вас нет модели доступа для чтения, которая оправдывает его. Таким образом, идея о том, что размер полосы является важной частью данных, в корне не обоснована. Отдельные операции чтения, которые находятся на том конце диапазона ввода-вывода файла, ниже размера полосы, обычно не запускают логику упреждающего чтения и все равно применяют ее к ним. Крошечные значения упреждающего чтения эффективно отключают эту функцию. И ты не хочешь этого.
Когда вы действительно выполняете последовательный ввод-вывод для большого массива RAID10, единственный способ достичь полной пропускной способности многих систем - это работать с опережением чтения. В противном случае Linux не будет отправлять запросы достаточно быстро, чтобы поддерживать чтение массива на полную мощность. Последние несколько раз я тестировал большие дисковые массивы дисков RAID10, в диапазоне 24 дисковых массивов большие настройки упреждающего чтения (>=4096 = 2048 КБ) давали прирост производительности от 50 до 100% при последовательном вводе-выводе, измеренный дд или бонни ++. Попробуйте это сами; запустите bonnie++, сильно увеличьте чтение и посмотрите, что произойдет. Если у вас большой массив, это быстро развеет мысль о том, что числа для чтения с опережением, меньшие, чем типичные размеры полос, имеют какой-то смысл.
Ядро Linux настолько осознает эту необходимость, что даже автоматически увеличивает скорость чтения при создании некоторых типов массивов. Посмотрите на этот пример из системы с ядром 2.6.32:
[root@toy ~]# blockdev --report
RO RA SSZ BSZ StartSec Size Device
rw 256 512 4096 0 905712320512 /dev/md1
rw 768 512 512 0 900026204160 /dev/md0
Почему с опережением чтения 256 (128 КБ) на md1 и 768 (384 КБ) на md0? Это связано с тем, что md1 представляет собой трехдисковый RAID0, и Linux увеличивает скорость чтения, зная, что у него нет надежды на достижение полной скорости для массива такого размера со значением по умолчанию 256. Даже это на самом деле слишком мало; он должен быть 2048 (1024 КБ) или больше, чтобы достичь максимальной скорости, на которую способен небольшой массив.
Большая часть знаний о низкоуровневых настройках RAID, таких как размеры полос и выравнивание, заключается именно в этом: знания, а не реальность. Запустите некоторые тесты в нескольких настройках упреждающего чтения, посмотрите, что произойдет, и тогда вы будете знать, с какими хорошими фактами работать.