http://wenku.baidu.com/link?url=mMKDH_fKmUXN7L6rANIFHjoHdKCYBLlDrqoYB1daDTEkNFk9Bt9xlJtS_4BKBj6w22WDrUWO3PNjf6UpYxwMfkX206E9qVBtg3RgYe4ScOG

本文档的个:

1)  当网卡接收到一个数据包,并通过DMA方式写入内存,此时网卡会向前移动rdh,并发送网卡中断。

2)  网卡发送完数据包,并移动tdh,当tdh移动次数达到一定数量,或者tdh等于tdt的时候会发生网卡中断。

3)  如果不发送也不接收数据包,网卡也会定时产生中断,比如一秒一次。

以上3个时机产生相同的中断信号,所以会调用相同的中断处理例程。

说明:这里对时机的总结是通过实验获得,不是很精确,但是基本上是正确的。

网卡只是产生网卡中断,但是网卡不能决定由哪个CPU来响应中断。在多CPU体系下,由中断控制器来决定由哪个CPU响应中断。

图2是linux-2.6.35在没有使用RPS下的数据包接收和发生流程。

在这种模式下,当有一个CPU在处理数据包时,其它CPU就不会再处理数据包了,虽然中断控制器会选择不同的CPU来响应网卡中断,但CPU不是并发的处理数据包,而是串行的处理数据包。

图3,图4是开启RPS后的流程。

2数据包接收和发生流程

 

3,图4是开启RPS后的流程。

3开启RPS后的流程-1

4开启RPS后的流程-2

未开启RPS的情况下,针对一个网卡的数据包处理总是串行的,但是当有2个或者2个以上的网卡时,通过配置可以很好的提高性能:eth0CPU0响应中断,eth1CPU1响应中断,这样整体上就达到了负载均衡。

开启RPS的情况:只要有多个流,且通过流计算出的哈希值是均衡分布的,那么就可以达到负载均衡。

 

注意到RPS只对接收过程进行分流,并没对skb释放过程分流,所以在释放发生完的数据包的时候,会频繁刷新CPU缓存,从以上过程可以看出,由谁发送的数据包,就由谁来释放数据包更合理。这个结论同样适合于无RPS的情况。

 

结论:由谁发送的数据包,就由谁来释放更合理。

 

附录:

独孤九贱的这篇测试文章,可以验证本文结论(RPS部分)

在多核系统上网络数据转发实验和一点思考

http://www.linux-ask.com/Linux%C4%DA%BA%CB%CE%CA%CC%E2/4921.html

 

多CPU下基于e1000e驱动的数据包以及网卡中断流程分析.doc的更多相关文章

  1. 基于TILE-GX实现快速数据包处理框架-netlib实现分析【转】

    最近在研究suricata源码,在匹配模式的时候,有tilegx mpipe mode,转载下文,了解一下. 原文地址:http://blog.csdn.net/lhl_blog/article/de ...

  2. wireshark在windows下无法抓取localhost数据包

    在调试SSL时要抓包,通过tcpview和minisniffer等工具明明看到tcp连接已经建立并开始收发数据了,但wireshark却总是无法抓到相应的数据包. 今天早上,HQ的高工告诉我“wire ...

  3. Linux下基于命令行的抓包方法

    大家可能都已经对著名的抓包工具Ethereal比较熟悉了,这里再介绍一种基于命令行的抓包工具tcpdump. 举例:抓本机1813端口上的数据,并将抓包结果保存在test.cap文件中 然后在本地可以 ...

  4. 基于DPDK的高效数据包捕获技术分析与应用

    被NFV的论文折磨了两天,今天上午看了两篇DPDK的综述. 传统的包捕获机制 1. BPF 两个组成部分:转发部分和过滤部分. 转发部分负责从链路层提取数据包并转发给过滤部分. 过滤部分根据过滤规则, ...

  5. 深入理解USB流量数据包的抓取与分析

    0x01 问题提出 在一次演练中,我们通过wireshark抓取了一个如下的数据包,我们如何对其进行分析? 0x02 问题分析 流量包是如何捕获的? 首先我们从上面的数据包分析可以知道,这是个USB的 ...

  6. TP-link TL-WN725 USB无线网卡在DX2 CPU下的Xlinux 驱动移植

    网上查到,TP-link TL-WN725 USB无线网卡用的芯片是8188EU 下载驱动:http://download.csdn.net/detail/zzz_mraz/5262010 tar z ...

  7. 嵌入式Linux驱动学习之路(五)u-boot启动流程分析

    这里说的u-boot启动流程,值得是从上电开机执行u-boot,到u-boot,到u-boot加载操作系统的过程.这一过程可以分为两个过程,各个阶段的功能如下. 第一阶段的功能: 硬件设备初始化. 加 ...

  8. 使用 gopacket 进行数据包捕获,注入和分析

    原文链接:https://www.devdungeon.com/content/packet-capture-injection-and-analysis-gopacket 接口文档:https:// ...

  9. Windows下底层数据包发送实战

    1.简介 所谓“底层数据包”指的是在“运行”于数据链路层的数据包,简单的说就是“以太网帧”,而我们常用的Socket只能发送“运行”在传输层的TCP.UDP等包,这些传输层数据包已经能满足绝大部分需求 ...

