Налаштування читати для LVM, Device-Mapper, Software Raid та Block Devices - що виграє?


26

Я намагався знайти пряму відповідь на це, і це виявилося невловимим. Це питання та його відповідь близькі, але насправді не дають мені конкретики, яку я хотів би. Почнемо з того, що я думаю, що знаю.

Якщо у вас є стандартний блок пристрою, і ви 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 досить великий, щоб виконати запит з одним доступом.


Який дистрибутив Linux ви використовуєте? Ви використовуєте апаратний чи програмний рейд? Схоже, програмне забезпечення. Якщо апаратне забезпечення, то яку карту / чіпсет ви використовуєте якнайбільше цього, встановлюється та зберігається у програмному забезпеченні пристрою.
Джейсон Хантлі

Крім того, налаштування RA значною мірою залежать від схеми розподілу вашої файлової системи. Ви використовуєте ext4?
Джейсон Хантлі

Я фактично згадую, що це програмне забезпечення RAID та LVM у питанні, так що так - програмне забезпечення. Що стосується файлової системи, мене зацікавила би різниця між XFS та ext4 тут, але відповіді на те й те, що було б добре, хоча
Адам C

Для кращих показників XFS може бути налаштовано сильно. Це висвітлено в кількох місцях на цьому веб-сайті: тут і тут ... Який дистрибутив Linux ви використовуєте? Це грає фактор, тому що є і деякі інструменти, що стосуються розповсюдження, також доступні.
ewwhite

Це не питання щодо продуктивності, а більш конкретний - я просто хочу знати про параметри RA та про те, як вони перекладаються через / взаємодіють із шарами RAID LVM / Software
Adam C,

Відповіді:


11

Як установка RA передається по ланцюгу віртуальних блокових пристроїв?

Це залежить. Припустимо, ви перебуваєте всередині Xen domU і маєте RA = 256. Ваш / dev / xvda1 є фактичним значенням LV на dom0, видному під / dev / dm1. Отже, у вас RA (domU (/ dev / xvda1)) = 256 і RA (dom0 (/ dev / dm1)) = 512. Це матиме такий ефект, що ядро ​​dom0 отримає доступ / dev / dm1 з іншим RA, ніж ядро ​​domU. Просто як це.

Інша ситутація відбудеться, якщо припустити / dev / md0 (/ dev / sda1, / dev / sda2).

blockdev --report | grep sda
rw   **512**   512  4096          0   1500301910016   /dev/sda
rw   **512**   512  4096       2048      1072693248   /dev/sda1
rw   **512**   512  4096    2097152   1499227750400   /dev/sda2
blockdev --setra 256 /dev/sda1
blockdev --report | grep sda
rw   **256**   512  4096          0   1500301910016   /dev/sda
rw   **256**   512  4096       2048      1072693248   /dev/sda1
rw   **256**   512  4096    2097152   1499227750400   /dev/sda2

Установка / dev / md0 RA не вплине на / dev / sdX блок пристроїв.

rw   **256**   512  4096       2048      1072693248   /dev/sda1
rw   **256**   512  4096    2097152   1499227750400   /dev/sda2
rw   **512**   512  4096          0      1072627712   /dev/md0

Так що, на мою думку, ядро ​​отримує доступ до блочного пристрою таким чином, який він фактично встановлений. До одного логічного тома можна отримати доступ через RAID (що є його частиною) або пристроєм devicemapper і кожен з іншим RA, який буде дотримано.

Отже, відповідь - налаштування RA це IMHO не передається вниз по ланцюгу блокових пристроїв, але незалежно від налаштування RA верхнього рівня, буде використовуватися для доступу до складових пристроїв

Чи все це козово, тому що це блоковий пристрій верхнього рівня, до якого ви фактично отримуєте доступ?

Якщо ви маєте на увазі глибоке поширення "козиря всіх" - відповідно до мого попереднього коментаря, я думаю, що у вас можуть бути різні РА для різних пристроїв у системі.

Чи вплине lvchange -r на пристрій dm-0 і не з’явиться тут?

Так, але це конкретний випадок. Припустимо, що у нас є / dev / dm0, який є пристроєм LVM / dev / vg0 / blockdevice. Якщо ти зробиш:

lvchange -r 512 /dev/vg0/blockdevice

/ dev / dm0 також зміниться, оскільки / dev / dm0 та / dev / vg0 / blockdevice - це саме той самий блок пристроїв, коли мова йде про доступ до ядра.

Але припустимо, що / dev / vg0 / blockdevice те саме, що / dev / dm0 та / dev / xvda1 у Xen domU, який використовує його. Встановлення RA / dev / xvda1 набуде чинності, але dom0 побачить, все ще є його власний RA.

