GNU/Linux >> Belajar Linux >  >> Linux

Linux – Bagaimana Pdflush, Kjournald, Swapd, Dll Berinteroperasi?

Baru-baru ini melihat pertanyaan yang memicu pemikiran ini. Tidak dapat menemukan jawaban di sini atau melalui mesin Google. Pada dasarnya, saya tertarik untuk mengetahui bagaimana arsitektur kernel I/O berlapis. Misalnya, apakah kjournald kirim ke pdflush atau sebaliknya? Asumsi saya adalah bahwa pdflush (menjadi lebih umum untuk I/O penyimpanan massal) akan berada di tingkat yang lebih rendah dan memicu SCSI/ATA/perintah apa pun yang diperlukan untuk benar-benar melakukan penulisan, dan kjournald menangani struktur data sistem file tingkat yang lebih tinggi sebelum menulis. Saya juga bisa melihatnya sebaliknya, dengan kjournald langsung berinteraksi dengan struktur data sistem file dan pdflush bangun sesekali untuk menulis halaman cache halaman kotor ke perangkat melalui kjournald . Mungkin juga keduanya tidak berinteraksi sama sekali karena alasan lain.

Pada dasarnya: Saya memerlukan beberapa cara untuk memvisualisasikan (grafik atau sekadar penjelasan) arsitektur dasar yang digunakan untuk mengirimkan I/O ke penyimpanan massal di dalam kernel Linux.

Jawaban yang Diterima:

