Content deleted Content added
added see also + improved citations |
added RSS description |
||
Line 1:
'''Network packet steering''' of incoming traffic for '''[[Multi-core_processor|multi-core architectures]]''' is needed in modern network computing environment, especially in [[Data_center|data centers]], where the high bandwidth and heavy loads would easily congestion a single core's queue.
[[File:Simple NIC and cores architecture.png|thumb|upright=1.6|Simple graph showing the path receiving packets need to travel to reach the cores' queues]]
For this reason many techniques, both in hardware and in software, are leveraged in order to distribute the incoming load of [[Network_packet|packets]] across the cores of the processor. <br>
As shown, by the figure beside, packets coming into the [[Network_interface_controller|network interface card (NIC)]] are processed and loaded to the receiving queues managed by the cores.
The main objective is being able to leverage all the cores available within the processor to process incoming packets, while also improving performances like [[Latency (engineering)|latency]] and [[Network throughput|throughput]].
<ref name="RSS kernel linux docs">{{Cite web|title=RSS kernel linux docs|url=https://www.kernel.org/doc/html/v5.1/networking/scaling.html#rss-receive-side-scaling|access-date=2025-07-08|website=kernel.org|language=en-US}}</ref>
<ref name="RFS by redhat">{{Cite web|title=RFS by redhat|url=https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/6/html/performance_tuning_guide/network-rfs|access-date=2025-07-08|website=docs.redhat.com|language=en-US}}</ref>
<ref name="RFS by nvidea">{{Cite web|title=RFS by nvidea|url=https://docs.nvidia.com/networking/display/mlnxofedv23070512/flow+steering|access-date=2025-07-08|website=docs.nvidia.com|language=en-US}}</ref>
<ref name="RSS overview by microsoft">{{Cite web|title=RSS overview by microsoft|url=https://learn.microsoft.com/en-us/windows-hardware/drivers/network/introduction-to-receive-side-scaling|access-date=2025-07-08|website=learn.microsoft.com|language=en-US}}</ref>
<ref name="RSS++">{{Cite journal|author = Barbette, Tom and Katsikas, Georgios P. and Maguire, Gerald Q. and Kostic, Dejan|title = RSS++: load and state-aware receive side scaling|year = 2019|journal = Association for Computing Machinery|url = https://doi.org/10.1145/3359989.3365412}}</ref>▼
== Hardware techniques ==
Hardware accelerated techniques like RSS and aRFS are used to route and load balance incoming [[Network_packet|packets]] across the multiple cores' queues of a processor.<br>
Those hardware supported methods achieve extremely low latencies and reduce the load on the CPU, as compared to the software based ones. However they require a specialized hardware integrated within the [[Network_interface_controller|network interface
<ref name="RSS++" />
▲<ref name="RSS++">{{Cite journal|author = Barbette, Tom and Katsikas, Georgios P. and Maguire, Gerald Q. and Kostic, Dejan|title = RSS++: load and state-aware receive side scaling|year = 2019|journal = Association for Computing Machinery|url = https://doi.org/10.1145/3359989.3365412}}</ref>
<ref name="aRFS by redhat">{{Cite web|title=aRFS by redhat|url=https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/6/html/performance_tuning_guide/network-acc-rfs|access-date=2025-07-08|website=docs.redhat.com|language=en-US}}</ref>
<ref name="aRFS by nvidea">{{Cite web|title=aRFS by nvidea|url=https://docs.nvidia.com/networking/display/mlnxofedv23070512/flow+steering#src-2396583156_safe-id-Rmxvd1N0ZWVyaW5nLUFjY2VsZXJhdGVkUmVjZWl2ZUZsb3dTdGVlcmluZyhhUkZTKQ|access-date=2025-07-08|website=docs.nvidia.com|language=en-US}}</ref>
Line 23 ⟶ 19:
=== RSS ===
[[File:RSS architecture.png|upright=1.7|thumb|simple view of the receive side scaling architecture]]
Receive Side Scaling (RSS) is an hardware supported technique, leveraging an [[indirection|indirection table]] indexed by the last bits of the result provided by an [[hash function]], taking as inputs the [[Header (computing)|header fields]] of the packets.
The hash function input is usually customizable and the header fields used can vary between use case and implementations.
Some notable example of header fields used are the [[Internet Protocol|layer 3 IP]] source and destination addresses, the protocol and the [[transport layer|layer 4]] source and destination port.
In this way, packets corresponding to the same flow will be directed to the same receiving queue, moreover all incoming flows will be [[Load balancing (computing)|load balanced]] across all the available cores thanks to the hash function.
<ref>{{Cite web|title=RSS intel doc|url=https://www.intel.com/content/dam/support/us/en/documents/network/sb/318483001us2.pdf|access-date=2025-07-08|website=earn.microsoft.com|language=en-US}}</ref>
<ref name="RSS overview by microsoft" />
Line 29 ⟶ 28:
<ref name="RSS kernel linux docs" />
<ref name="RSS++" />
=== aRFS ===
|