摘要:
dpdk支持多进程运行,不过要指定参数打开,如果没有设定,但开启第二个dpdk程序是会报错,告诉你相关系统资源被占用。 EAL: Cannot create lock on '/var/run/dpdk/rte/config'. Is another primary process running? 阅读全文
摘要:
开发中遇到一个问题,比如有一个类库A,被类库B引用,类库B和类库A都被程序C引用。类库A中有一个全局变量G,要求同一个进程中使用的是同一个全局变量G。 虽然看起来很简单,但是实际探究下来还有不少坑。 如果不是类库 如果A B都不是类库,而是直接引入源码编译,理论上比较方便解决。 示例一 pre.h 阅读全文
摘要:
因为dpdk是把网卡操作全部拿到用户层,与原生系统驱动不再兼容,所以被dpdk接管的网卡从系统层面(ip a/ifconfig)无法看到,同样数据也不再经过系统内核。 如果想把数据再发送到系统,就要用到virtio user。这种把数据从dpdk再发送到内核的步骤,就叫做exception path 阅读全文
摘要:
比如有两个开发了比较多功能的分支,或者在比较久的一次提交上做了一个hotfix,这个时候如果合并,通过ui查看会有一条额外的很长的线连接过来,不美观,看起来也不方便。 可以用rebase进行变基,强行把两个分支的内容合并到一起。 rebase与merge的区别 merge就是把两个分支,当前的内容, 阅读全文
摘要:
zsh虽然和bash基本兼容,但是还有些区别,在使用时偶然出现,让人抓不到头脑。 中括号 [] 中括号在zsh中是关键字,而在bash中不是。所以如果使用的命令中有中括号,需要转义 # 报错 tcprewrite --pnat=[2001:da8:8006::]:[2001:da8:8006:1:: 阅读全文
摘要:
简介 1883定义了ipv6的协议,不过作废了,在2460又重新做了定义,区别不大,只是有个别字段做了扩充。后面8200又做了新的定义,废弃了2460。 2373和2374对ipv6的格式做了规定。 ipv6是下一代ip地址协议,比ipv4的地址更长,可以表示更多地址段。不过由于ipv6地址太长,不 阅读全文
摘要:
tcp/udp网络通信与socket实际上是两个概念,不过因为我们平常使用tcp/udp,不可避免的使用socket,所以认为两者是同一个事物。 我们现在所说的或者最常用到的都是BSD版本的socket。socket是对tcp/udp等网络协议的封装,提供上层接口,供我们使用,可以编写程序在网络间传 阅读全文
摘要:
# 服务端源码 ``` #include #include #include #include #include #include #define BUFF_SIZE 1024 int main() { int sock = 0; int recvlen = 0; // 接收数据缓冲区 char b 阅读全文
摘要:
# 步骤概览 - 编译安装dpdk - 绑定网卡驱动vfio,必须有两个网口 - 配置LD_LIBRARY_PATH和PKG_CONFIG_PATH - 编译运行 # 源码 ## basicfwd.c 这个程序是从一个网口获取数据,然后发送到另一个网口,所以收发消息的代码都有了,可以根据这个程序编写 阅读全文
摘要:
# 先安装 dpdk编译完成后,先运行`ninja install`把相关内容安装到指定目录。 ``` ls /home/dpdkinstall bin include lib64 share ``` - bin——一些脚本(用于绑定驱动等),编译的测试程序,编译的常用工具 - include——需 阅读全文