自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

NTF的博客

记录留下点东西

  • 博客(17)
  • 收藏
  • 关注

原创 openflow conjuction macth及ovs 的内部实现

conjunction match连接匹配域:需求背景:1条openflow流表经常只匹配一个字段(如ip源地址)的一个值。然而,有种场景也经常出现,1条openflow流表匹配一个字段(如ip源地址)的一个集合(比如1.1.1.1、2.2.2.2)。当然也不限于一个字段。需求:ip_src ∈ {a,b,c,d} and ip_dst ∈ {e,f,g,h}...

2019-03-13 15:22:18 1519

原创 ovs 最长前缀树匹配实现

1. 前缀树说明1.1 概述最长前缀树匹配是ovs流表查找的基础,是ovs中很重要的一个模块。和路由条目CIDR类似,它的定义是,有条目A1=a1,A2=a1a2,A3= a1a2a3,那么当用A4(A4= a1a2a3a4)去匹配A1、A2、A3时,A3将会被匹配到,因为它从左到右匹配到了最多值(a1a2a3).比如存在路由条目:192.168.1.0/24和192.168.0.0/...

2019-02-15 09:47:43 1234 1

原创 pktgen安装使用

参考资料:https://wiki.linuxfoundation.org/networking/pktgen1.pktgen安装:https://wiki.linuxfoundation.org/networking/pktgenmodprobe pktgenls /proc/net/pktgen/cat /proc/interrupts | grep eth/et...

2019-02-15 09:36:15 1783 1

原创 linux 内核PCI驱动总结记录

1.介绍Peripheral ComponentInterconnect (PCI,外围设备互联)。总线由电气接口、编程接口组成。主要讨论编程接口。最常用的总线,内核支持最好的总线。ISA裸金属总线,电子爱好者偏爱。2.PCI的特点是一种完整的规范,定义计算机计算机不同部分之间的通信。获取、访问PCI设备。对比ISA总线三个目标:比ISA有更好的性能。

2018-04-16 16:59:45 7039 1

原创 OVS架构解析--dpdk datapath数据通路

1.架构说明1.1. 整体架构OVS(openvswitch)是开源的虚拟交换机。也是当前市场上云环境中部署份额最大的交换机。支持 openflow协议,ovsdb协议管理。一个OVS实例包括,ovsdb-server、ovs-vswitchd、datapath快转模块(linux内核中实现,可选的。dpdk模式是在用户态实现快转,并不需要内核态的datapath模块)。ovsdb-serv...

2018-04-06 19:02:11 10821 2

原创 总结openstack nuetron网络架构图

个人理解总结的openstack nuetron网络架构图。图中分层次,从上向下。其中OVS是最常用的vSwitch。但也可以是其他的vSwitch,比如linux bridge,更甚是支持的物理交换机。具体分析,后续有时间讨论吧。...

2018-03-05 23:24:45 3597

原创 vxlan、组播、IGMP 协议RFC总结

一、前言其实主要总结vxlan的,但说明vxlan,又离不开组播、IGMP协议,所以放在一起总结了。主要是一些要点的总结,并没有太详细的分析,这样便于以后的查阅和复习,也可作为快速了解vxlan的途径。本文主要根据RFC、tcp/ip详解卷一来总结。先来两个网络图,为了便于查看协议。二、vxlan解决2、3层之上的多租户数据中心网络环境。可以部署在2、3

2017-09-11 20:08:22 5385 2

原创 GRE 协议rfc总结

一、简介GRE(Generic Routing Encapsulation):通用路由封装。GRE是一个通用的路由封装协议,它描述在任意的网络层之上封装另一个网络协议。RFC:2784.二、报文格式封装格式:payload是网络层,delivery是网络层1)校验和存在位(1位:0)如果为1,则checksum和rese

2017-05-26 20:54:40 7238

原创 RIP路由信息协议总结

一、RIP路由信息协议1、简介RIP(Routing information protocol):路由信息协议。RFC:1058.目的:一种基于距离矢量的路由协议,以跳数为度量值。用于同步不同网络路由器中的路由表项。层次:采用UPD端口号520的应用层协议。适用环境:比较小型的网络环境。2、报文格式大小:4+20*n(n1)命令

