2011/1/11 fbwww <
fbga...@163.com>:
> 软中断都已经对报文做处理了,要非这么做,那就软中断里不要处理报文,在软中断里把报文从CPU自己的队列摘下来放到该它处理的CPU队列里,再次触发另外一个CPU的软中断,不过这么做,要触发两次软中断,实在不好...,不知道具体google这个补丁是怎么做的
>
假设网卡是非napi的:(其实napi的跟这个差不多)
google的rps其实就是在netif_rx的时候,根据skb的不同hash,把skb挂接到对应的cpu的softnet_data->input_pkt_queue。
softnet_data多了一个结构体rps_ipi_list。如果是挂接到其他的cpu上,那么就是把其他的cpu挂接到本地cpu的rps_ipi_list中。
而在接收数据包的时候,如果rps_ipi_list不为空,那么就触发对应的cpu软中断。
> 另外,触发别的CPU软中断是怎么做的,是不是使用CPU间中断
通过在一个cpu上调用另一个cpu的函数来实现。可以看看这个函数__smp_call_function_single