随机推荐

  1. java.io.StreamCorruptedException: invalid type code: AC错误的解决方法

    问题描述: 在向一个文件写入可序列化对象时,每次只想向文件的末尾添加一个可序列化的对象,于是使用了FileOutputStream(文件名,true)间接的构建了ObjectOutputStream流 ...

  2. Spring IoC源码解读——谈谈bean的几种状态

    阅读Spring IoC部分源码有一段时间了,经过不断的单步调试和参阅资料,对Spring容器中bean管理有了一定的了解.这里从bean的几个状态的角度出发,研究下IoC容器. 一.原材料 Xml中 ...

  3. Spring IoC源码解决——工具篇Eclipse

    题外话 对于Spring框架,平时都是点到为止,停留在会用的程度.一直以来都想深入学习下,刚好最近看到<Spring源码深度解析>,所以想随着书本深入学习一下. 如果用Maven 如果使用 ...

  4. 如何实现桌面App图标可以动态显示消息数(类似手机上的QQ图标)?

    手机上的APP , 像QQ和微信等都可以在图标上动态显示消息数(最大99) , 那么你有没有想过这些效果是如何实现的?桌面上开发的传统应用程序能否也实现类似的功能? 1 思路 桌面快捷方式的图标本质上 ...

  5. 类似 Dribbble 下载按钮的 SVG 弹性动画进度条

    Codrops 发布了一个如何创建一个基于弹性效果的 SVG 加载进度条教程,基于 SVG 和 TweenMax 实现.按钮开始的时候是一个带有箭头的图标,一旦它被点击,动画成一个有趣的小金属丝和一个 ...

  6. Cool!15个创意的 CSS3 文本效果【下篇】

    这里文章收集了15个创意的 CSS3 文本效果,所有的都是精心挑选,这些可能会增加创意的火花到你的下一个项目.其中有些是用于特定用途,而另一些则适用于多种用途.如果你想要一个精彩而又充满色彩的文字效果 ...

  7. 避开unity的坑(转摘)

    避开unity的坑(转摘) 以下总结一部分来自经验之谈,一部分来自其他人的分享.总的来讲,unity开发原型和效果.验证想法,确实是无比便利.可能一个月就把核心玩法做得差不多.强大的编辑器功能让我们也 ...

  8. input输入样式,动画

    模板描述:input输入样式 动画,有输入框也有搜索框的样式,多种多样,大家根据自己的喜欢来. 找网站SEO教程,网站模板,以及想要建立个人博客的朋友来涂志海个人博客网,这里有你想要的一切(万一没有的 ...

  9. SharePoint 2013 关于自定义显示列表表单的bug

    1.在SharePoint 2013中,我们隐藏列表Dispform页面的ListFormWebPart部件,转而使用自定义显示列表表单进行展示,因为这样更容易定制我们需要的显示: 2.之后发现文件夹 ...

  10. tomcat下运行多个项目

    1. tomact下修改端口解决端口冲突 http://jingyan.baidu.com/article/9f63fb91d0f1b8c8400f0e1d.html 打开 servers下面的ser ...