Я пытаюсь выяснить правильные значения упреждающего чтения для установки в массиве RAID10, и мне интересно, должен ли размер полосы RAID влиять на мои соображения.
Я слышал противоречивую информацию об этом в прошлом. Однажды я слышал, что вы всегда должны устанавливать значение упреждающего чтения, кратное размеру полосы RAID, и никогда не ниже размера полосы, потому что это минимальный объем данных, который RAID-контроллер когда-либо попытается прочитать за один раз.
Однако кто-то еще сказал мне, что установка упреждающего чтения ниже размера полосы - это нормально и может, фактически, увеличить количество параллельных чтений, которые вы можете выполнять между устройствами в массиве, повышая производительность и уменьшая нагрузку на массив.
Так что это? Имеют ли смысл настройки упреждающего чтения, не кратные размеру полосы?
Логика того, когда Linux применяет упреждающее чтение, сложна. Начиная с версии 2.6.23, появилась действительно необычная Считывание по требованию, до этого использовался менее сложный механизм прогнозирования. Цели проектирования упреждающего чтения всегда включают отказ от упреждающего чтения, если у вас нет шаблона доступа для чтения, который его оправдывает. Таким образом, идея о том, что размер полосы является важным элементом данных, в корне неверна. Отдельные чтения, которые находятся на этом конце диапазона файлового ввода-вывода, ниже размера полосы, обычно не запускают логику упреждающего чтения и все равно применяют ее к ним. Крошечные значения упреждающего чтения эффективно отключают эту функцию. А ты этого не хочешь.
Когда вы действительно выполняете последовательный ввод-вывод для большого массива RAID10, единственный способ достичь полной пропускной способности многих систем - это заставить работать упреждающее чтение. В противном случае Linux не будет отправлять запросы достаточно быстро, чтобы использовать весь потенциал чтения массива. Последние несколько раз я тестировал большие дисковые массивы дисков RAID10, в диапазоне 24 дисковых массивов, большие настройки упреждающего чтения (> = 4096 = 2048 КБ) дали прирост производительности от 50 до 100% при последовательном вводе-выводе, как измерено. пользователя dd или bonnie ++. Попробуйте сами; запустите 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 - это 3-дисковый RAID0, и Linux увеличивает упреждающее чтение, зная, что у него нет надежды на достижение полной скорости в массиве такого размера со значением по умолчанию 256. Даже это на самом деле слишком мало; он должен быть 2048 (1024 КБ) или больше, чтобы достичь максимальной скорости, на которую способен небольшой массив.
Большая часть знаний о низкоуровневых настройках RAID, таких как размеры полос и выравнивание, - это просто знания, а не реальность. Самостоятельно запустите тесты с несколькими настройками упреждающего чтения, посмотрите, что произойдет, и тогда вы будете знать полезные факты, с которыми можно работать.