ring buffer
ring buffer 位于 NIC 和 IP 层之间,是一个典型的 FIFO(先进先出) 环形队列。
ring buffer 没有包含数据本身,而是包含了指向 skb(socket kernel buffers) 的描述符。
# 查看网卡是否正常ethtool -S eth0 | grep -e "err" -e "drop" -e "over" -e "miss" -e "timeout" -e "reset" -e "restar" -e "collis" -e "over" | grep -v "\: 0"# 查看网卡进出队列大小ethtool -g eth0
txqueuelen
ifconfig 看到的 txqueuelen 跟 ring buffer 是两个东西。IP 协议下面就是 txqueuelen,txqueuelen 下面才到 ring buffer。
ifconfig
eth0: flags=4163 mtu 1500
inet 172.26.196.110 netmask 255.255.240.0 broadcast 172.26.207.255
inet6 fe80::216:3eff:fe0b:5d2a prefixlen 64 scopeid 0x20
ether 00:16:3e:0b:5d:2a txqueuelen 1000 (Ethernet)
RX packets 1481933 bytes 1099810092 (1.0 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 691872 bytes 66576326 (63.4 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
常用的 tc qdisc、netfilter 就是在 txqueuelen 这一环节。
发送队列就是指的这个 txqueuelen,和网卡关联着。
每个 Core 接收队列由内核参数 net.core.netdev_max_backlog
来设置。
修改
ifconfig eth0 txqueuelen 2000
监控
ip -s link
2: eth0: mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 2000
link/ether 00:16:3e:0b:5d:2a brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
1099841145 1482250 0 0 0 0
TX: bytes packets errors dropped carrier collsns
66605856 692114 0 0 0 0
ifconfig 监控指标
ifconfig
eth0: flags=4163 mtu 1500
inet 172.26.196.110 netmask 255.255.240.0 broadcast 172.26.207.255
inet6 fe80::216:3eff:fe0b:5d2a prefixlen 64 scopeid 0x20
ether 00:16:3e:0b:5d:2a txqueuelen 2000 (Ethernet)
RX packets 1482110 bytes 1099828610 (1.0 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 692013 bytes 66594114 (63.5 MiB)