Sebuah network interface dapat menerima paket lebih cepat daripada kemampuan CPU untuk melayani satu hardware interrupt per paket secara efisien. Interrupt coalescing mengatasi ketimpangan ini dengan memungkinkan adapter mengelompokkan notifikasi penyelesaian dan lebih jarang menginterupsi CPU.

Trade-off-nya jelas. Interrupt yang lebih sedikit mengurangi beban penanganan interrupt dan tekanan scheduling, tetapi sebuah paket mungkin harus menunggu lebih lama sebelum software diberi tahu bahwa ada pekerjaan receive yang siap diproses. Pengaturan terbaik bergantung pada packet rate, target latensi, kapasitas CPU, dan kontrol coalescing pada adapter.

Kedatangan paket dan pengiriman interrupt adalah peristiwa terpisah

Frame yang diterima pertama-tama tiba di network adapter. Adapter memvalidasi lalu menempatkan data atau descriptor paket ke struktur receive yang dapat diakses host sesuai desain driver dan DMA-nya.

Adapter kemudian perlu memberi sinyal bahwa software memiliki pekerjaan untuk diproses. Pada sistem modern, sinyal ini umumnya berupa interrupt MSI atau MSI-X, bukan legacy shared interrupt line.

Kedua peristiwa tersebut tidak harus terjadi pada saat yang sama. NIC dapat menerima beberapa paket, memperbarui beberapa completion entry, lalu mengeluarkan satu interrupt untuk seluruh pekerjaan yang terkumpul.

Pemisahan inilah yang menjadi dasar interrupt coalescing.

Satu interrupt per paket dapat membuang waktu CPU

Pada packet rate rendah, notifikasi langsung murah dan memberi software sinyal dengan cepat. Pada rate tinggi, kebijakan yang sama dapat menghasilkan interrupt dalam jumlah sangat besar.

Setiap interrupt memiliki biaya pemrosesan. Prosesor mengubah execution context, menjalankan pekerjaan kernel terkait interrupt, dan dapat mengganggu eksekusi aplikasi yang berguna serta cache locality. Walaupun setiap peristiwa murah, event rate yang sangat tinggi dapat menghabiskan waktu CPU dalam jumlah signifikan.

Mengelompokkan notifikasi mengamortisasi biaya tetap tersebut ke banyak paket. Jika satu interrupt membuat software memproses 32 receive completion, biaya notifikasi per paket dapat jauh lebih rendah dibandingkan 32 interrupt terpisah.

Kapasitas CPU yang dihemat dapat meningkatkan packet throughput yang berkelanjutan atau menyisakan lebih banyak waktu prosesor untuk pekerjaan aplikasi.

Coalescing dapat menggunakan jumlah paket, timer, atau keduanya

Implementasi hardware berbeda-beda, tetapi dua kontrol yang umum adalah packet threshold dan timer.

Packet threshold meminta adapter memberi sinyal setelah jumlah completion yang cukup terkumpul. Ini bekerja baik saat traffic padat karena threshold dapat tercapai dengan cepat.

Timer membatasi berapa lama pekerjaan menunggu saat traffic jarang. Tanpa batas waktu, threshold 32 paket dapat membuat satu paket menunggu tanpa batas untuk 31 paket berikutnya.

Adapter dapat menggabungkan kedua mekanisme tersebut. Interrupt dapat terjadi ketika jumlah completion mencapai threshold atau ketika timer berakhir, mana pun yang terjadi lebih dahulu.

Kontrol, satuan, dan batas persisnya spesifik perangkat. Interface driver sering kali hanya mengekspos pengaturan yang didukung hardware dan driver aktif.

Jeda tambahan paling terlihat pada queue depth rendah

Coalescing delay tidak sama dengan waktu transmisi di kabel. Ini adalah waktu yang disisipkan antara aktivitas completion dan notifikasi ke CPU.

Untuk bulk transfer dengan banyak paket yang sudah berdatangan, packet threshold dapat tercapai hampir seketika. Jeda tambahan per batch dapat kecil dibandingkan manfaat throughput-nya.

Untuk traffic request-response yang jarang, paket pertama dalam sebuah batch mungkin tidak diikuti traffic lain yang cukup cepat untuk memicu count threshold. Batas berbasis timer menjadi penting, dan interval yang dikonfigurasi dapat terlihat pada tail latency atau latensi aplikasi.

Hal ini membuat coalescing agresif kurang menarik untuk workload yang lebih mementingkan response time dalam mikrodetik daripada packet rate maksimum.

Batch yang lebih besar mengubah distribusi pekerjaan

Mengurangi interrupt tidak menghilangkan pemrosesan paket. Yang berubah adalah kapan pemrosesan diminta dan seberapa banyak pekerjaan yang tersedia sekaligus.

Batch yang lebih besar dapat meningkatkan amortisasi dan perilaku cache, tetapi juga dapat menciptakan lonjakan pekerjaan kernel. Task lain yang berbagi CPU dapat menunggu lebih lama sebelum berjalan jika receive processing menghabiskan budget besar dalam satu putaran.

