Linux 网络包接收过程的监控与调优

本文深入探讨Linux网络包接收过程,包括接收到RingBuffer、硬中断处理和软中断处理。介绍了ethtool、ifconfig、/proc和sysfs等监控工具,以及RingBuffer、硬中断和软中断的调优方法,如多队列网卡、中断合并和GRO。通过实例和内核参数调整,帮助读者理解和优化Linux网络性能。
摘要由CSDN通过智能技术生成

Linux内核对网络包的接收过程大致可以分为接收到RingBuffer、硬中断处理、ksoftirqd软中断处理几个过程。其中在ksoftirqd软中断处理中,把数据包从RingBuffer中摘下来,送到协议栈的处理,再之后送到用户进程socket的接收队列中。 Linux教程 理解了Linux工作原理之后,还有更重要的两件事情。第一是动手监控,会实际查看网络包接收的整体情况。第二是调优,当你的服务器有问题的时候,你能找到瓶颈所在,并会利用内核开放的参数进行调节。

先说几个工具

在正式内容开始之前,我们先来了解几个Linux下监控网卡时可用的工具。

1)ethtool

首先第一个工具就是我们在上文中提到的ethtool,它用来查看和设置网卡参数。这个工具其实本身只是提供几个通用接口,真正的实现是都是在网卡驱动中的。正因为该工具是由驱动直接实现的,所以个人觉得它最重要。

该命令比较复杂,我们选几个今天能用到的说

  • -i 显示网卡驱动的信息,如驱动的名称、版本等
  • -S 查看网卡收发包的统计情况
  • -g/-G 查看或者修改RingBuffer的大小
  • -l/-L 查看或者修改网卡队列数
  • -c/-C 查看或者修改硬中断合并策略

实际查看一下网卡驱动:

# ethtool -i eth0driver: ixgbe......

这里看到我的机器上网卡驱动程序是ixgbe。有了驱动名称,就可以在源码中找到对应的代码了。对于ixgbe来说,其驱动的源代码位于drivers/net/ethernet/intel/ixgbe目录下。ixgbe_ethtool.c`下都是实现的供ethtool使用的相关函数,如果ethtool哪里有搞不明白的,就可以通过这种方式查找到源码来读。另外我们前文《图解Linux网络包接收过程》里提到的NAPI收包时的poll回调函数,启动网卡时的open函数都是在这里实现的。

2)ifconfig

网络管理工具ifconfig不只是可以为网卡配置ip,启动或者禁用网卡,也包含了一些网卡的统计信息。

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet 10.162.42.51  netmask 255.255.248.0  broadcast 10.162.47.255        inet6 fe80::6e0b:84ff:fed5:88d1  prefixlen 64  scopeid 0x20<link>        ether 6c:0b:84:d5:88:d1  txqueuelen 1000  (Ethernet)        RX packets 2953454  bytes 414212810 (395.0 MiB)        RX errors 0  dropped 4636605  overruns 0  frame 0        TX packets 127887  bytes 82943405 (79.1 MiB)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  • RX packets:接收的总包数
  • RX bytes:接收的字节数
  • RX errors:表示总的收包的错误数量
  • RX dropped:数据包已经进入了 Ring Buffer,但是由于其它原因导致的丢包
  • RX overruns:表示了 fifo 的 overruns,这是由于 Ri
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值