Mari kita mulai tanpa penggabungan napi dan interupsi.
Kasus pertama:livelock. Itu berarti ketika banyak interupsi memposting dari proses server secara terus menerus, CPU hanya memproses interupsi dan tidak pernah mengizinkan proses tingkat pengguna untuk berjalan dan benar-benar melayani permintaan. Untuk itu, kami membuat napi yang menanganinya dengan mode hybrid (interupsi + polling). Saat interupsi terjadi, tangani dan polling sebentar untuk menyelesaikan permintaan berikutnya.
Kasus kedua:optimasi. Sebelum menaikkan interupsi, perangkat terlebih dahulu menunggu sebentar sebelum mengirimkan interupsi ke CPU. Sambil menunggu, permintaan lain akan segera selesai, dan dengan demikian beberapa interupsi dapat digabungkan menjadi pengiriman interupsi tunggal, sehingga menurunkan biaya pemrosesan interupsi.
Kesimpulannya, tidak ada konflik di antara mereka. Dan itu untuk kasus yang berbeda meskipun napi juga dapat mengoptimalkan overhead CPU.
Ref:Prinsip Desain Sistem Komputer.
Saya melihat NAPI sebagai bentuk penggabungan interupsi. Saya pikir pertanyaan Anda mungkin berasal dari kesalahpahaman tentang NAPI. Pertama-tama, interupsi terlibat dengan NAPI. Selain itu, polling NAPI sebenarnya tidak "sia-sia". Ingat, untuk NAPI, idenya adalah lalu lintas throughput tinggi meledak. NAPI hanya "dimulai" setelah "paket menerima interupsi" terjadi.
Berikut ikhtisar singkat tentang cara penggunaan NAPI:
Kernel memulai interupsi "paket diterima", yang dideteksi oleh driver perangkat jaringan yang menggunakan NAPI. Driver perangkat jaringan kemudian menonaktifkan interupsi terkait dengan penerimaan paket dan menggunakan NAPI, memberi tahu subsistem jaringan Linux untuk meminta driver perangkat. Fungsi polling diimplementasikan oleh driver perangkat, dan diteruskan ke subsistem jaringan, dan berisi penangan paket driver perangkat. Setelah cukup banyak paket yang diterima atau waktu habis tercapai, interupsi penerimaan paket diaktifkan kembali, dan semuanya dimulai dari awal lagi.
Jadi NAPI pada dasarnya hanyalah API terpusat di subsistem jaringan Linux untuk mendukung penggabungan interupsi untuk mengurangi situasi livelock penerima. NAPI memberi pengembang driver perangkat kerangka kerja yang bersih untuk penggabungan interupsi. NAPI tidak berjalan sepanjang waktu, tetapi hanya terjadi ketika lalu lintas benar-benar diterima, menjadikannya skema penggabungan interupsi... Setidaknya dalam buku saya.
Catatan :Ini semua dalam konteks driver perangkat jaringan menggunakan NAPI, tetapi sebenarnya NAPI dapat digunakan untuk segala jenis interupsi. Ini juga salah satu manfaat NAPI.
Jika ada kesalahan dalam pemahaman saya, silakan tunjukkan!