2017-04-30 20:00:24 4882 1

原创 使用PAUSE提高程序的循环性能

一、简介PAUSE指令能提高自旋等待循环的性能。从奔腾4引入,向后兼容所有的IA-32处理器。早期的IA-32处理器,使用NOP指令实现PAUSE指令。奔腾4和Xeon处理器用一定的延迟实现PAUSE指令。这个延迟在某些处理器上是0。PAUSE不会改变处理器状态。其实本质实现上是一个延迟的no-op指令。PAUSE指令在非64位模式和64位模式上是相同的。二、特性当

2017-04-20 20:55:45 4418

原创 图解dpdk mempool 对象

一、文件组织rte_mempool.h:mempool类的属性、方法rte_mempool.c:mempool对象的创建实现、mempool对象与ring对象(默认)的联系。rte_mempool_ops.c:mempool对象的操作方法定义rte_mempool_ring.c:mempoolring类型的操作方法rte_mempool_stack.c:mempool st

2017-04-19 23:29:01 8045 3

原创 深入理解dpdk rte_ring无锁队列

一、简介同样用面向对象的思想来理解无锁队列ring。dpdk的无锁队列ring是借鉴了linux内核kfifo无锁队列。ring的实质是FIFO的环形队列。ring的特点:无锁出入队(除了cas(compare and swap)操作)多消费/生产者同时出入队使用方法:1.创建一个ring对象。接口:structrte_ring *rte_ring_

2017-04-06 00:05:42 29649 5

原创 图解有符号和无符号数隐藏的含义

有符号数、无符号数、二进制之间的关系计算机本质上是用二进制表示数据的,所有的数据,不管是什么样的类型,总归是要用二进制表示的。无符号数就是二进制的值,既是二进制中的每一位乘以其权重,相加起来的。111就是1+2*1+4*1=7。有符号数是为了表示负数而设计的,即首位为符号位。四位数5(0101)对应的负数为1011(按无符号数读就是11,按有符号数读就是-5)。计算的方法是01

2017-04-04 16:45:05 3117 1

原创 dpdk内存管理之内存分配器(堆分配)

内存分配组织结构一个socket上所有的可用内存为一个堆。每个堆由大小不同的块组成,每个块是一个连续的存储器片。申请内存时可以指定堆(socket),或者任意堆,当指定为任意堆时,会优先使用本地堆(本地socket)。结合前面说的dpdk内存初始化,每个堆的原始块是相同socket_id的所有memseg。每个memseg段就是一个地址连续的块。内存申请(rte_malloc)就是

2017-03-19 21:07:50 3438 1

原创 dpdk内存管理之内存初始化(内存收集)

初始化之前的内存layoutdpdk得到的原始内存是通过mmap大页获得的,而这样的原始内存分布可以用下图表示(NUMA架构)。关于页表相关的知识,可以参加我的另外一篇文章(虚拟存储器)。其中页a、a+1类似的表示连续的物理页。dpdk通过事先申请的大页,mmap对应的大页dir获得内存。可以看出,程序mmap每个页时,虽然物理页可能连续,但返回的虚拟地址却不一定是

2017-03-12 16:55:37 4048

原创 queue.h之tailq.h尾队列理解使用

一、连接、组织方式如图:每个entry有两个关键元素:tqe_next(简称为next)、tqe_prev(简称为prev)。next指向下个entry的地址,prev指向上个entry的next的地址。next容易理解。对于prev,说白了prev的值就是上个 entry的next的地址。这样说可能还有点模糊,再换种说法prev的值为上个entry的地址加上next的

2017-02-22 22:46:58 5424 1

原创 虚拟存储器和高速缓存总结

概述为了更加有效的管理存储器并且少出错,现代操作系统提供了一种对主存的抽象,叫做虚拟存储器。虚拟存储器是被应用程序所意识和使用的。也就是说,它是被抽象出来的,虚拟出来的主存。所以,从应用程序的层面,程序看到的和使用的虚拟地址都是属于虚拟存储器的。虚拟存储器充当一种中间转换的角色,把虚拟地址对应的主存转换到真实的主存上面。如图:下图便是一个虚拟存储器的表示。

2017-02-05 16:06:28 5674 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除