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 ...
随机推荐
- python教程(一)·简介
先简单介绍下python.(真的很简单) python是什么? Python是Guido van Rossum发布于1991年的一种计算机程序设计语言.是一种动态的.面向对象的脚本语言,是一种解释型的 ...
- Go中处理文本格式
首先是xml 解析xml package main import ( "encoding/xml" //xml标准库 "fmt" "io/ioutil ...
- mysql 长连接断开问题
从MySQL 5.0.3开始,默认情况下禁止再连接,这是5.0.13中的新选项,提供了一种以显式方式设置再连接行为的方法. mysql应用程序建立的长连接,大约过8小时会断开[没测过,网上都是这么说的 ...
- PIE currently adds full or partial support to IE 6 through 8 for the following CSS3 features
PIE stands for Progressive Internet Explorer. It is an IE attached behavior which, when applied to a ...
- mongoengine中queryset触发网络访问机制剖析
背景 最近新上线的一个服务,偶尔会有超时告警,其主要逻辑仅仅只是简单的读/写mongodb,而且服务上线初期,流量并不大,因而理论上来说,每次请求都应该很快才对,事实上分析日志也证实90%以上的请求都 ...
- OpenCV代码提取:dft函数的实现
The Fourier Transform will decompose an image into its sinus and cosines components. In other words, ...
- verilog入门语法学习-第1篇
1. 如何观察被测模块的响应: 在initial 块中,用系统任务$time 和 $monitor $time 返回当前的仿真时刻 $monitor 只要在其变量列表中有某一个或某几个变 量值发生变化 ...
- imageNamed和imageWithContextOfFile的区别?哪个性能高
imageNamed性能高 1.用imageNamed的方式加载时,图片使用完毕后缓存到内存中,内存消耗多,加载速度快.即使生成的对象被 autoReleasePool释放了,这份缓存也不释放,如果图 ...
- libevent学习八(evbuffer)
1.evbuffer以队列的形式管理字节,从尾部添加,从头部取出(FIFO) 2.evbuffer内部存储形式是多个独立的连续内存 接口 //创建和删除 struct evbuffer * ...
- beauifulsoup模块的介绍
01 爬虫基础知识介绍 相关库:1.requests,re 2.BeautifulSoup 3.hackhttp 使用requests发起get,post请求,获取状态码,内容: 使用re匹 ...