В случае нескольких уровней (физические диски -> md -> dm -> lvm), как взаимодействуют планировщики, параметры опережения чтения и другие параметры диска?
Представьте, что у вас есть несколько дисков (/ dev / sda - / dev / sdd), которые являются частью программного RAID-устройства (/ dev / md0), созданного с помощью mdadm. Каждое устройство (включая физические диски и / dev / md0) имеет свои собственные настройки для планировщика ввода-вывода (изменилось вот так) и вперед (изменено с помощью blockdev). Когда вы добавляете такие вещи, как dm (crypto) и LVM, вы добавляете еще больше слоев с их собственными настройками.
Например, если физическое устройство имеет опережающее чтение на 128 блоков, а у RAID - на 64 блока, что учитывается, когда я выполняю чтение из / dev / md0? Пытается ли драйвер md выполнить чтение из 64 блоков, которое драйвер физического устройства затем преобразует в чтение из 128 блоков? Или заголовок чтения RAID «проходит» на нижележащее устройство, что приводит к чтению 64 блоков?
То же самое и с планировщиками? Должен ли я беспокоиться о нескольких уровнях планировщиков ввода-вывода и о том, как они взаимодействуют, или / dev / md0 эффективно переопределяет базовые планировщики?
Пытаясь ответить на этот вопрос, я нашел некоторые интересные данные о планировщиках и инструментах, которые могут помочь в этом разобраться:
Если вы выполняете чтение из md0, то используется опережение чтения для md0. Если вы выполнили чтение из sda, который является компонентом md0, тогда он будет использовать настройку sda. Устройство сопоставления устройств просто разделяет ввод-вывод на несколько операций чтения и записи для создания RAID, но все это ниже уровня блочного кеша, где происходит опережающее чтение. Стек хранилища выглядит так:
файловая система - обходит кеш при открытии с помощью O_DIRECT
блочный кеш - опережающее чтение, кеш записи, планировщик
устройство-сопоставитель - dm, lvm, программный RAID, моментальный снимок и т. д.
sd - драйвер диска
SCSI - обработка ошибок, маршрутизация устройств
драйвер оборудования - карта SCSI, карта FC, Ethernet
Обратите внимание, что когда вы это сделаете
dd if=/dev/sda of=foo
вы читаете sda как файл, поэтому вы просматриваете блочный кеш. Чтобы перейти прямо к диску, выполните
dd if=/dev/sda of=foo iflag=direct
Что касается планировщиков лифта ввода-вывода, они существуют только в драйвере диска (sd). Каталог очередей отсутствует в / sys / block / md или / sys / block / dm. Вы проходите сортировку дискового элеватора только один раз.