- 博客(430)
- 资源 (20)
- 收藏
- 关注
原创 learning:vppsb router插件编译
前面文章中介绍了一篇博客:Learning VPP: OSPF routing protocol,文章中介绍使用VPPsb的router插件,它实现了将控制报文推到Linux网络堆栈的逻辑,以及一个基于netlink的机制,它将Linux的路由表同步到VPP的FIB中。本文主要尝试vppsb router查询在最新vpp21.06版本编译。并配置简单的ping业务正常。基本逻辑可以查询vpp官方指导文档:https://wiki.fd.io/view/VPP_Sandbox/router。源码解读后续有
2021-05-16 22:00:36
2852
原创 DPDK -20.5遇到的一些问题总结
源码下载及编译 dpdk 最新代码下载,可以再码云平台创建clone一个dpdk的项目,从码云平台上下载代码速度比较块,能达到2Mbps,直接从github上下载不是一个数量级。git clone https://gitee.com/jinshaohui/dpdk.git编译可以直接参照dpdk上的文档,目前是使用meson & ninja来进行源码编译,旧的编译方式也适用。首先需要安装工具meson,环境是是centos 7.5版本,需要更新成阿里源才能安装成功。[root@loca
2020-07-24 10:19:08
3622
8
原创 DPDK网卡设备加载流程
bus总线网卡设备扫描函数在目录dpdk/lib/librte_eal/common/eal_common_bus.cbus scan提供的主接口,内部会调用所有bus->scan。接口的目的是扫描所有bus下注册的设备。bus设备注册dpdk/lib/librte_eal/include/rte_bus.h是由宏RTE_REGISTER_BUS,在程序启动时完成的注册,目前查询宏使用的地方如下。/** * Helper for Bus registration. * The cons
2020-07-12 15:31:23
3476
1
原创 DPDK 内存管理---malloc_heap和malloc_elem
博文是基于dpdk20.5代码阅读所写,如理解有错误或不当之处,烦请指正,不甚感激。也可以私信我一起探讨。两种数据结构体介绍Malloc 库内部使用了两种数据结构类型(可以参考dpdk官方文档3.4.4章节介绍):struct malloc_heap:用于在每个 CPU Socket 上跟踪和管理可用内存空间。struct malloc_elem:Malloc 库内部用于追踪分配和释放空间的基本要素。基本内存分布结构说明malloc_elem介绍elem是heap管理内存的基本单元,内
2020-07-11 16:05:26
2084
2
原创 QOS相关基础知识总结
QOS基本概念三种令牌桶模式的区别和应用场景由前文描述可以看出,三种令牌桶模式之间既有区别也有演进关系,具体见下表。基于上述三种令牌桶模式之间的区别,其功能和使用场景也有所不同,具体见下表。参数设置有讲究在令牌桶算法中,CIR的值越大,即令牌产生的速率越大,报文可以获取的令牌就越多,流向网络的流量也就越大。因此,CIR的值是控制流入网络中流量多少的关键。CBS也是一个重要参数。CBS的值越大,C桶中可以积累令牌的数目也越多,允许通过的报文尺寸就越大。由于设备进行的是逐包转发,CBS的值不应
2020-07-09 12:23:28
4544
原创 通用路由封装协议——GRE
1、GRE简介 通用路由封装协议GRE(Generic Routing Encapsulation)可以对某些网络层协议(如IPX、ATM、IPv6、AppleTalk等)的数据报文进行封装,使这些被封装的数据报文能够在另一个网络层协议(如IPv4)中传输。GRE提供了将一种协议的报文封装在另一种协议报文中的机制,是一种三层隧道封装技术,使报文可以通过GRE隧道透明的传输,解决异种网络的传输问题。 在大多数常规情况下,系统拥有一个有效载荷(或负载)包,需要将它封装并发送至某个目的地。首先将有效载荷封
2020-06-13 15:46:56
3748
原创 IPsec协议总结
1、IPsec 基本介绍1.1 ipsec基本数据1.2 ipsec 封装模式传输模式传输模式在AH、ESP处理前后IP头部保持不变,主要用于End-to-End的应用场景。隧道模式隧道模式则在AH、ESP处理之后再封装了一个外网IP头,主要用于Site-to-Site的应用场景2 隧道模式下基本的封装和姐封装流程2.1 封装流程在原IP报文中找到TCP报文部分,在其后添加相应的ESP trailer信息。ESP trailer 包含三部分:Padding,Pad leng
2020-06-13 10:06:11
4063
1
原创 BGP消息处理学习
1、BGP 介绍1.1 相关术语1.2 BGP协议特点当前使用的版本是BGP-4。BGP作为事实上的Internet外部路由协议标准,被广泛应用于ISP(Internet Service Provider)之间。BGP协议具有如下特点:BGP是一种外部网关协议(EGP),与OSPF、RIP等内部网关协议(IGP)不同,其着眼点不在于发现和计算路由,而在于在AS之间选择最佳路由和控制路由的传播。BGP使用TCP作为其传输层协议,提高了协议的可靠性。BGP进行域间的路由选择,对协议的稳定性要求非
2020-06-11 18:11:34
1774
原创 arp基础学习
Arp基本学习如果要在TCP/IP协议栈中选择一个"最不安全的协议",那么我会毫不犹豫把票投给ARP协议。我们经常听到的这些术语,包括"网络扫描"、“内网渗透”、“中间人拦截”、“局域网流控”、“流量欺骗”,基本都跟ARP脱不了干系。大量的安全工具,例如大名鼎鼎的Cain、功能完备的Ettercap、操作傻瓜式的P2P终结者,底层都要基于ARP实现。听上去这么"逆天"的协议,其实技术原理又简单的难以置信,例如ARP整个完整交互过程仅需要两个包,一问一答即可搞定!但是ARP协议也有它令初学者迷惑的地方,例
2020-06-10 09:42:35
1123
原创 路由基础学习--交换机及路由器基本转发
1、网络三要素及交换机工作原理1.1 HUB及Switch内部构造对比集线器采用广播的形式传输数据,即向所有端口传送数据。集线器是一种共享设备,本身不能识别目的地址,当同一网内的a主机向b主机发送数据时,数据包在以hub为架构的网络上以广播方式传输,由每一台终端通过验证数据包头的地址信息来确定是否接收,同一时刻网络上只能传输一组数据帧的通讯。此方式共享带宽。交换机上的所有端口均有独享的信道带宽,以保证每个端口上数据的快速有效传输。交换机为用户提供的是独占的、点对点的连接,数据包只被发送到目的端口,
2020-05-19 22:42:44
1251
原创 vpp源码阅读---node节点调度总结
调度类型总结调度方式总结个人理解:从代码上来看只有Input类型的node节点注册的时候state设置成中断方式,才会出现中断和轮训的切换,默认全是轮询方式。PRE_INPUT类型node只能按照轮询当时来调度。设置成state为中断也是一样的。中断方式和轮询方式之间切换。模式切换依据累计报文数量,在vlib_main_or_worker_loop启动中设置。PRE_INPUT和INPUT类型调度Pre_input类型只能在main线程上被调度,一般为Process类型提供输入。in
2020-05-17 10:44:19
6578
1
原创 DPDK-vpp 一次mbuf地址被踩的定位思路
上个月解决了一个mbuf地址异常导致程序coredump的问题,问题定位前后花了将近一个月的时间,期间也是一点定位思路都没有,写这篇文章希望有同样问题的提供一种解决思路。问题背景在业务转发流程中vpp 发包模块mtu 9000字节,多mbuf单链表串联场景下,其中一个mbuf的next地址是非法地址,从而导致程序coredump异常。异常调用栈分析 分析过程发现发包mubuf数组中tx_pkts[-1]的next是非法地址导致程序异常。通过vlib_buf的next_buffer反推下一个mbu
2020-05-13 10:39:34
2548
原创 VPP源码阅读----vppinfra 结构说明
vppinfra 相关结构学习相关视频地址可以在B站上搜索的,但是ppt暂时没有找到,自己的阅读截图说明了。vetvec结构是最基础的类型,图片的右下角的大字比较醒目,也是初学者很容易犯的错误:Allocation only increases,Vector origin pointer may changer,store indexes(not pointers)!vector 原始指针可能会改变,存储索引而不是指针。这种说法成立的前提是vector操作中不调用vec_del函数,否则也不能
2020-05-08 21:52:54
2018
原创 dpdk查寻是否支持此网卡
[jinsh@localhost dpdk-19.11]$ lspci -nn | grep Ethernet07:00.0 Ethernet controller [0200]: Intel Corporation I210 Gigabit Network Connection [8086:1533] (rev 03)08:00.0 Ethernet controller [0200]: I...
2020-05-05 22:09:49
4318
原创 Vpp源码解读--workhandoff处理
1、node节点handoff功能1.1、申请node节点对应vlib_frame_queue_main_t结构我们可以阅读以下函数ip4_sv_reass_init_function完成IP报文假重组功能中handoff使用u32 vlib_frame_queue_main_init (u32 node_index, u32 frame_queue_nelts)下面是对应结构体描述:...
2020-05-01 23:37:49
2882
原创 VPP源码阅读---IP报文重组和分片
1、dpdk ip报文重组相关数据接口及API1.1相关数据结构1.2 相关API/*NO.1 创建rte_ip_frag_tbl结构,用来暂存分片的表。其中max_cycles表示分片报文超时时间TTL *frag_cycle = (rte_get_tsc_hz()) + MS_PER_S –1) / MS_PER_S * 10; *是10ms的cycle的一个例子。 */str...
2020-04-25 17:14:31
4756
5
转载 Inferior 1 (process 663) exited with code 0177
网站查询到可以通过https://www.it1352.com/785461.html再gdb里面设置下面参数捕捉系统退出原因catch syscall exit exit_group调查过程:1、使用gdb调试,问题发生时,程序已退出,没有捕获到信号,无法抓到堆栈信息,串口只输出日志:[Inferior 1 (process 663) exited with code 0177]2...
2020-04-11 15:56:21
4288
1
转载 NUMA架构下的CPU拓扑结构
作者:weijitao来源:优快云原文:https://blog.youkuaiyun.com/weijitao/article/details/52884422目前多核已经越来越普遍的使用,Linux对NUMA架构的支持也越来越完善。对于内存管理、多处理的负载均衡调度等进行了大量的优化工作。NUMA相关的几个概念有Node、Socket、Core 以及 Thread。Socket是一个物理上的...
2020-03-15 20:21:18
3119
1
原创 DPDK源码解读-------ring结构体
RTE RING结构体内存挂接挂接在全局rte_ring_tailq尾队列链表上ring_list = RTE_TAILQ_CAST(rte_ring_tailq.head, rte_ring_list);下面是相关的结构体声明及定义/*尾队列表头TAILQ_HEAD 宏定义*/#define TAILQ_HEAD(name, type) \ struct name { \...
2020-03-14 13:26:33
1747
原创 VPP源码-----mempool池创建解读
dpdk_buffer_pool_init函数处理逻辑如下:目前阅读最新的vpp(20-1)代码,报文存储区域rte_mbuf已经不再通过DPDK结构来申请了,目前是在vpp自己管理的物理内存上直接申请而来,下面是dpdk_buffer_pool_init的处理逻辑:rte_mempool相关结构体参数注解rte_mempool 相关内存的分布mempoll管理节点的内存分布将当前...
2020-03-11 17:25:13
1984
1
转载 libevent源码–TAILQ队列,
TAILQ 队列结构图其中tqh_first 指向队列的第一个结点tqh_last 指向队列的最后一个结点的 tqe_next 字段tqe_next 指向该结点的下一个结点tqe_prev 指向该结点的上一个结点的 tqe_next 字段根据结构图,TAILQ 队列为双向循环链表源码// 定义队列的头结点结构体的宏#define TAILQ_HEAD(name, type) ...
2020-03-10 14:16:20
563
1
原创 VPP源码----mheap结构学习
1、系统malloc和mmap对比malloc使用brk分配的内存,需要等到高地址内存释放以后才能释放,申请大内存(大于128k)时候使用的是mmap系统调用;mmap系统调用是在堆和栈之间分配一块内存,这块内存可以单独释放,不会造成内存“空洞”,也不会影响到堆顶内存的缩减释放。mmap的缺点是按需调页:一页大小4k bytes,如果需要的内存很小,会造成内存浪费;频繁的mmap、munma...
2020-03-04 11:09:12
1661
原创 Linux虚拟网络设备:bridge(桥)、vrouter、tun/tap等总结
相关知识链接Linux虚拟网络设备之tun/tapLinux虚拟网络设备之vethLinux虚拟网络设备之bridge(桥)Linux 虚拟网络设备详解之 “vRouter”Linux网络 - 数据包的发送过程Linux网络 - 数据包的接收过程...
2020-02-14 13:16:30
2667
原创 ipv4、ipv6编址
ipv4地址IPv4地址分类及特征IP地址按作用范围可分成两类,一类是在大网使用的公共IP地址,另一类是只在内网使用的私有地址。IP按用途可分五大类:A类(政府)、B类(公司)、C类(公用)、D类(组播)和E类(实验),地址格式为网络地址+主机地址或网络地址+子网地址+主机地址形式。 它们之间的区别和特征如下表所示:此外还有几个特殊IP地址:1、0.0.0.0只能做源地址2、255....
2020-02-06 17:02:46
1121
原创 计算机组成原理--动态链接
链接可以分动、静,共享运行省内存动态链接的基本思想是把程序按照模块拆分成各个相对独立部分,在程序运行时才将它们链接在一起形成一个完整的程序,而不是像静态链接一样把所有程序模块都链接成一个单独的可执行文件。 假设现在有两个程序program1.o和program2.o,这两者共用同一个库lib.o,假设首先运行程序program1,系统首先加载program1.o,当系统发现program...
2019-12-29 17:19:19
770
原创 计算机组成原理--计算机指令
编译到汇编,代码从如何变成机器码看下面的C代码示例:#include <stdio.h>int main(){ int a = 1; int b = 2; a = a + b; return 0 ;}通过编译和汇编后生成机器码[root@localhost ~]# gcc -g -c test.c [root@localhost ~]# ...
2019-12-16 22:37:03
4495
原创 PHP 自学之路-----XML基本语法及DTD介绍
Xml的出现解决了如下的问题 1 程序间数据的传输的问题 2 XMl可以做配置文件 3 Xml可以充当小型的数据库HTML的缺点(相对Xml) 1 HTML标签是规定好的,用户不能进行自定义 2 HTML文件显示的样式和数据是绑定在一起的,数据没有复用 3 HTML标签是没有含义的简单语法:1、注释 <!--d adad-->2、CDA...
2019-12-16 22:27:07
2321
1
原创 零值比较--BOOL,int,float,指针变量与零值比
这是程序员面试的一道常见题,也是个C++基础问题。若只在大学里看过几本基础的编程入门书,看见这道题可能会觉得奇怪,不就是和0比较吗,直接拿出来比就是了,其实非也。下文引自google搜索结果,出处不详,高手可以无视,菜菜留下,记得做好笔记。首先给个提示:题目中要求的是零值比较,而非与0进行比较,在C++里“零值”的范围可就大了,可以是0, 0.0 , FALSE或者“空指针”。int型变量 n 与...
2019-12-16 22:26:44
3560
原创 计算机组成原理---基本组成
计算机基本组成计算机基本组成脑图计算设备组成冯诺曼体系架构计算机性能评价程序性能优化思路计算机基本组成脑图计算设备组成冯诺曼体系架构计算机性能评价程序性能优化思路...
2019-12-15 15:54:54
305
原创 LInux性能优化--CPU篇之平均负载
1、平均负载基本概念2、实例分析2.1、环境搭建测试环境基于centos7.5版本[root@domain ~]# uname -aLinux domain 3.10.0-957.5.1.el7.x86_64 #1 SMP Fri Feb 1 14:54:57 UTC 2019 x86_64 x86_64 x86_64 GNU/Linuxcpu架构信息[root@domain ...
2019-12-02 10:37:29
641
原创 DPDK指南--编写高效的代码
简介本章提供了使用DPDK开发高效代码的一些技巧。有关更多的信息,请参考Intel®64和IA-32架构优化参考手册,这是编写高效代码的宝贵参考资料。1、内存 本节描述在DPDK环境中开发应用程序时的一些关键内存注意事项。1.1内存拷贝:不要在数据平面中使用libc在DPDK中可以通过Linux*应用程序环境获得许多libc函数。这可以简化应用程序的移植和配置平面的开发。然而,这些功...
2019-11-18 16:43:20
3412
原创 Vpp源码---hash mhash结构学习
Hash 结构哈希表默认是支持动态扩容的,即当哈希表存放键值对大于3/4哈希桶的个数时,会2倍扩容。哈希冲突时,vector长度认为是没有限制的。hash结构内存分布及结构体描述哈希结构内存分布如下图所示:hash冲突时是如何解决的哈希冲突解决分2中情况(具体代码在lookup()函数中):1、key和vlaue都保存时hash结构体中log2_pair_size不等于 0是,存...
2019-11-18 09:45:20
3232
转载 内存屏障和编译屏障的理解
在vpp和dpdk的编码经常遇到有内存屏障和编译屏障的地方,使用内存屏障会远远降低执行性能,实测大概有10%左右的性能损耗,在多核竞争下更加劣化。下面文章有详细的介绍:个人认为内存屏障是解决的时候多CPU下问题,而编译屏障是为了防止cpu优化。https://www.cnblogs.com/straybirds/p/8856726.html...
2019-11-15 10:28:08
1326
原创 vpp--arc_feature学习以ipv4单播为例
1、feature arc及feature注册 vnet\ipIp4_forward.c feature arc及feature的main函数启动前的注册宏feature arc注册 VNET_FEATURE_ARC_INIT将注册feature arc,主要初始化feature类的名称、起始及结束node名字及arc_index的指针。会以链表形式挂接到全局变...
2019-11-12 09:38:38
2938
原创 VPP 创建自己的work线程
1 创建自己的核绑定线程1.1 线程启动流程以worker线程为例,介绍线程启动流程:1.1.1 线程注册:VLIB_REGISTER_THREAD线程注册宏注册到全局 vlib_thread_main_tvlib_thread_main->next链表上。typedef struct vlib_thread_registration_ { /* constructor g...
2019-11-07 13:05:29
3430
1
转载 搭建lxr搭建自己的代码检索网站
linxu下阅读内核源代码,通常都使用vim + ctags 或者 lxr进行,我个人比较倾向于lxr,因为lxr提供了良好的界面,函数和定义都使用超链接标记出来,可以很方便的跟踪到函数内部去查看详细或者查看数据结构的定义等。网上有现成的网站提供了这样的服务,如果你只是偶尔看看内核源代码的话,其实直接登录某些提供这样服务的网站就差不多了,比如LXR,这个网站提供的体验相当不错,我以前就是经常在这个...
2019-10-17 09:56:47
964
原创 DPDK&VPP关键技术文档总结。
1、DPDK 流量管理API使用指南–TM2、为不同的Intel平台交叉编译DPDK;链接二3、DPDK数据包捕获框架4、DPDK中的memcpy性能优化及思考
2019-09-21 10:07:19
9406
2
redis设计与实现 第二版 高清 带标签 PDF文档.zip
2019-07-22
linux VIM 配置文件
2014-12-02
live555项目Vs2010编译环境搭建及源码
2014-09-06
ubuntu apt-get 软件源局域网或公网设置
2014-06-25
易宝支付PHP代码
2013-09-07
XPath基础教程
2013-08-31
PJSIP 开源代码及文档
2013-01-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人