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.
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.
- Sebuah proses meminta untuk menulis file melalui
write()
panggilan sistem. - Kernel memperbarui cache halaman yang dipetakan ke file.
- Utas kernel pdflush menangani penghapusan cache halaman ke disk.
- 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. - Lapisan perangkat blok mendapatkan permintaan dari lapisan atas dan melakukan operasi elevator I/O dan menempatkan permintaan ke dalam antrian permintaan I/O.
- Driver perangkat seperti SCSI atau driver khusus perangkat lainnya akan menangani operasi penulisan.
- 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