一、简述
RSS和RPS全是网卡为了能接受数据包时应用多核构架所进行的特性提高,RSS要在硬件配置方面而RPS在系统方面。在数据包接收到随后在用户态的处理方法逻辑性如何处理,网络层的回应数据包如何发送可能会影响系统稳定性,RFS(Receive Flow Steering)和XPS(Transmit Packet Steering)这俩体制是为了处理这几个问题而引起的。
参照kernel:https://www.kernel.org/doc/Documentation/networking/scaling.txt
二、网卡处理基本要素
2.1 硬中断(Hardware Interrupt)
硬件配置造成键入核导出事件情况下,会往CPU推送数据信号,这一数据信号便是硬中断。CPU在接收到硬中断以后,会终止现在的工作,以最大优先解决这一硬件配置中断事情。
2.2 软中断(SoftIRQ)
软中断与硬中断在体制上类似仅仅优先略微低一点。在网卡传送数据的过程当中,最典型的流程是数据抵达网卡,网卡根据DMA将数据拷到为网卡推动指定内存区域,造成硬中断,随后CPU必须自己承担解决中断,将网卡的数据拷到核心特定地区,开展TCP/IP协议栈的处理方法,再通告网络层并把数据副本的网络层。在这样的情况下,如果一旦一个硬中断来了之后,CPU一直繁忙于解决网卡这个要求与服务顶层运用,那网卡后面数据来临造成的硬中断就会被推迟解决,并且其他设备及过程也难以使用这种CPU网络资源,导致CPU饥饿状态。因此在环保处理设备硬中断时,将全过程分为两阶段;第一阶段,CPU仅仅应用ISR又简单又快速反应硬中断,产生一个软中断,随后CPU能够顺利进行后面生产调度解决而网卡还可以继续接收数据;第二阶段,CPU会依据scheduler对一系列软中断依照优先开展排长队解决,将数据包移到TCP/IP协议栈和后面应用软件。
2.3 接收队列
网卡推动根据DMA将接收过的数据会拷到socket buffer然后由一个socket descriptor开展标识,全部等待处理的数据包的socket descriptor要被储存在接收队列里边,假如有好几个接收队列,则网卡会把packet依照某一优化算法获取到一个接收队列上。现今很多网卡也是通过一种叫RSS(Receive Side Scaling)的专业技术(将数据包的处理方法分配任务到好几个CPU)在硬件设备上适用Rx多队列的。
三、RSS(Receive Side Scaling)
Contemporary NICs support multiple receive and transmit descriptor queues (multi-queue). On reception, a NIC can send different packets to different
queues to distribute processing among CPUs. The NIC distributes packets by applying a filter to each packet that assigns it to one of a small number
of logical flows. Packets for each flow are steered to a separate receive queue, which in turn can be processed by separate CPUs. This mechanism is
generally known as RSS.
当数据包抵达NIC以后,要被放进接收队列;在网卡推动复位环节,接收队列会赋予了一个IRQ号,并且还会分派一个CPU去处理这一IRQ,这一CPU必须实行这一IRQ的ISR而且在一般情况下还需要承担实行后续数据包在核心时期的解决。在单核心系统内,这是一个很好的工作模型,但在多核系统内,这种方法在高流量时没法充分发挥多核的功效,必须使用一个核心,开展用时的TCP/IP协议栈的处理方法。
因此在目前的NIC中,大部分也支持RSS功能的,开启这类作用以后,网卡会有好几个接收和推送队列,这种队列对所分派不同类型的CPU进行修复。
RSS为网卡数据传送应用多核带来了适用,RSS在硬件配置/推动等级完成多队列而且应用一个hash函数对数据包开展多队列分离出来解决,这一hash依据源IP、目地IP、源端口和目标端口号开展数据包遍布挑选,那样同一数据流的数据包能被置放到同一个队列进行修复并且能够一定程度上确保数据处理效率性。
四、RPS(Receive Packet Steering)
Receive Packet Steering (RPS) is logically a software implementation of RSS.
RPS requires a kernel compiled with the CONFIG_RPS kconfig symbol (on by default for SMP). Even when compiled in, RPS remains disabled until
explicitly configured. The list of CPUs to which RPS may forward traffic can be configured for each receive queue using a sysfs file entry:
/sys/class/net/<dev>/queues/rx-<n>/rps_cpus
RPS是与RSS相似的一个技术性,区别就是RSS是网的硬件配置完成而RPS是核心手机软件完成。RPS协助单队列网卡把它所产生的SoftIRQ分配到好几个CPU内核进行修复。在这样一个计划中,为网卡单队列分配CPU只解决全部硬件配置中断,因为硬件配置中断的简单高效,即便在同一个CPU进行修复,危害也非常有限,而费时的软中断解决能被分配到不一样CPU进行修复,能够有效的防止解决短板。
五、RFS(Receive Flow Steering)
While RPS steers packets solely based on hash, and thus generally provides good load distribution, it does not take into account
application locality. This is accomplished by Receive Flow Steering (RFS).
RFS is only available if the kconfig symbol CONFIG_RPS is enabled (on by default for SMP). The functionality remains disabled until explicitly
configured. The number of entries in the global flow table is set through:
/proc/sys/net/core/rps_sock_flow_entries
The number of entries in the per-queue flow table are set through:
/sys/class/net/<dev>/queues/rx-<n>/rps_flow_cnt
使用RPS接收数据包以后,会到指定CPU开展软中断解决,以后就会在用户态进行修复;假如用户态处理CPU没有在软中断处理CPU,往往会导致CPU cache miss,造成极大的特性危害。RFS能够确保解决软中断与处理应用软件是同一个CPU,这样会确保local cache hit,提高处置高效率。RFS需要与RPS一起搭配使用。
六、XPS(Transmit Packet Steering)
Transmit Packet Steering is a mechanism for intelligently selecting which transmit queue to use when transmitting a packet on a multi-queue
device.
XPS is only available if the kconfig symbol CONFIG_XPS is enabled (on by default for SMP). The functionality remains disabled until explicitly
configured. To enable XPS, the bitmap of CPUs/receive-queues that may use a transmit queue is configured using the sysfs file entry:
For selection based on CPUs map:
/sys/class/net/<dev>/queues/tx-<n>/xps_cpus
For selection based on receive-queues map:
/sys/class/net/<dev>/queues/tx-<n>/xps_rxqs
XPS根据建立CPU到网口推送序列的相互关系,来确保解决推送软中断请求的CPU和往外传送数据包的CPU是同一个CPU,用于确保推送数据文件时的那种可逆性。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。