GNU/Linux >> Belajar Linux >  >> Linux

Mengapa menonaktifkan interupsi menonaktifkan preemption kernel dan bagaimana spin lock menonaktifkan preemption

Saya bukan guru penjadwalan, tetapi saya ingin menjelaskan bagaimana saya melihatnya.Berikut adalah beberapa hal.

  1. preempt_disable() tidak menonaktifkan IRQ . Itu hanya meningkatkan thread_info->preempt_count variabel.
  2. Menonaktifkan interupsi juga menonaktifkan preemption karena penjadwal tidak berfungsi setelah itu - tetapi hanya pada mesin CPU tunggal. Di SMP itu tidak cukup karena ketika Anda menutup interupsi pada satu CPU, yang lain/yang lain masih melakukan/melakukan sesuatu secara asinkron.
  3. Kunci Besar (artinya - menutup semua interupsi pada semua CPU) memperlambat sistem secara dramatis - jadi itu sebabnya tidak lagi digunakan. Ini juga alasan mengapa preempt_disable() tidak menutup IRQ.

Anda dapat melihat apa itu preempt_disable(). Coba ini:1. Dapatkan spinlock.2. Jadwal panggilan()

Di dmesg Anda akan melihat sesuatu seperti "BUG:penjadwalan saat atom". Ini terjadi ketika penjadwal mendeteksi bahwa proses Anda dalam konteks atomik (bukan preemptive) tetapi menjadwalkannya sendiri.

Semoga berhasil.


Dalam modul pengujian kernel yang saya tulis untuk memantau/memprofilkan tugas, saya telah mencoba menonaktifkan interupsi dengan:

1 - Menggunakan local_irq_save()

2 - Menggunakan spin_lock_irqsave()

3 - Disable_irq() secara manual ke semua IRQ di /proc/interrupts

Dalam semua 3 kasus saya masih bisa menggunakan hrtimer untuk mengukur waktu meskipun IRQ dinonaktifkan (dan tugas yang saya pantau juga sudah didahului).

Saya menemukan ini veeeeerrrryyyy aneh ... Saya pribadi mengantisipasi apa yang ditunjukkan oleh Sebastian Mountaniol -> Tidak ada interupsi - tidak ada jam. Tanpa jam - tanpa pengatur waktu...

Kernel Linux 2.6.32 pada satu inti, satu CPU... Adakah yang bisa memiliki penjelasan yang lebih baik?


Linux
  1. Mengapa Scp Sangat Lambat Dan Bagaimana Cara Mempercepatnya?

  2. Bagaimana dan Mengapa Menggunakan Host Docker Jarak Jauh

  3. Cara Mengunci dan Membuka Kunci Pengguna di Linux

  1. Kernel kustom di Ubuntu/Debian – bagaimana, kapan dan mengapa

  2. kernel:menonaktifkan /dev/kmem dan /dev/mem

  3. Mengapa crontab saya tidak berfungsi, dan bagaimana cara mengatasinya?

  1. Redis sebagai Cache:Cara Kerja dan Mengapa Menggunakannya

  2. Mengapa Data Penting Dan Bagaimana Cara Melindunginya

  3. Mengapa Anda mendapatkan cp:menghilangkan kesalahan direktori di Linux dan bagaimana mengatasinya