Interupsi adalah sinyal yang dikirim melalui IRQ (Interrupt Request Line) oleh perangkat keras atau perangkat lunak.
Interupsi memungkinkan perangkat seperti keyboard, kartu serial, dan port paralel menunjukkan bahwa perangkat tersebut memerlukan perhatian CPU.
Setelah CPU menerima Interrupt Request, CPU akan menghentikan sementara eksekusi program yang sedang berjalan dan menjalankan program khusus yang disebut Interrupt Handler atau ISR (Interrupt Service Routine).
Interrupt Service atau Interrupt Handler Routine dapat ditemukan dalam tabel Interrupt Vector yang terletak di alamat tetap di memori. Setelah interupsi ditangani, CPU melanjutkan program yang terputus.
Pada saat boot, sistem mengidentifikasi semua perangkat, dan penangan interupsi yang sesuai dimuat ke dalam tabel interupsi.
Berikut ini adalah dua cara meminta perhatian CPU:
- Berbasis interupsi
- Berbasis polling
Semua OS berbasis Linux digerakkan oleh interupsi.
Saat kita menekan tombol pada keyboard, keyboard mengatakan kepada CPU bahwa tombol telah ditekan. Tetapi CPU dapat sibuk memproses beberapa hal dari RAM, Jam Sistem, kartu NIC, mungkin video atau bus PCI. Dalam hal ini Keyboard menempatkan tegangan pada saluran IRQ yang ditetapkan untuk perangkat keras itu, di sini dalam hal ini [Keyboard]. Perubahan tegangan ini berfungsi sebagai permintaan dari perangkat yang mengatakan bahwa perangkat memiliki permintaan yang perlu diproses.
/proc/interrupts File
Pada mesin Linux, file /proc/interrupts berisi informasi tentang interupsi yang digunakan dan berapa kali prosesor telah diinterupsi
# cat /proc/interrupts CPU0 CPU1 CPU2 CPU3 0: 3710374484 0 0 0 IO-APIC-edge timer 1: 20 0 0 0 IO-APIC-edge i8042 6: 5 0 0 0 IO-APIC-edge floppy 7: 0 0 0 0 IO-APIC-edge parport0 8: 0 0 0 0 IO-APIC-edge rtc 9: 0 0 0 0 IO-APIC-level acpi 12: 240 0 0 0 IO-APIC-edge i8042 14: 11200026 0 0 0 IO-APIC-edge ide0 51: 61281329 0 0 0 IO-APIC-level ioc0 59: 1 0 0 0 IO-APIC-level vmci 67: 19386473 0 0 0 IO-APIC-level eth0 75: 94595340 0 0 0 IO-APIC-level eth1 NMI: 0 0 0 0 LOC: 3737150067 3737142382 3737145101 3737144204 ERR: 0 MIS: 0
Dalam file di atas:
- Kolom pertama adalah nomor IRQ.
- Kolom Kedua menyatakan berapa kali inti CPU telah diinterupsi. Dalam contoh di atas timer adalah nama interupsi [Jam sistem] dan 3710374484 adalah berapa kali CPU0 diinterupsi. I8042 adalah pengontrol Keyboard yang mengontrol keyboard dan mouse PS/2 di PC.
- Untuk interupsi seperti rtc [Real time clock] CPU tidak diinterupsi. RTC hadir di perangkat elektronik untuk melacak waktu.
- NMI dan LOC adalah driver yang digunakan pada sistem yang tidak dapat diakses/dikonfigurasi oleh pengguna.
Nomor IRQ menentukan prioritas interupsi yang perlu ditangani oleh CPU.
Nilai angka IRQ yang kecil berarti prioritas yang lebih tinggi.
Misalnya jika CPU menerima interupsi dari Keyboard dan jam sistem secara bersamaan. CPU akan melayani System Clock terlebih dahulu karena memiliki nomor IRQ 0.
- IRQ 0 — pengatur waktu sistem (tidak dapat diubah);
- IRQ 1 — pengontrol keyboard (tidak dapat diubah)
- IRQ 3 — pengontrol port serial untuk port serial 2 (dibagi dengan port serial 4, jika ada);
- IRQ 4 — pengontrol port serial untuk port serial 1 (dibagi dengan port serial 3, jika ada);
- IRQ 5 — port paralel 2 dan 3 atau kartu suara;
- IRQ 6 — pengontrol floppy disk;
- IRQ 7 — port paralel 1. Digunakan untuk printer atau port paralel apa pun jika tidak ada printer.
Untuk perangkat seperti joystick, CPU tidak menunggu perangkat mengirim interupsi. Karena Joystick yang digunakan untuk bermain game dan pergerakan joystick akan cepat, sangat ideal untuk menggunakan polling dan memeriksa apakah perangkat memerlukan perhatian. Kerugian di balik metode ini adalah CPU dapat menjadi sibuk menunggu, memeriksa perangkat berkali-kali.
Pada catatan terkait, penting juga untuk menangani sinyal dengan benar di Linux.
Interupsi Perangkat Keras
Semua skenario yang dibahas di atas adalah contoh interupsi Perangkat Keras.
Interupsi perangkat keras diklasifikasikan lebih lanjut ke dalam dua kategori utama:
- Non-maskable interrupts [NMI]:Seperti namanya, jenis interupsi ini tidak dapat diabaikan atau ditekan oleh CPU. MNI dikirim melalui jalur interupsi terpisah dan umumnya digunakan untuk kesalahan perangkat keras kritis seperti kesalahan memori, perangkap Perangkat Keras yang menunjukkan kegagalan Kipas, kegagalan Sensor Suhu, dll.
- Interupsi yang dapat disembunyikan:Interupsi ini dapat diabaikan atau ditunda oleh CPU. Register Topeng Interupsi menutupi interupsi yang dipicu pada pin eksternal pengontrol cache. Menyetel sedikit dengan menulis 0, menonaktifkan pemicu interupsi pada pin
Interupsi Perangkat Lunak
Interupsi ini dihasilkan ketika CPU mengeksekusi instruksi yang dapat menyebabkan kondisi pengecualian di CPU [unit ALU] itu sendiri.
Misalnya, membagi angka dengan nol yang tidak mungkin, itu akan menyebabkan pengecualian bagi-dengan-nol, menyebabkan komputer mengabaikan perhitungan atau menampilkan pesan kesalahan.
File /proc/stat juga merupakan bagian file dari sistem file /proc, yang memiliki informasi tentang statistik kernel sistem, juga menyimpan beberapa informasi interupsi.
# cat /proc/stat cpu 17028082 5536753 5081493 1735530500 42592308 90006 479750 0 cpu0 5769176 1170683 1495750 403368354 39406374 90006 284864 0 cpu1 3714389 1451937 1186134 444082258 1084780 0 64876 0 cpu2 3791544 1471013 1211868 443988514 1056981 0 64764 0 cpu3 3752971 1443119 1187740 444091373 1044172 0 65244 0 intr 417756956 --- Output Truncated
Baris intr menunjukkan jumlah interupsi yang dilayani sejak waktu boot. Kolom pertama adalah total dari semua interupsi yang dilayani. Setiap kolom berikutnya adalah total untuk interupsi tertentu.
SMP_AFFINITY
Multiprocessing simetris adalah pemrosesan program oleh beberapa prosesor.
File smp_affinity menyimpan nilai afinitas interupsi untuk nomor IRQ. File smp_affinity yang terkait dengan setiap nomor IRQ disimpan di file /proc/irq/IRQ_NUMBER/smp_affinity. Nilai dalam file disimpan dalam bit-mask heksadesimal yang mewakili semua inti CPU dalam sistem. smp_affinity berfungsi untuk perangkat yang memiliki driver perangkat berkemampuan IO-APIC.
Misalnya, entri smp_affinity untuk driver Ethernet ditunjukkan di bawah ini:
grep eth0 /proc/interrupts 67: 23834931 0 0 0 IO-APIC-level eth0
Nomor IRQ untuk eth0 adalah 67 dan file smp_affinity yang sesuai terletak di:
cat /proc/irq/67/smp_affinity 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Setara desimal untuk nilai '000000001' adalah '1'. yaitu Semua interupsi yang terkait dengan driver Ethernet akan dilayani oleh CPU0.
Kita dapat mengubah afinitas prosesor secara manual dengan mengubah nilai dalam file smp_affinity untuk pengontrol tertentu atau dengan menggunakan irqbalance.
Saldo IRQ
Irqbalance adalah utilitas Linux yang mendistribusikan interupsi melalui inti prosesor di sistem komputer Anda yang membantu meningkatkan kinerja.
Tujuan Irqbalance adalah untuk menemukan keseimbangan antara penghematan daya dan kinerja yang optimal.
Jika irqbalance tidak diinstal pada sistem Anda, instal menggunakan yum seperti yang ditunjukkan di bawah ini.
# rpm -qa | grep irqbalance irqbalance-0.55-15.el5 # yum search irqbalance # yum install irqbalance.x86_64
Mulai layanan irqbalance:
service irqbalance start
Berikut ini adalah contoh output dari mesin Linux tempat irqbalance diinstal. Kita bisa melihat bahwa interupsi sekarang sedang didistribusikan antar CPU.
# cat /proc/interrupts CPU0 CPU1 CPU2 CPU3 0: 950901695 0 0 0 IO-APIC-edge timer 1: 13 0 0 0 IO-APIC-edge i8042 6: 96 10989 470 0 IO-APIC-edge floppy 7: 0 0 0 0 IO-APIC-edge parport0 8: 1 0 0 0 IO-APIC-edge rtc 9: 0 0 0 0 IO-APIC-level acpi 12: 109 1787 0 0 IO-APIC-edge i8042 15: 99 84813914 0 0 IO-APIC-edge ide1 51: 17371 0 46689970 0 IO-APIC-level ioc0 67: 1741 0 0 225409160 PCI-MSI eth0 83: 0 0 0 0 PCI-MSI vmci NMI: 0 0 0 0 LOC: 950902917 950903742 950901202 950901400 ERR: 0 MIS: 0
Irqbalance sangat berguna pada sistem dengan prosesor multi-inti, karena interupsi biasanya hanya akan dilayani oleh inti pertama.