作者:新浪微博(@NP等不等于P) 计算机学习微信公众号(jsj_xx) 1 数据结构 每个cpu都配有一个napi queue,用于放待处理的napi结构,napi结构里有对应的网卡、poll函数等重要信息(如果是非napi,每个cpu的这个napi queue里内置了2个东东:一个特殊的napi用于兼容napi处理,其含有一个特殊的poll函数;另外一个是input queue,用于存放收到的包)。 2 硬中断处理 当有包来时,收包的该网卡的对应硬中断(multiqueue时一个网卡会对应多个中断)在某个cpu上的处理: 1)调用函数将该网卡的该中断对应的napi结构(napi时,每个网卡的每个中断都会有一个对应的napi结构;非napi时,则使用该cpu的napi queue里内置的napi结构,同时会将包收至该napi queue里的input queue,一次硬中断里最多放1000个,否则丢弃)放到该cpu的napi queue里 2)然后触发软中断,剩下就是软中断的事了 3 软中断处理 该cpu上的软中断的处理: 逐个处理本cpu的napi queue里的各个napi结构体,其实就是调用该结构体里标识的网卡的poll函数进行收包并上送至协议栈(非napi时不需要poll了,直接从上述的input queue里读),处理时遵守三个原则:(第一个违反了则跳过该设备,后两个违反了则跳出本轮软中断,由下一轮软中断继续处理) 1)本轮软中断里该网卡的各个napi的总包数不超过64个 2)本轮软中断里所有收包数不能超过300个 3)本轮软中断里总耗时不能超过2ms 关于我们 新浪微博(@NP等不等于P) 计算机学习微信公众号(jsj_xx) 原创技术文章,感悟计算机,透彻理解计算机! |
|