Receive Side Scaling Mendistribusikan Network Flow ke Beberapa CPU Queue

Network adapter cepat dapat menerima packet lebih cepat daripada kemampuan satu processor core untuk menanganinya secara efisien. Receive Side Scaling, yang umum disingkat RSS, membagi traffic masuk ke beberapa hardware receive queue. Setiap queue dapat dikaitkan dengan processor berbeda sehingga packet processing dapat berjalan paralel.

RSS biasanya menetapkan packet berdasarkan flow, bukan membagikan setiap packet secara independen. Pendekatan ini mempertahankan properti ordering yang berguna sambil tetap menyebarkan banyak connection simultan ke queue yang tersedia.

Hash memilih receive queue

Adapter mengambil field tertentu dari setiap packet masuk dan memasukkannya ke hash function. Input yang umum mencakup source dan destination IP address serta transport-layer port untuk traffic TCP atau UDP.

Hash value yang dihasilkan dipetakan melalui indirection table ke receive queue. Driver dapat mengonfigurasi table tersebut agar queue assignment sesuai dengan processor yang tersedia bagi networking stack.

Packet dengan selected header field yang sama menghasilkan hash result yang sama selama konfigurasi stabil. Karena itu packet cenderung tiba pada receive queue yang sama alih-alih berpindah-pindah antarprocessor.

Per-flow steering menjaga packet locality

Mengirim packet berdekatan dari satu connection ke queue berbeda dapat meningkatkan synchronization dan cache traffic antarprocessor core. Hal itu juga dapat memperumit packet ordering sebelum layer jaringan yang lebih tinggi memproses stream.

Flow-based steering menjaga receive work milik satu connection tetap terkonsentrasi pada satu queue. Connection lain dapat dipetakan ke queue lain, sehingga sistem memperoleh parallelism antar-flow tanpa secara default memecah setiap flow ke banyak core.

Desain ini sangat efektif ketika server menangani banyak active connection. Satu flow dengan rate tinggi tetap dapat dibatasi oleh kapasitas processing yang terkait dengan queue tempat flow itu ditempatkan, karena RSS tidak otomatis membagi satu flow ke seluruh core.

Indirection table mengontrol distribusi

RSS indirection table memetakan hash result ke queue. Driver atau operating system dapat mengubah mapping ini untuk memakai subset queue, mengganti processor affinity, atau melakukan rebalance traffic.

Entry table yang seragam tidak menjamin workload seragam. Traffic nyata dapat memiliki beberapa dominant flow, dan flow tersebut bisa saja ter-hash ke queue yang sama. Queue counter dapat menunjukkan imbalance ini walaupun table tampak dikonfigurasi merata.

Sebagian sistem juga mendukung steering mechanism tambahan di atas atau di samping RSS. Mekanisme tersebut dapat memindahkan flow tertentu berdasarkan observed workload, policy, atau application placement.

Queue affinity memengaruhi perilaku cache

Receive queue biasanya memicu interrupt atau polling work pada processor tertentu. Menjaga queue processing tetap pada core yang konsisten dapat meningkatkan cache locality karena packet descriptor, protocol state, dan application data dapat tetap dekat dengan processor yang menangani traffic tersebut.

Affinity yang buruk dapat menghapus sebagian manfaat itu. Jika interrupt datang pada satu processor sementara protocol atau application work berulang kali bermigrasi ke tempat lain, sistem dapat menghabiskan lebih banyak waktu untuk memindahkan cache line dan berkoordinasi antarcore.

Karena itu tuning RSS bukan sekadar menambah jumlah queue. Queue-to-processor placement, interrupt setting, NUMA topology, dan workload shape semuanya dapat memengaruhi hasil.

Lebih banyak queue memiliki batas praktis

Receive queue tambahan membuka lebih banyak peluang parallel processing, tetapi setiap queue juga memakai descriptor, interrupt state, dan resource driver. Jumlah queue yang jauh melampaui jumlah processor yang berguna dapat menambah overhead tanpa meningkatkan throughput.

Virtual machine dan container dapat menambahkan layer queue mapping lain. Physical adapter dapat mengarahkan traffic ke hardware queue sementara virtual networking layer melakukan distribusi sendiri sebelum packet mencapai guest atau workload.

Konfigurasi yang berguna adalah konfigurasi yang menjaga receive work tetap tersebar tanpa koordinasi berlebihan. Queue statistic, processor utilization, interrupt placement, dan application throughput memberikan sinyal konkret untuk memeriksa keseimbangan tersebut.

RSS mengubah packet classification pada network adapter menjadi mekanisme CPU scaling. Hash dan indirection table menjaga setiap flow relatif stabil sambil memungkinkan banyak flow memakai beberapa receive queue dan processor core secara paralel.