Як взаємодіють pdflush, kjournald, swapd тощо?


17

Нещодавно побачив питання, яке викликало цю думку. Тут не вдалося знайти відповідь або за допомогою машини Google. В основному, мені цікаво знати, як шарується архітектура вводу / виводу ядра. Наприклад, чи kjournaldвідправляється відправлення pdflushв інше чи навпаки? Моє припущення полягає в тому, що pdflush(будучи більш загальним для введення / виводу масового зберігання) буде сидіти на нижчому рівні і запускати SCSI / ATA / будь-які команди, необхідні для фактичного виконання записів, і kjournaldобробляє структури даних файлової системи більш високого рівня перед записом. Я можу бачити і навпаки, хоча kjournaldбезпосередньо взаємодію зі структурами даних файлової системи та pdflushпрокидаючись раз і час, щоб писати брудні сторінки сторінок кеш-пам'яті на пристрій черезkjournald. Можливо також, що вони взагалі не взаємодіють з якоїсь іншої причини.

В основному: мені потрібен спосіб візуалізації (графік або просто пояснення) основної архітектури, що використовується для відправки вводу / виводу для масового зберігання в ядрі Linux.


1
Це те, що ти щось шукаєш? oss.org.cn/ossdocs/linux/kernel/a1/index.html
slm

1
Також є ця презентація: 7-й слайд в: slideshare.net/LukCzerner/local-file-systems-update
slm

1
Ось ця діаграма я і знайшов: thomas-krenn.com/en/oss/linux-io-stack-diagram/…
slm

1
Я знайшов цю інтерактивну карту ядра, яка допомагає показати, як різні компоненти ядра поєднуються: makelinux.net/kernel_map
slm

1
Ще один ресурс, сторінки 19-24: Настанови щодо продуктивності та налаштування Linux . Цей схожий саме на те, що ви шукаєте.
slm

Відповіді:


21

Перш ніж ми обговоримо особливості , що стосуються pdflush, kjournald, andkswapd`, давайте спочатку отримати трохи про контекст того , що саме ми говоримо в термінах ядра Linux.

Архітектура GNU / Linux

Архітектуру GNU / Linux можна розглядати як два простори:

  • Користувач
  • Ядро

Між простір користувача та простір ядра сидить бібліотека GNU C ( glibc). Це забезпечує інтерфейс системного виклику, який з'єднує ядро ​​з програмами користувальницького простору.

Простір ядра можна додатково розділити на 3 рівні:

  • Інтерфейс системного виклику
  • Код архітектурного незалежного ядра
  • Код залежно від архітектури

Інтерфейс системного виклику, як випливає з його назви, забезпечує інтерфейс між glibcядром та ядром. Архітектурний Незалежний Kernel Код складається з логічних одиниць , таких як VFS (Virtual File System) і VMM (Virtual Memory Management). Архітектурний залежний код є компонентами, процесор і від платформи залежний код для конкретної апаратної архітектури.

Діаграма архітектури GNU / Linux

                                 ss gnu / linux arch.

У решті цієї статті ми зосередимо свою увагу на логічних одиницях VFS та VMM у просторі ядра.

Підсистеми ядра GNU / Linux

                                    ss ядра ком

Підсистема VFS

Маючи концепцію високого рівня того, як структуровано ядро ​​GNU / Linux, ми можемо заглибитися трохи глибше в підсистему VFS. Цей компонент відповідає за забезпечення доступу до різних пристроїв зберігання блоків, які в кінцевому підсумку відображаються у файловій системі (ext3 / ext4 / тощо.) На фізичному пристрої (HDD / тощо).

Діаграма VFS

ss vfs

Ця діаграма показує, як write()процес користувача проходить VFS і в кінцевому підсумку просувається до драйвера пристрою, де він записується на фізичний носій інформації. Це перше місце, де ми стикаємось pdflush. Це демон, який відповідає за передачу брудних блоків даних та блоків метаданих на носій інформації у фоновому режимі. На схемі цього не видно, але є інший демон, kjournaldякий сидить поруч pdflush, виконуючи аналогічне завдання, записуючи брудні журнальні блоки на диск. ПРИМІТКА: Блоки журналів - це те, як файлові системи типу ext4 та JFS відслідковують зміни на диску у файлі до тих змін, які відбудуться.

Наведені деталі розглядаються далі в цій роботі .

Огляд write()кроків

Щоб забезпечити простий огляд операцій з системою вводу-виводу, ми будемо використовувати приклад, коли програма write()викликає додаток User Space.

  1. Процес вимагає записати файл через write()системний виклик.
  2. Ядро оновлює кеш сторінки, відображений у файл.
  3. Нитка ядра pdflush піклується про те, щоб передати кеш сторінки на диск.
  4. Рівень файлової системи з'єднує кожен блок-буфер разом з bio struct( див. 1.4.3, «Блоковий рівень» на стор. 23 ) і подає запит на запис на рівень пристрою блоку.
  5. Рівень блокового пристрою отримує запити від верхніх шарів і виконує операцію ліфта вводу / виводу і ставить запити в чергу запитів вводу / виводу.
  6. Драйвер пристрою, такий як SCSI або інші драйвери для певних пристроїв, подбає про роботу запису.
  7. Прошивка дискового пристрою виконує апаратні операції, такі як пошук голови, обертання та передача даних у сектор на тарілці.

Підсистема VMM

Продовжуючи глибше занурення, ми тепер можемо заглянути в підсистему VMM. Цей компонент відповідає за підтримку узгодженості між основною пам'яттю (ОЗП), свопом та фізичним носієм зберігання. Основним механізмом збереження консистенції є bdflush. Оскільки сторінки пам'яті вважаються брудними, їх потрібно синхронізувати з даними, які є на носії. bdflushкоординуватиме з pdflushдемонами, щоб синхронізувати ці дані з носієм інформації.

Діаграма ВММ

                ss VMM

Зміна

Коли системна пам'ять стає дефіцитною чи закінчується таймер заміни ядра, kswapdдемон намагатиметься звільнити сторінки. Поки кількість безкоштовних сторінок залишається вище free_pages_high, kswapdнічого не призведе. Однак, якщо кількість безкоштовних сторінок kswapdзменшиться нижче, тоді розпочнеться процес рекультивації сторінки. Після того, kswapdяк позначені сторінки для переїзду, bdflushвони подбають про синхронізацію будь-яких непогашених змін на носії інформації через pdflushдемони.

Посилання та подальші читання


1
Я зачекаю добу, перш ніж прийму це як відповідь і нагороду виграшу, щоб він залишався на сторінці "щедрості". Таким чином, кожен, хто бачив це раніше, має шанс помітити, що зараз є відповідь.
Братчлі

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