Ankur Arora dari Oracle pada hari Selasa mengirimkan 86 patch untuk membuat kernel Linux dapat digantikan. Hal ini didasarkan pada karya sebelumnya oleh insinyur kernel Linux terkemuka Thomas Gleixner.
Arora menjelaskan pekerjaan preemptible kernel Linux ini dalam pesan “permintaan komentar”:
Kami memiliki dua model preemption: sukarela dan penuh (dan RT yang merupakan bentuk preemption penuh yang lebih lengkap.) Dalam seri ini — yang didasarkan pada PoC Thomas, kami mencoba menyatukan keduanya dengan membiarkan penjadwal menerapkan kebijakan untuk preemption model preemption sukarela juga.
(Perhatikan bahwa ini tentang preemptible ketika mengeksekusi di kernel. Userspace selalu dapat di-preemptible.)
Latar belakang
==
Mengapa?: kedua mekanisme pencegahan ini hampir seluruhnya tidak saling berhubungan. Ada empat set titik preemption utama di kernel:
1. kembali ke pengguna
2. poin preemption eksplisit (cond_resched() dan sejenisnya)
3. kembali ke kernel (centang/IPI/irq di irqexit)
4. akhir bagian yang tidak dapat diakhiri pada (preempt_count() == preempt_offset)
Preemption sukarela menggunakan mekanisme 1 dan 2. Preemption penuh menggunakan 1, 3 dan 4. Selain itu keduanya menggunakan cond_resched_{rcu,lock,rwlock*} yang dapat menjadi segalanya bagi semua orang karena secara internal berisi 2, dan 4.
Karena tidak ada penempatan titik preemption eksplisit yang ideal, titik preemption tersebut cenderung tersebar secara acak di seluruh kode dan terakumulasi seiring berjalannya waktu, karena poin tersebut ditambahkan ketika masalah latensi terlihat. Ditambah lagi ketakutan akan kemunduran membuat mereka sulit untuk dihilangkan. (Agaknya, secara asimtotik, mereka akan menyebar secara merata di seluruh aliran instruksi!)
Dalam model sukarela, tugas penjadwal adalah mencocokkan sisi permintaan dari titik preemption (tugas yang perlu dijadwalkan) dengan sisi pasokan (tugas yang memanggil cond_resched().)
Model preemption penuh melacak jumlah preemption sehingga penjadwal selalu dapat mengetahui apakah aman untuk melakukan preemption dan dapat menjalankan preemption itu sendiri (mis. melalui titik preemption dinamis di 3.)
Desain
==
Seperti yang Thomas uraikan, untuk menyatukan model preemption, kami ingin: selalu mengaktifkan preempt_count dan mengizinkan penjadwal untuk menjalankan kebijakan preemption berdasarkan model yang berlaku. Dengan kumpulan patch yang besar ini, sistem dapat melakukan booting dan kinerjanya “cantik dekat” dengan dasar Linux 6.6. Namun ada sejumlah bagian yang rusak saat ini seperti arsitektur non-x86 dan livepatch kernel serta fitur lainnya.
Mereka yang ingin mempelajari lebih lanjut dapat melihat milis kernel Linux tempat RFC ini dibahas.
Itulah berita seputar Kumpulan 86 Patch Baru Merombak Model Preemption Kernel Linux, semoga bermanfaat. Disadur dari Phoronix.com.