Mekanisme jaringan operating system dapat menetapkan batas tambahan pada pekerjaan per polling cycle atau menunda sisa pekerjaan. Kontrol tersebut berinteraksi dengan perilaku interrupt NIC, sehingga pengaturan coalescing tidak dapat dinilai hanya dari hardware interrupt counter.

Pengukuran yang berguna mencakup packet rate, interrupt rate, utilisasi CPU, receive drop, latensi aplikasi, dan beban per queue.

Receive queue dapat memiliki jalur interrupt terpisah

NIC multiqueue modern umumnya menyediakan beberapa receive queue dan menggunakan vector MSI-X agar queue dapat memiliki jalur interrupt yang berbeda.

Hal ini memungkinkan pemrosesan traffic tersebar ke beberapa CPU. Ini juga berarti interrupt coalescing merupakan bagian dari desain queue placement yang lebih besar. Interrupt rate rendah pada satu queue tidak membuktikan bahwa seluruh adapter sudah seimbang.

Receive Side Scaling dapat mengarahkan flow ke queue, sementara interrupt affinity menentukan CPU mana yang menangani notifikasi terkait. Coalescing kemudian mengontrol frekuensi notifikasi untuk pekerjaan yang terkumpul pada queue tersebut.

Karena itu, perubahan tuning dapat memindahkan bottleneck alih-alih menghilangkannya. Mengurangi interrupt mungkin membebaskan waktu CPU, tetapi distribusi queue yang buruk masih dapat membebani satu core secara berlebihan sementara core lain hanya sedikit terpakai.

Skema adaptif mengubah pengaturan mengikuti traffic

Sebagian driver dan adapter mendukung adaptive interrupt moderation. Alih-alih mempertahankan satu delay atau threshold tetap, sistem mengubah moderasi berdasarkan kondisi traffic yang diamati.

Tujuannya adalah mengutamakan notifikasi cepat pada rate rendah dan batching yang lebih kuat ketika packet rate meningkat. Ini dapat menjadi kompromi yang berguna bagi mesin yang bergantian menangani traffic interaktif dan bulk transfer.

Perilaku adaptif juga membuat hasil pengukuran kurang statis. Pola interrupt efektif dapat berubah seiring perubahan traffic meskipun administrator tidak mengubah pengaturan apa pun.

Untuk pengujian performa yang dapat direproduksi, catat apakah adaptive moderation aktif bersama parameter coalescing yang terlihat.

Jumlah interrupt yang lebih rendah tidak menjamin latensi lebih rendah

Interrupt counter mudah diamati, tetapi meminimalkannya bukan tujuan performa yang lengkap.

Batching yang sangat agresif dapat menghasilkan penurunan jumlah interrupt yang mengesankan sambil meningkatkan latensi request. Batching yang terlalu lemah dapat menjaga notification delay tetap rendah tetapi menghabiskan kapasitas CPU yang dibutuhkan aplikasi.

Target yang berguna adalah moderasi secukupnya untuk mengendalikan overhead notifikasi tanpa melanggar kebutuhan latensi dan throughput workload.

Keseimbangan tersebut dapat berbeda antara storage server yang membawa transfer besar, host packet processing yang menangani jutaan paket kecil, dan layanan interaktif yang didominasi pertukaran request-response singkat.

Hardware offload memengaruhi pengukuran yang sama

Interrupt coalescing bekerja berdampingan dengan mekanisme NIC dan kernel lainnya. Receive aggregation, checksum offload, fitur segmentation, queue steering, dan perilaku polling semuanya dapat mengubah jumlah pekerjaan yang terkait dengan satu interrupt.

Akibatnya, jumlah paket per interrupt bukan ukuran efisiensi yang universal. Satu interrupt dapat mewakili jumlah pekerjaan protokol yang berbeda pada sistem atau pengaturan offload yang berbeda.

Perbandingan paling berguna ketika hardware, driver, jumlah queue, konfigurasi offload, pola traffic, dan penempatan CPU dibuat tetap.

Kontrol praktisnya adalah frekuensi notifikasi

Interrupt coalescing tidak membuat pemrosesan paket menjadi gratis dan tidak meningkatkan link speed. Mekanisme ini mengontrol seberapa sering adapter meminta CPU melayani pekerjaan jaringan yang telah selesai.

Delay yang lebih pendek dan batch yang lebih kecil mengutamakan notifikasi cepat. Delay yang lebih panjang dan batch yang lebih besar mengutamakan overhead interrupt yang lebih rendah. Traffic rate menentukan seberapa cepat threshold terpenuhi, sementara timer membatasi waktu tunggu ketika traffic ringan.

Pengaturan akhirnya merupakan keputusan antara latensi dan CPU. Ukur kedua sisi pertukaran tersebut dengan pola traffic yang sebenarnya, alih-alih menganggap jumlah interrupt paling sedikit sebagai hasil terbaik.