Я намагався знайти пряму відповідь на це, і це виявилося невловимим. Це питання та його відповідь близькі, але насправді не дають мені конкретики, яку я хотів би. Почнемо з того, що я думаю, що знаю.
Якщо у вас є стандартний блок пристрою, і ви sudo blockdev --report
працюєте, ви отримаєте щось подібне:
RO RA SSZ BSZ StartSec Size Device
rw 256 512 4096 0 500107862016 /dev/sda
rw 256 512 4096 2048 399999238144 /dev/sda1
rw 256 512 1024 781252606 1024 /dev/sda2
Тепер ви вирішили змінити за замовчуванням 256 на 128, використовуючи --setra
будь-який з розділів, і це відбувається з усім блочним пристроєм, наприклад:
sudo blockdev --setra 128 /dev/sda1
sudo blockdev --report
RO RA SSZ BSZ StartSec Size Device
rw 128 512 4096 0 500107862016 /dev/sda
rw 128 512 4096 2048 399999238144 /dev/sda1
rw 128 512 1024 781252606 1024 /dev/sda2
Це має для мене ідеальний сенс - пристрій рівня блоку є там, де налаштування, а не перегородка, тому все змінюється. Також для мене має сенс співвідношення за замовчуванням між налаштуваннями RA та пристроєм, як правило:
RA * sector size (default = 512 bytes)
Отже, зміни, внесені мною вище, із розміром сектору за замовчуванням зменшаться з 80 к 64 к. Все добре і добре поки що.
Однак, що відбувається, коли ми додаємо в програмний RAID або LVM та пристрій-маппер? Уявіть, що ваш звіт виглядає так:
RO RA SSZ BSZ StartSec Size Device
rw 256 512 4096 0 10737418240 /dev/xvda1
rw 256 512 4096 0 901875499008 /dev/xvdb
rw 256 512 4096 0 108447924224 /dev/xvdj
rw 256 512 4096 0 108447924224 /dev/xvdi
rw 256 512 4096 0 108447924224 /dev/xvdh
rw 256 512 4096 0 108447924224 /dev/xvdg
rw 4096 512 4096 0 433787502592 /dev/md0
rw 4096 512 512 0 429496729600 /dev/dm-0
У цьому випадку ми маємо на пристрої LMM-карту dm-0 на вершині md0, створеного mdadm, що насправді є смужкою RAID0 на чотирьох пристроях xvdg-j.
І md0, і dm-0 мають параметри 4096 для RA, що набагато вище, ніж блокові пристрої. Отже, кілька питань тут:
- Як установка RA передається по ланцюгу віртуальних блокових пристроїв?
- Чи все це козово, тому що це блоковий пристрій верхнього рівня, до якого ви фактично отримуєте доступ?
- Чи
lvchange -r
вплине на пристрій dm-0 і не з’явиться тут?
Якщо це так просто, як налаштування RA з віртуального блокового пристрою, який ви використовуєте, передається, чи означає це, що зчитування з dm-0 (або md0) перетворюється на 4 x 4096 RA? (по одному на кожному блоковому пристрої). Якщо це так, це означатиме, що ці параметри вибуховують розмір читального коду у вищезгаданому сценарії.
Тоді з точки зору з'ясування того, що насправді робить програма для читання головок:
Що ви використовуєте, еквівалентний розміру сектора вище, щоб визначити фактичне значення для читання головою для віртуального пристрою:
- Розмір смуги RAID (для md0)?
- Якийсь інший еквівалент розміру сектору?
- Це налаштовується, і як?
- Чи грає FS (я в першу чергу зацікавлений у ext4 та XFS)?
- Або, якщо він тільки що передається, це просто настройка RA з пристрою верхнього рівня, помножена на розмір сектору реальних блокових пристроїв?
Нарешті, чи може бути якесь переважне співвідношення між розміром смуги та налаштуванням RA (наприклад)? Тут я думаю, що якщо смужка є найменшим елементом, який збирається зняти з RAID-пристрою, то в ідеалі не хотілося б, щоб там було 2 дискових доступу для обслуговування цієї мінімальної одиниці даних і хотіли б зробити RA досить великий, щоб виконати запит з одним доступом.