译|Monitoring and Tuning the Linux Networking Stack: Sending Data(十一)

接下来,在上面的循环内部开始另一个循环:/* clear last DMA location and unmap remaining buffers */ while (tx_desc != eop_desc) { tx_buffer++; tx_desc++; i+...

译|Monitoring and Tuning the Linux Networking Stack: Sending Data(十)

驱动操作注册驱动程序为各种操作实现一系列功能,例如:发送数据(ndo_start_xmit)获取统计信息(ndo_get_stats64)处理设备 ioctls(ndo_do_ioctl)还有更多。函数被导出为一系列排列在结构中的函数指针。 让我们来看看 igb 驱动程序源代码中这些操...

Linux Shell 编程

4 课时 |
2099 人已学 |
免费

Linux 运维自动化课程

4 课时 |
1478 人已学 |
免费

LINUX 企业常用服务

7 课时 |
3036 人已学 |
免费
开发者课程背景图

译|Monitoring and Tuning the Linux Networking Stack: Sending Data(九)

最后,我们来看看我们的朋友 dev_hard_start_xmit因此,我们已经遍历了整个网络栈,直到 dev_hard_start_xmit。 也许你是经 sendmsg 系统调用直接到达这里的,或者你是经 qdisc 上处理网络数据的 softirq 线程到达这里的。dev_hard_start...

译|Monitoring and Tuning the Linux Networking Stack: Sending Data(八)

handle_dev_cpu_collision来自 ./net/sched/sch_generic.c 的代码 handle_dev_cpu_collision 处理两种情况:传输锁由当前 CPU 持有。传输锁由其他 CPU 持有。在第一种情况下,这被作为配置问题处理,因此打印警告。 在第二种情况...

译|Monitoring and Tuning the Linux Networking Stack: Sending Data(七)

调优:Transmit Packet Steering(XPS)要使 XPS 工作,必须在内核配置中启用它(在 Ubuntu 的内核 3.13.0 上是启用的),并且需要一个位掩码来描述哪些 CPU 应该处理给定接口和传输队列的数据包。这些位掩码类似于 RPS 位掩码,您可以在内核文档中找到关于这些...

译|Monitoring and Tuning the Linux Networking Stack: Sending Data(六)

Transmit Packet Steering(XPS)Transmit Packet Steering(XPS)是一项特性,允许系统管理员确定哪些 CPU 可以处理设备的哪些传输队列的传输操作。此功能的主要目的是避免在处理传输请求时出现锁争用。使用 XPS 时,还期望获得其他好处,如减少缓存驱逐...

译|Monitoring and Tuning the Linux Networking Stack: Sending Data(五)

且 “硬件头”(hh)已缓存(因为之前发送过数据并已生成它),则调用 neigh_hh_output。否则,调用 output 函数。两条代码路径都以 dev_queue_xmit 结束,它传递 skb 到 Linux 网络设备子系统,在到达设备驱动程序层之前会进行更多处理。让我们跟随...

译|Monitoring and Tuning the Linux Networking Stack: Sending Data(四)

IP 协议层UDP 协议层简单地调用 ip_send_skb 传递 skbs 给 IP 协议,因此让我们从那开始,并掌握 IP 协议层!ip_send_skbip_send_skb 函数位于 ./net/ipv4/ip_output.c 中,非常短。 它只是向下调用 ip_local_out,如果 ...

译|Monitoring and Tuning the Linux Networking Stack: Sending Data(三)

最后,如果没有错误发生,__ip_make_skb 出队队列中的 skb,添加 IP 选项,并返回一个 skb,该 skb 已准备好传递给底层发送:return __ip_make_skb(sk, fl4, &queue, &cork);传输数据!如果没有发生错误,则 ...

译|Monitoring and Tuning the Linux Networking Stack: Sending Data(二)

UDP corking在变量声明和一些基本的错误检查之后,udp_sendmsg 要做的第一件事就是检查套接字是否“corked”。 UDP corking 是一项特性,允许用户程序请求内核累积多次 send 调用的数据到单个数据报中发送。 在用户程序中有两种方法可启用此选项:使用 setsocko...

本页面内关键词为智能算法引擎基于机器学习所生成,如有任何问题,可在页面下方点击"联系我们"与我们沟通。

产品推荐

社区圈子

Linux宝库
Linux宝库
1+人已加入
加入
相关电子书
更多
冬季实战营第二期:Linux操作系统实战入门
Decian GNU/Linux安全合规之路
从 Linux 系统内核层面来解决实际问题的实战经验
立即下载 立即下载 立即下载