Sebelum kita membahas secara spesifik mengenai pdflush , kjournald, and kswapd`, pertama-tama mari kita mendapatkan sedikit latar belakang tentang konteks apa yang sebenarnya sedang kita bicarakan terkait Kernel Linux.

Arsitektur GNU/Linux

Arsitektur GNU/Linux dapat dianggap sebagai 2 ruang:

  • Pengguna
  • Kernel

Di antara Ruang Pengguna dan Ruang Kernel duduk di Perpustakaan GNU C (glibc ). Ini menyediakan antarmuka panggilan sistem yang menghubungkan kernel ke aplikasi ruang pengguna.

Ruang Kernel dapat dibagi lagi menjadi 3 level:

  • Antarmuka Panggilan Sistem
  • Kode Kernel Independen Arsitektur
  • Kode Ketergantungan Arsitektur

Antarmuka Panggilan Sistem sesuai namanya, sediakan antarmuka antara glibc dan kernelnya. Kode Kernel Independen Arsitektur terdiri dari unit logis seperti VFS (Virtual File System) dan VMM (Virtual Memory Management). Kode Ketergantungan Arsitektur adalah komponen yang merupakan kode khusus prosesor dan platform untuk arsitektur perangkat keras tertentu.

Diagram Arsitektur GNU/Linux

Untuk sisa artikel ini, kami akan memfokuskan perhatian kami pada unit logis VFS dan VMM di dalam Ruang Kernel.

Subsistem dari Kernel GNU/Linux

Subsistem VFS

Dengan konsep tingkat tinggi tentang bagaimana kernel GNU/Linux terstruktur, kita dapat mempelajari lebih dalam subsistem VFS. Komponen ini bertanggung jawab untuk menyediakan akses ke berbagai perangkat penyimpanan blok yang pada akhirnya dipetakan ke sistem file (ext3/ext4/etc.) pada perangkat fisik (HDD/etc.).

Diagram VFS

Diagram ini menunjukkan bagaimana sebuah write() dari proses pengguna melintasi VFS dan akhirnya turun ke driver perangkat di mana ia ditulis ke media penyimpanan fisik. Ini adalah tempat pertama di mana kami menemukan pdflush . Ini adalah daemon yang bertanggung jawab untuk mem-flush data kotor dan blok buffer metadata ke media penyimpanan di latar belakang. Diagram tidak menunjukkan ini tetapi ada daemon lain, kjournald , yang berada di samping pdflush , melakukan tugas serupa menulis blok jurnal kotor ke disk. CATATAN: Blok jurnal adalah cara sistem file seperti ext4 &JFS melacak perubahan pada disk dalam file, sebelum perubahan itu terjadi.

Terkait:Perintah CLI Linux Cheat Sheet

Rincian di atas dibahas lebih lanjut dalam makalah ini.

Ikhtisar write() langkah

Untuk memberikan gambaran sederhana tentang operasi sistem I/O, kami akan menggunakan contoh di mana fungsi write() dipanggil oleh aplikasi Ruang Pengguna.

  1. Sebuah proses meminta untuk menulis file melalui write() panggilan sistem.
  2. Kernel memperbarui cache halaman yang dipetakan ke file.
  3. Utas kernel pdflush menangani penghapusan cache halaman ke disk.
  4. Lapisan sistem file menempatkan setiap buffer blok bersama-sama ke bio struct (lihat 1.4.3, “Blokir lapisan” di halaman 23) dan kirimkan permintaan tulis ke lapisan perangkat blok.
  5. Lapisan perangkat blok mendapatkan permintaan dari lapisan atas dan melakukan operasi elevator I/O dan menempatkan permintaan ke dalam antrian permintaan I/O.
  6. Driver perangkat seperti SCSI atau driver khusus perangkat lainnya akan menangani operasi penulisan.
  7. Firmware perangkat disk melakukan operasi perangkat keras seperti kepala pencarian, rotasi, dan transfer data ke sektor di piring.

Subsistem VMM

Melanjutkan penyelaman kita yang lebih dalam, sekarang kita dapat melihat ke dalam subsistem VMM. Komponen ini bertanggung jawab untuk menjaga konsistensi antara memori utama (RAM), swap, dan media penyimpanan fisik. Mekanisme utama untuk menjaga konsistensi adalah bdflush . Karena halaman memori dianggap kotor, mereka perlu disinkronkan dengan data yang ada di media penyimpanan. bdflush akan berkoordinasi dengan pdflush daemon untuk menyinkronkan data ini dengan media penyimpanan.

Diagram VMM

Tukar

Ketika memori sistem menjadi langka atau timer swap kernel kedaluwarsa, kswapd daemon akan mencoba mengosongkan halaman. Selama jumlah halaman gratis tetap di atas free_pages_high , kswapd tidak akan melakukan apa-apa. Namun, jika jumlah halaman gratis turun di bawah, maka kswapd akan memulai proses reklamasi halaman. Setelah kswapd telah menandai halaman untuk dipindahkan, bdflush akan berhati-hati untuk menyinkronkan setiap perubahan luar biasa ke media penyimpanan, melalui pdflush daemon.

Referensi &Bacaan Lebih Lanjut

  • Arsitektur Konseptual Kernel Linux
  • Diagram Tumpukan I/O Linux – ver. 0.1, 03-06-2012 – menguraikan tumpukan I/O Linux pada Kernel 3.3
  • Pembaruan sistem file lokal – khususnya geser #7
  • Peta Kernel Linux Interaktif
  • Memahami Memori Virtual Di Red Hat Enterprise Linux 4
  • Panduan Performa dan Tuning Linux – khususnya halaman 19-24
  • Anatomi kernel Linux
  • Kasus untuk Replikasi Jarak Jauh Semantic Aware

Linux
  1. Cara memeriksa versi Kernel di Linux

  2. Cara Menginstal Kernel Linux 5.0 di CentOS 7

  3. Bagaimana cara membuat kode modul kernel Linux?

  1. Bagaimana menangani kepanikan kernel Linux

  2. Cara memutakhirkan Kernel di Desktop Linux

  3. Linux – Bagaimana Cara Memuat Ulang Modul Kernel dengan Benar?

  1. Bagaimana kernel Linux menangani interupsi

  2. Bagaimana kernel linux bisa sangat kecil?

  3. Bagaimana saya memeriksa apakah KPTI diaktifkan di linux?