how tcpdump work with cbpf

tcpdump通过libpcap库以及内核的af_packet对数据包问题进行抓取。
关于这两部分的如何协作抓包,之前blog里已经写过。
这里主要记录分析,在ebpf之前的内核(以v3.0)如何处理tcpdump里的filter的。

filter编译后,如何加载到内核里的:

在filter被翻译为一系列的指令后,这个指令buff被libpcap,
通过sockopt里的SO_ATTACH_FILTE选项,
最终挂载到AF_PACKET socket下的sk_filter上。

Read More

内核OVS的学习总结


OVS里最重要的几个元素:vport,flow,datapath。
其中datapth是vport和flow的桥梁。

kernel ovs 核心结构体及其关联

VPORT

内核包含多个datapath(brige),上面包含一个或者多个vport。
其中一个VPORT表示一个端口,一个vport只能归于一个特定的datapath。
每个vport有自己的type, 对应不同的vport ops.
每个内核网口被注册为vport的时候。

Read More

net rx drop

问题来源

接OP问题报告,监控到部分机器的net rx drop统计值异常,触发报警,
需排查具体原因,并确认是否影响业务。

问题分析

复现问题

跟OP同学确认,通过采集/proc/net/dev下的rx drop。
登录到出问题的机器上, 确认内核该统计值确实异常。

  • 异常报文个数不多,大约1s一个左右。
  • 不是所有机器都有异常,有部分机器drop统计为0.

相关内核代码

当一个数据报文经过对端设备(交换机或者网卡)传输到本机物理网卡时候,需要经过
网卡-- 网卡驱动-- 网络协议栈
这几个模块的处理。我们看到的drop统计值在增加,是在网络协议栈的入口处理部分产生异常导致。

Read More

WHAT is TFO

什么是tcp fast open(TFO)

背景

网络上有大量的短连接,传输的数据很少。google统计显示,其访问请求里有30%左右的流量是短连接。

原理

针对tcp 短连接的一个优化。在syn请求里携带请求数据,让server端尽早处理,进而降低一个RTT的延迟。
client端发送时候在syn报文里,增加一个tcp option选项(TFO),server端通过它校验client端的合法性。

Read More

How to use kpatch

搭建kpatch builder

以centos7.2为例。

默认centos7.2的安装的内核版本是3.10.0-327.el7.x86_64,这个内核版本当初是通过gcc 4.8.3编译的。
而centos7.2自带gcc rpm包的版本则是 4.8.5

kpatch build命令执行的时候,首先检查gcc的版本是否一致,
因为两者的版本不一致,所以kpatch build命令会失败。
当然我们可以使用--skip-gcc-check,跳过这个检查,我也测试发现在一些简单补丁下可以打包通过。
但是系统不推荐这样做的,会有一定的风险。

Read More

udp rss hash causes low iperf perforamnce

vxlan下iperf性能问题

VXlan网络下,在两个容器(分别在两个host上)上,使用iperf进行tcp网络性能测试,带宽只能达到3.5Gb/s左右。
而两个容器所在的host机器之间是万兆网络环境,host上的网卡是ixgbe 10G网卡

解决方法

  1. 发送端使用多线程参数 -P

    1
    iperf  -c 192.168.51.2   -P8 -t 1000
  2. 接收端IXGBE网卡RSShash使用hash(SrcIP, DstIP, SrcPort, DstPort)

    1
    ethtool -N em2 rx-flow-hash udp4 sdfn

    Read More