Bagaimana cara pdflush, kjournald, swapd, dll beroperasi?

17

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 I / O kernel berlapis. Misalnya, apakah kjournaldpengiriman ke pdflushatau sebaliknya? Asumsi saya adalah bahwa pdflush(menjadi lebih umum untuk penyimpanan massal I / O) akan duduk di tingkat yang lebih rendah dan memicu SCSI / ATA / perintah apa pun yang diperlukan untuk benar-benar melakukan penulisan, dan kjournaldmenangani struktur data sistem file tingkat yang lebih tinggi sebelum menulis. Saya bisa melihatnya sebaliknya, meskipun, dengan kjournaldlangsung berinteraksi dengan struktur data sistem file dan pdflushbangun setiap sekarang dan kemudian untuk menulis halaman pagecache kotor ke perangkat melaluikjournald. Mungkin juga keduanya tidak berinteraksi sama sekali karena alasan lain.

Pada dasarnya: Saya perlu beberapa cara untuk memvisualisasikan (grafik atau hanya penjelasan) arsitektur dasar yang digunakan untuk mengirim I / O ke penyimpanan massal dalam kernel Linux.

Bratchley
sumber
1
Apakah ini yang Anda cari? oss.org.cn/ossdocs/linux/kernel/a1/index.html
slm
1
Juga ada presentasi ini: slide ke-7 di: slideshare.net/LukCzerner/local-file-systems-update
slm
1
Ada diagram ini yang saya temukan juga: thomas-krenn.com/en/oss/linux-io-stack-diagram/…
slm
1
Saya menemukan peta kernel interaktif ini yang membantu menunjukkan bagaimana berbagai komponen kernel berjalan bersama: makelinux.net/kernel_map
slm
1
Satu lagi sumber daya, halaman 19-24: Kinerja Linux dan Panduan Tuning . Yang ini persis seperti yang Anda cari.
slm

Jawaban:

21

Sebelum kita membahas secara spesifik pdflush, kjournald, andkswapd`, pertama mari kita sedikit latar belakang tentang apa yang sebenarnya kita bicarakan dalam hal Kernel Linux.

Arsitektur GNU / Linux

Arsitektur GNU / Linux dapat dianggap sebagai 2 ruang:

  • Pengguna
  • Inti

Antara Ruang Pengguna dan Ruang Kernel duduk 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 Tergantung Arsitektur

System Call Interface sesuai namanya, menyediakan antarmuka antara glibcdan kernel. The Arsitektur Independen Kode Kernel terdiri dari unit logis seperti VFS (Virtual File System) dan VMM (Virtual Memory Management). The Dependent Kode Arsitektur adalah komponen yang prosesor dan kode platform-spesifik untuk arsitektur hardware tertentu.

Diagram Arsitektur GNU / Linux

                                 ss dari gnu / linux arch.

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

Subsistem dari GNU / Linux Kernel

                                    ss dari kernel com

Subsistem VFS

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

Diagram VFS

ss dari vfs

Diagram ini menunjukkan bagaimana a write()dari proses pengguna melintasi VFS dan akhirnya turun ke driver perangkat di mana ia ditulis ke media penyimpanan fisik. Ini adalah tempat pertama yang kami temui pdflush. Ini adalah daemon yang bertanggung jawab untuk menyiram data kotor dan blok buffer metadata ke media penyimpanan di latar belakang. Diagram tidak menunjukkan ini tetapi ada daemon lain kjournald,, yang duduk di samping pdflush, melakukan tugas yang sama 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.

Rincian di atas dibahas lebih lanjut dalam makalah ini .

Ikhtisar write()langkah - langkah

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

  1. Suatu proses meminta untuk menulis file melalui write()panggilan sistem.
  2. Kernel memperbarui cache halaman yang dipetakan ke file.
  3. Utas kernel pdflush menangani pembilasan cache halaman ke disk.
  4. Lapisan sistem file menempatkan masing-masing buffer blok ke bio struct( lihat 1.4.3, “Block layer” pada halaman 23 ) dan mengirimkan permintaan tulis ke layer device block.
  5. Lapisan perangkat blok mendapat 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 mencari head, rotasi, dan transfer data ke sektor pada platter.

Subsistem VMM

Melanjutkan penyelaman kami yang lebih dalam, kami sekarang dapat melihat ke 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 harus disinkronkan dengan data yang ada di media penyimpanan. bdflushakan berkoordinasi dengan pdflushdaemon untuk menyinkronkan data ini dengan media penyimpanan.

Diagram VMM

                ss dari VMM

Menukar

Ketika memori sistem menjadi langka atau pengatur waktu swap kernel berakhir, kswapddaemon akan berusaha untuk membebaskan halaman. Selama jumlah halaman gratis tetap di atas free_pages_high, kswapdtidak akan melakukan apa-apa. Namun, jika jumlah halaman gratis turun di bawah ini, maka kswapdakan memulai proses reklamasi halaman. Setelah kswapdmenandai halaman untuk dipindahkan, bdflushakan dengan hati-hati menyinkronkan setiap perubahan luar biasa ke media penyimpanan, melalui pdflushdaemon.

Referensi & Bacaan Lebih Lanjut

slm
sumber
1
Saya akan menunggu sehari sebelum saya menerima ini sebagai jawaban dan menghadiahkan hadiah agar tetap di halaman "hadiah". Dengan cara itu siapa pun yang melihatnya sebelumnya memiliki kesempatan untuk memperhatikan bahwa ia memiliki jawaban sekarang.
Bratchley
1
Terima kasih lagi, BTW. Anda benar-benar habis-habisan meneliti ini.
Bratchley