美文网首页
网络丢包排查三

网络丢包排查三

作者: 明翼 | 来源:发表于2021-02-19 21:28 被阅读0次

一 负载均衡

发现我们设置负载均衡后,网卡队列的数字相差还是有些大:


队列数字不均衡

所以重新设置下flow-hash

#ethtool -N eno2 rx-flow-hash tcp4 sdfn
#ethtool -N eno2 rx-flow-hash udp4 sdfn

[root@localhost ~]# ethtool -n eno2 rx-flow-hash udp4
UDP over IPV4 flows use these fields for computing Hash flow key:
IP SA
IP DA
L4 bytes 0 & 1 [TCP/UDP src port]
L4 bytes 2 & 3 [TCP/UDP dst port]

[root@localhost ~]# ethtool -n eno2 rx-flow-hash tcp4
TCP over IPV4 flows use these fields for computing Hash flow key:
IP SA
IP DA
L4 bytes 0 & 1 [TCP/UDP src port]
L4 bytes 2 & 3 [TCP/UDP dst port]

二 网卡优化设置

i40e驱动的网卡优化,驱动更新到最新

rmmod i40e && modprobe i40e
ifconfig eth1 down
/usr/local/sbin/ethtool -L eth1 combined 16
/usr/local/sbin/ethtool -K eth1 rxhash on
/usr/local/sbin/ethtool -K eth1 ntuple on
ifconfig eth1 up
/usr/local/sbin/ethtool -X eth1 hkey 6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A equal 16
/usr/local/sbin/ethtool -A eth1 rx off
/usr/local/sbin/ethtool -C eth1 adaptive-rx off adaptive-tx off rx-usecs 125
/usr/local/sbin/ethtool -G eth1 rx 1024

多核心的软中断查看:

watch -d "/bin/cat /proc/softirqs | /usr/bin/awk 'NR == 1{printf \"%-15s %-15s %-15s %-15s %-15s\n\",\" \",\$1,\$2,\$3,\$4}; NR > 1{printf \"%-15s %-15s %-15s %-15s %-15s\n\",\$1,\$2,\$3,\$4,\$5}'"
sar -u ALL -P ALL 1

RPS调优脚本:

#!/bin/bash  
# Enable RPS (Receive Packet Steering)  
      
rfc=4096  
cc=$(grep -c processor /proc/cpuinfo)  
rsfe=$(echo $cc*$rfc | bc)  
sysctl -w net.core.rps_sock_flow_entries=$rsfe  
for fileRps in $(ls /sys/class/net/eth*/queues/rx-*/rps_cpus)  
do
    echo fff > $fileRps  
done
      
for fileRfc in $(ls /sys/class/net/eth*/queues/rx-*/rps_flow_cnt)  
do
    echo $rfc > $fileRfc  
done
      
tail /sys/class/net/eth*/queues/rx-*/{rps_cpus,rps_flow_cnt}

·

#netmap参数
cat /sys/module/netmap/parameters/buf_curr_num

简单代码参考:

#include <stdio.h>
#include <poll.h>
 
#define NETMAP_WITH_LIBS
#include <net/netmap_user.h>
 
unsigned long pps = 0;
 
static void receive_packets(struct netmap_ring *ring)
{
    int i;
    char *buf;
 
    while (!nm_ring_empty(ring)) {
        i   = ring->cur;
        buf = NETMAP_BUF(ring, ring->slot[i].buf_idx);
        pps++;

        ring->head = ring->cur = nm_ring_next(ring, i); 
    }
}
 
int main(void)
{
    struct nm_desc *d;
    struct pollfd fds;
    struct netmap_ring *ring;
    int i; 
 
    d = nm_open("netmap:eth1", NULL, 0, 0); 
  
    fds.fd     = d->fd;
    fds.events = POLLIN;
 
    while (1) {
        if (poll(&fds, 1, 1) < 0) {
            perror("poll()");
            exit(1);
        }
 
        for (i = d->first_rx_ring; i <= d->last_rx_ring; i++) {
            ring = NETMAP_RXRING(d->nifp, i);
            receive_packets(ring);
        }
    }

    return 0;
}

相关文章

  • 网络丢包排查三

    一 负载均衡 发现我们设置负载均衡后,网卡队列的数字相差还是有些大: 所以重新设置下flow-hash 二 网卡优...

  • 网络丢包&网络延迟排查

    网络问题往往都是比较复杂的,并且通常定位问题后也无能为力,只能推动相关运营商解决; 常见网络丢包的原因: 骨干网拥...

  • ping命令

    ping命令是一个很好的网络故障排查工具,可以用来测试当前网络是否能连通目标服务器、数据包往返时间以及丢包率情况。...

  • Wireshark抓取websocket包

    背景 项目中遇到一个问题,在排查网络数据包是否丢包时,由于对Wireshark不熟练,只根据TCP端口号过滤,而项...

  • Linux网卡丢包排查

    首先来看看网卡收发包的处理流程: 收包: 网线上的packet首先被网卡获取,网卡会检查packet的CRC校验,...

  • 网卡丢包排查二

    上次没查到根本原因,这次继续排查,发现和我们发的包有很大的关系,根据上次rx_drop的含义,丢的数据可能是以下几...

  • 网卡抓包丢包排查一

    一 背景 有时候,需要关注下网络的是否丢包,特别是高带宽情况下测试系统的性能的时候, 这次我们在测试很小的流量的情...

  • 网络不通排查之路

    背景描述 和业务方对接,发现网络不通 1. 问题发现 ping丢包通过ping域名,网络基本丢包 2. 问题定...

  • 音视频开发与计算机基础面试实战

    题目1.丢包恢复算法怎么实现的?丢包是由于网络不好导致的,还是确实丢包了,丢包率怎么反馈给发送端的?题目2.回音消...

  • WebRTC-nack机制详解

    # 1.NACK的含义 丢包重传(NACK)是抵抗网络错误的重要手段。NACK在接收端检测到数据丢包后,发送NAC...

网友评论

      本文标题:网络丢包排查三

      本文链接:https://www.haomeiwen.com/subject/sbjixltx.html