Що ви використовуєте, еквівалентний розміру сектора вище, щоб визначити фактичне значення для читання головою для віртуального пристрою:

Я зазвичай виявляю РА, експериментуючи з різними значеннями і тестуючи його з hdparm.

Розмір смуги RAID (для md0)?

Само, як і вище.

Чи грає FS (я в першу чергу зацікавлений у ext4 та XFS)?

Звичайно - це дуже велика тема. Я рекомендую почати тут http://archives.postgresql.org/pgsql-performance/2008-09/msg00141.php


Це дуже близько до того, що я шукаю, і в чому я підозрював - чи можете ви мені просто прояснити одне: у ситуації / dev / md0 (/ dev / sda1, / dev / sda2) я знаю, що ви можете встановити окремі значення RA, але якщо ви скажете mount / data on / dev / md0 і читаєте з нього файл - чи 512 RA використовується для читання з / dev / sda1 та / dev / sda2 (тобто 512 використовується для обох) або 256 використовується на кожному? Якщо перший, здавалося б, розумним було б встановити RAID0 RA: SUM (RA пристроїв у RAID0)
Адам C

1
Я просто кажу з мого досвіду - встановлення RA = 512 на / dev / md0 з / dev / sdX дисками під, діє точно так само, як ми мали доступ до / dev / sdX з RA = 512, незважаючи на те, що, наприклад, ми можемо мати RA = 256 налаштування на нижньому блоці пристрою. В цьому випадку налаштування 256 буде ігноровано (зауважте, що / dev / sda є марним як блок-пристрій, якщо воно є частиною / dev / md0). Я не програміст ядра, але це здається логічним і, здається, це підтверджується моєю практикою. Так переосмислити. 3 нитки читання з / dev / md0, RA = 512, що дорівнює 3 потокам читання з / dev / sd {a, b, c} з RA = 512.
wojciechz

Щиро дякую! Я трохи відредагував речі, щоб зробити це зрозумілішим у відповіді. Чи можу я попросити ще одну річ, перш ніж приймати? Чи є у вас приклад (або посилання на один) для використання hdparm для тестування RA? Я збирався зробити щось подібне сам, тож якщо є хороша довідка, це заощадить мені час.
Адам С

Це не складно, але залежить, що ви хочете перевірити. Будь ласка, зверніться до посібника з hdparm. Якщо ви хочете перевірити читання дисків (що є похідною від readahead), ви можете випустити таку команду, як hdparm -t / dev / md0 . Результат покаже щось на кшталт хронометражу, записаного на диску: 310 Мб за 3,02 секунди = 102,79 Мб / сек . На останнє значення, як правило, сильно впливає налаштування RA.
wojciechz

1
ах, так що не пряме вимірювання - зрозуміло, приймаю зараз - дякую за допомогу :)
Адам C

4

Знати відповідь важче пояснити, тому я зроблю це на прикладі. Скажімо, для цього у вас є 3 блокові пристрої, які ви встановлюєте, щоб ваш RA сказав 4 (4 * 512 байт), вважаючи стандартний сектор. Якщо ви скажете використовувати схему RAID-5 за допомогою 3-х дисків, будь-який зчитувач, який навіть торкнувся смужки на унікальному диску, з’єднав би RA з фактором, на який ви спочатку встановили блоковий пристрій RA. Отже, якщо ваше читання охоплювало саме всі 3 диски, то ваш ефективний РА буде 12 * 512 байт. Це може ускладнюватися сеттином RA на різних рівнях, наприклад, MD або LVM. Як правило, якщо моя програма отримує перевагу від RA, я встановлюю її на найвищому рівні, тому я не можу складати RA без потреби. Потім я запускаю файлову систему в секторі 2049 і зміщую кожен сектор, починаючи з числа, розділеного на 8. Я можу відмовитися від того, що ви запитуєте, але це моє 2 ¢.


Отже, ви говорите, що незалежно від налаштувань RA на пристрої верхнього рівня, вони просто передаються вниз. Тому, якщо ви використовували LVM -> 2 x RAID -> 4 x фізичний диск кожен, і у вас було RA 4, то, оскільки є 8 фізичних пристроїв, ви отримуєте ефективний РА 32. Як би ви налаштували розмір шматка / смуги RAID, щоб бути ефективним у цьому сценарії - я вважаю, що ви хочете, щоб RA охоплював всю смугу, щоб вам не довелося двічі отримувати доступ
Адам С

До речі, якщо я маю на це право, в описуваному сценарії, я думаю, я хотів би, щоб фрагмент / смуга RAID0 був встановлений як X, де X = RA * 512 байт. Тому, якщо у мене шматок / смуга 64k (mdadm за замовчуванням), то мінімальний RA, який я повинен використовувати, - це 128, оскільки це отримує мені всю смугу за один кадр.
Адам С

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.