13 марта 2010 г.

Read prefetching в Clariion

Предварительная выборка данных с дисков в кэш при запросах на чтение называется Prefetching. Используя эту функциональность Storage Processor (SP) пытается заранее приготовить данные, которые могут понадобиться серверу в ближайшем будущем (механизм read-ahead). Получив запрос на чтение двух последовательно идущих блоков и обнаружив их отсутствие в кэш (read miss), SP в рамках одной или нескольких операций считывает с дисков не только запрашиваемые данные, но и определенное количество последующих блоков. Во многих случаях такой подход дает очень значительный выигрыш в производительности по сравнению со стандартной обработкой отдельных read misses.

Read prefetching настраивается индивидуально для каждой LUN. Возможны 3 типа предвыборки данных (Prefetch type)
  • none – функциональность выключена на данном томе
  • constant – размер предварительной выборки данных фиксирован
  • variable – размер предварительной выборки данных зависит от размер запрашиваемого блока (задан по умолчанию)
Для того, чтобы процессы предвыборки на различных томах не мешали друг другу, предусмотрена возможность выполнения prefetching не одним, а несколькими запросами, которыми называются сегментами (segments). Единовременно с одного тома может осуществляться prefetching только одного сегмента. При настройке constant type мы должны всегда отдельно задавать Prefetch size и Segment size. Естественно, Segment size не может быть больше Prefetch size. Оба параметра определяются количеством блоков (по 512KB). Максимальные значения можно посмотреть в документации.

В случае variable type вместо Prefetch size и Segment size должны настраиваться Prefetch multiplier и Segment multiplier. Они задают соотношение размера затребованного блока и объема Prefetching. Так при размере блока 16KB, Prefetch multiplier 8 и Segment multiplier 4, будет осуществляться предварительная выборка данных двумя сегментами по 64KB. По умолчанию оба параметра multiplier равны 4.

При запросах очень большого размера prefetching перестает работать эффективно и тратит ресурсы дискового массива вхолостую. Поэтому его лучше отключить. Параметр Disable size говорит системе когда это следует сделать. Он дается в количестве блоков (по 512KB) и по умолчанию равен 129 (чуть больше 64KB).

Скорость доставки данных при prefetching определяется производительностью дисков. При большом количестве последовательных запросов (обычно маленькими блоками) система просто не успевает сделать предвыборку и prefetching начинает просто мешать. Параметр Idle count (честно говоря не понимаю, при чем здесь idle, хотя причина такого названия, скорее всего историческая... в старых документах определение параметра было другим) ограничивает количество необработанных запросов к LUN, при котором работает prefetching. По умолчанию, если количество таких запросов превышает 40, предвыборка выключается.

Комментариев нет:

Отправить комментарий

Примечание. Отправлять комментарии могут только участники этого блога.