dev_queue_xmit 发生了什么?skb还会在哪里缓存
见 codebox/net/qdisk/xmit.log中保存了一份记录
调用关系
sch_direct_xmit --> dev_hard_start_xmit --> xmit_one --> netdev_start_xmit -->__netdev_start_xmit ---> ops->ndo_start_xmit --> e1000_xmit_frame
可以好好看看e1000_xmit_frame函数的实现,这是驱动的代码.
也就是时候从ip_finish_local一路下来就到驱动了
6506 0) | ip_finish_output() {
6507 0) 0.023 us | ipv4_mtu();
6508 0) | ip_finish_output2() {
6509 0) 0.027 us | skb_push();
6510 0) | dev_queue_xmit() {
6511 0) | __dev_queue_xmit() {
6512 0) 0.035 us | dst_release();
6513 0) 0.151 us | netdev_pick_tx();
6514 0) 0.029 us | _raw_spin_lock();
6515 0) | sch_direct_xmit() {
6516 0) | validate_xmit_skb_list() {
6517 0) | validate_xmit_skb.isra.97.part.98() {
6518 0) | netif_skb_features() {
6519 0) 0.024 us | passthru_features_check();
6520 0) 0.026 us | skb_network_protocol();
6521 0) 0.788 us | }
6522 0) 1.137 us | }
6523 0) 1.453 us | }
6524 0) 0.024 us | _raw_spin_lock();
6525 0) | dev_hard_start_xmit() {
6526 0) | e1000_xmit_frame [e1000e]() {
6527 0) 0.151 us | e1000_maybe_stop_tx [e1000e]();
6528 0) 0.028 us | e1000_maybe_stop_tx [e1000e]();
6529 0) 2.932 us | }
6530 0) 3.668 us | }
6531 0) 0.026 us | _raw_spin_lock();
6532 0) 6.545 us | }
6533 0) 0.038 us | __local_bh_enable_ip();
6534 0) 9.135 us | }
6535 0) 9.525 us | }
6536 0) 0.039 us | __local_bh_enable_ip();
6537 0) + 10.858 us | }
6538 0) + 11.445 us | }
dev_queue_xmit 发生了什么?skb还会在哪里缓存的更多相关文章
- 缓存服务,还未创建完缓存时, 需要更改图层名称、服务名称、数据源位置、mxd名称等
缓存服务,还未创建完缓存时, 需要更改图层名称.服务名称.数据源位置.mxd名称等.已经创建好的缓存还可以再用吗? 测试后可以, 注意:新服务相对旧服务,符号样式没有改变,切片方案没有变化. 测试步骤 ...
- skb_reserve(skb,2)中的2的意义
skb_reserve() skb_reserve()在数据缓存区头部预留一定的空间,通常被用来在数据缓存区中插入协议首部或者在某个边界上对齐.它并没有把数据移出或移入数据缓存区,而只是简单地更新了数 ...
- 有关项目依赖包发生 Manifest Merge 冲突的详细解决方案
安卓开发使用 Gradle 插件管理依赖包确实非常方便,尤其是在解决一些依赖冲突的问题上.比如,重复依赖的问题,具体内容请我之前写的一篇文章: 有关 Android Studio 重复引入包的问题和解 ...
- 转:Linux内部的时钟处理机制全面剖析
Linux内部的时钟处理机制全面剖析 在 Linux 操作系统中,很多活动都和时间有关,例如:进程调度和网络处理等等.所以说,了解 Linux 操作系统中的时钟处理机制有助于更好地了解 Linux 操 ...
- ARP 实现
ARP 实现 现在我们介绍一下arp的实现,内核版本2.6.24. [数据结构] 协议栈通过ARP协议获取到的网络上邻居主机的IP地址与MAC地址的对应关 系都会保存在这个表中,以备下次与邻居通讯时使 ...
- TCP的发送系列 — tcp_sendmsg()的实现(一)
主要内容:Socket发送函数在TCP层的实现 内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd 上一篇blog讲的是send().sendto().sen ...
- Selective Acknowledgment 选项 浅析 2
来自:http://abcdxyzk.github.io/blog/2013/09/06/kernel-net-sack/ static int tcp_sacktag_write_queue(str ...
- linux tcp Nagle算法,TCP_NODELAY和TCP_CORK 转载
转载自: http://www.cnhalo.net/2016/08/13/linux-tcp-nagle-cork/ http://abcdxyzk.github.io/blog/2018/07/0 ...
- IP 层收发报文简要剖析5--ip报文发送2
udp 发送ip段报文接口ip_append_data ip_append_data 函数主要用来udp 套接字以及raw套接字发送报文的接口.在tcp中发送ack 以及rest段的ip_send_u ...
随机推荐
- [HDU6326]Monster Hunter(贪心)
用(a,b)表示一个点先失去a点HP,然后增加b点HP 首先容易证明忽略父亲条件下,任意两个点,先吃b大的最优 对于一个节点v和它的父节点u,若此时选v最优,那么就是吃到u时可以立即吃掉v, 于是可以 ...
- UPDATE_ENTITY実行
1.クラスZCL_Z_EPM_RKT_DPC_EXTのクラスビルダ画面から.SALESORDERS_UPDATE_ENTITYメソッドを選択し.右クリックで.再定義をクリックします. 2.以下のソース ...
- Address already in use: JVM_Bind,tomcat启动异常
严重: StandardServer.await: create[8050]: java.net.BindException: Address already in use: JVM_Bind tom ...
- Java设计模式(2)——创建型模式之工厂方法模式(Factory Method)
一.概述 上一节[简单工厂模式]介绍了通过工厂创建对象以及简单的利弊分析:这一节来看看工厂方法模式对类的创建 工厂方法模式: 工厂方法与简单工厂的不同,主要体现在简单工厂的缺点的改进: 工厂类不再负责 ...
- C#第一阶段——结构体
概念理解: 很多相互联系的信息可以组成一个整体.比如一个学生的信息包括学号.姓名.性别.年龄等,它们紧密联系,共同描述学生的状况.在 C#中我们可以把这些紧密联系变量定义成结构体(Str ...
- 代码混淆防止APP被反编译指南
本文来自网易云社区 安卓App安全包含很多内容,包括混淆代码.整体Dex加固.拆分 Dex 加固.虚拟机加固等方面.事实上,这些内容也是国内近几年Android App安全保护的一种主要趋势. 混淆代 ...
- android学习八 多用途碎片
碎片设计初衷:帮助开发人员管理应用程序功能. 特点:1.大量重用 2.可用性强 3.适应多种布局 碎片 1.包含一个视图层次结构和具有相应 ...
- create-react-app创建react项目 css模块化处理
用的css预处理器用sass,其他大同小异. 用create-react-app创建项目,执行npm run eject弹出配置文件(此操作不可逆): 配置sass,用的最新的CRA,webpack4 ...
- 「日常训练」Queue(Codeforces Round 303 Div.2 D)
简单到让人不敢相信是D题,但是还是疏忽了一点. 题意与分析 (Codeforces 545D) 题意:n人排队,当一个人排队的时间超过他需要服务的时间就会厌烦,现在要求一个最优排列使得厌烦的人最少. ...
- OSG的组成结构
OSG的组成结构 核心结构 OSG的功能类采用“命名空间+类名称”的形式来命名.命名空间的命名方式为:第一个单词小写,后继单词的首字母大写,例如osg.osgUtil.osgViewer等:类的名称则 ...