GNU/Linux >> Belajar Linux >  >> Linux

Apa konsep vruntime di CFS

Vruntime adalah runtime virtual dari suatu proses yang membantu melacak berapa lama suatu proses telah berjalan. vruntime adalah anggota struktur sched_entity yang didefinisikan di include/linux/sched.h

min_vruntime mewakili vruntime minimum dari runqueue cfs. Ini mewakili waktu minimum dari semua waktu proses yang dijadwalkan pada runqueue cfs tersebut. min_vruntime adalah anggota struktur cfs_rq yang didefinisikan di include/linux/sched.h

Tujuan min_vruntime adalah untuk memilih proses selanjutnya dalam runqueue cfs untuk dijalankan. Agar adil untuk semua proses, penjadwal CFS memilih proses dengan waktu proses minimum untuk dieksekusi terlebih dahulu.

Tautan ke include/linux/sched.h adalah:https://elixir.bootlin.com/linux/latest/source/include/linux/sched.h


vruntime adalah per-utas; itu adalah anggota yang bersarang di dalam task_struct.

Pada dasarnya, vruntime adalah ukuran "runtime" dari utas - jumlah waktu yang dihabiskan untuk prosesor. Inti dari CFS adalah untuk bersikap adil kepada semua; karenanya, jenis algo bermuara pada hal yang sederhana:(di antara tugas-tugas pada runqueue yang diberikan) tugas dengan vruntime terendah adalah tugas yang paling layak untuk dijalankan, maka pilihlah sebagai 'berikutnya'. (Implementasi sebenarnya dilakukan dengan menggunakan rbtree untuk efisiensi).

Mempertimbangkan berbagai faktor - seperti prioritas, nilai bagus, grup, dll - perhitungan vruntime tidak semudah peningkatan sederhana. Saya sarankan membaca bagian yang relevan di "Arsitektur Kernel Linux Profesional", Mauerer, Wrox Press - ini dijelaskan dengan sangat detail.

Silakan lihat di bawah upaya cepat meringkas beberapa hal ini.

Sumber daya lainnya:Documentation/scheduler/sched-design-CFS.txt

Ringkasan cepat - penghitungan vruntime: (berdasarkan buku)

  • Sebagian besar pekerjaan dilakukan di kernel/sched_fair.c:__update_curr()

  • Dipanggil pada timer tick

  • Memperbarui waktu fisik dan virtual 'saat ini' yang baru saja dihabiskan pada prosesor

  • Untuk tugas yang berjalan pada prioritas default, yaitu nilai bagus 0, waktu fisik dan virtual yang dihabiskan identik

  • Tidak demikian halnya untuk tugas di tingkat prioritas (baik) lainnya; sehingga perhitungan vruntime dipengaruhi oleh prioritas arus menggunakan faktor bobot beban

    delta_exec =(unsigned long)(sekarang – curr->exec_start);// ...delta_exec_weighted =calc_delta_fair(delta_exec, curr);curr->vruntime +=delta_exec_weighted;

Mengabaikan beberapa pemeriksaan pembulatan dan luapan, yang dilakukan calc_delta_fair adalah menghitung nilai yang diberikan oleh rumus berikut:

delta_exec_weighed = delta_exec * (NICE_0_LOAD / curr->load.weight)

Masalahnya, tugas yang lebih penting (yang memiliki nilai bagus lebih rendah) akan memiliki bobot yang lebih besar; dengan demikian, dengan persamaan di atas, waktu vrun yang diperhitungkan akan lebih kecil (sehingga membuat mereka mengantri lebih ke kiri di rbtree!).


Linux
  1. Apa yang membuat Linux menjadi OS yang berkelanjutan

  2. Apa yang membuat komunitas Linux istimewa?

  3. Apa konsep membuat file dengan nol byte di Linux?

  1. Linux vs. Unix:Apa bedanya?

  2. Apa itu tautan emas?

  3. Apa itu pengguna debian-+?

  1. Apa trik LD_PRELOAD?

  2. Apa yang dimaksud dengan POSIX?

  3. Apa arti dari *nix?