i4box’s Blog

What, Why, How ?

Sriov + Dpdk测试

简介

SRIOV是一种虚拟化硬件加速方案,支持SRIOV功能的网卡,可以从一个物理端口(PF),新虚拟出多个虚拟端口(VF),每个VF具有独享的PCI配置区域,与其他VF共享相同的物理资源或物理网口; 从逻辑上可以认为开启SR-IOV后的物理网卡内置了一个定制的Switch将所有的PF和VF口连接起来,通过VF和PF的mac地址以及vlanid来进行数据包分发。

Dpdk对接openstack

安装

编译安装DPDK + OVS

参考 [DPDK安装详解与问题记录](http://www.i4box.com/blog/2017/08/21/dpdk-plus-ovsan-zhuang-xiang-jie/)

Dpdk + Ovs安装详解与问题记录(下)

接上一篇,由于DPDK不支持BCM5720的网卡,导致到时ovs add dpdk网卡时失败,在新机器到位后,重新进行编程,测试。编程ovs+dpdk的基本步骤与之前一样,不再重复。先看下新机器的网卡:

Data Race学习

最近准备将gopush代码中rpc模块提出来复用一下,看到这样段代码,很是不解:

tmpClients := make(map[string]*WeightRpc, len(r.Clients))
for addr, client := range r.Clients {
    if client == nil {
        continue
    }
    tmpClients[addr] = client
    if client.Addr == retryAddr {
        client.Client = rpcTmp
    }
}
// atomic update clients
r.Clients = tmpClients

Golang Map 学习

一、定义

  1. 大概是这个样子的:

    map[KeyType]ValueType

  2. 传值or传引用

    golang map和string slice一样都为引用类型,传递时默认就是传指针的;

  3. 声明一个map

    var m map[string]int, m默认值为nil,如果直接使用会引起panic,必须先初始化;

TCP重传相关几个参数

看过TCP协议的,我们都知道TCP send一个数据包,如果对端没有给响应(ack), tcp会进行重传,但是重传指定次数后,若一直失败(如网络中断了),最终错误码是什么了?之前一直也没关心过,今天刚好做了测试,记录一下。

tcp_max_orphans引起的FIN,RST

先看一个tcpdump的抓包

19:08:01.196965 IP 172.16.91.101.10001 > 172.16.91.107.6388: Flags [S], seq 475071557, win 1460, options [mss 1460,nop,nop,sackOK,nop,wscale 10], length 0
19:08:01.197002 IP 172.16.91.107.6388 > 172.16.91.101.10001: Flags [S.], seq 2477638798, ack 475071558, win 1460, options [mss 1460,nop,nop,sackOK,nop,wscale 10], length 0
19:08:01.197216 IP 172.16.91.101.10001 > 172.16.91.107.6388: Flags [.], ack 1, win 2, length 0
19:08:03.032342 IP 172.16.91.101.10001 > 172.16.91.107.6388: Flags [F.], seq 1, ack 1, win 2, length 0
19:08:03.032505 IP 172.16.91.101.10001 > 172.16.91.107.6388: Flags [R.], seq 2, ack 1, win 2, length 0
19:08:03.032515 IP 172.16.91.107.6388 > 172.16.91.101.10001: Flags [F.], seq 1, ack 2, win 2, length 0
19:08:03.032845 IP 172.16.91.101.10001 > 172.16.91.107.6388: Flags [R], seq 475071559, win 0, length 0