
VPP
呆呆辉
苦逼底层攻城狮
展开
-
思科VPP源码分析(node调度框架)
vpp的功能逻辑被划分为一个个node,node之间通过下一跳传递处理完的数据包集合,从而组成整个业务图谱。本文将分析node调度框架源码。基本概念 vlib_node_type_t node分为四种类型 VLIB_NODE_TYPE_INTERNAL:对数据包真正处理的业务node。 VLIB_NODE_TYPE_INPUT:收包逻辑node,比如:dpdk,pcap等。 VLIB_N原创 2016-11-05 07:30:00 · 13150 阅读 · 0 评论 -
思科VPP源码分析(内存管理)
思科今年开源的vpp项目,在intel开源的dpdk之上,构建的数据包处理框架。dpdk组件已经成功榨干硬件IO性能,剩下的瓶颈落在业务处理部分,其中最关键的又在内存访问优化上。内存优化一句话概括:提高CPU L1,L2,L3 cache命中率。这里将分析vpp内存管理部分源码。vec变长数组(vec_bootstrap.h) len是数组元素个数,不是字节长度。每个数组元素都看作是等大小。原创 2016-10-20 15:30:33 · 13233 阅读 · 0 评论 -
思科VPP源码分析(feature机制分析)
基本概念早期的VPP本身的node框架比较固定,各个node之间逻辑连接已经固化。为此新版本增加了feature机制,每个feature是一个node,用户可以启用/停止某个或某些feature,也可以自己写插件,把自定义node(自己的业务逻辑)加入到指定位置。vnet_feature_arc_registration_t vpp将feature分成不同的组,每组feature称为一个arc。原创 2017-01-29 09:42:36 · 9094 阅读 · 1 评论 -
思科VPP源码分析(Bihash分析)
基本概念VPP里的Bihash全名为Bounded-index extensible hash。它的最大特点是,在查找时是无锁并且线程安全的。修改操作之间会有互斥,但是修改操作时仍然可以进行查找操作。vpp里的Bihash优化成了两种,bihash_kv_8_8和bihash_kv_24_8,区别在于hash key是8字节还是24字节。最大限度的利用SSE4.2指令集中的_mm_crc32_u6原创 2017-02-14 16:11:00 · 7055 阅读 · 4 评论 -
思科VPP源码分析(路由框架分析二)
基本理论原创 2017-01-10 07:47:29 · 8767 阅读 · 3 评论 -
思科VPP源码分析(dpo机制源码分析)
基本概念VPP的dpo机制跟路由紧密结合在一起。路由表查找(ip4_lookup)的最后结果是一个load_balance_t结构。该结构可以看做是一个hash表,里面包含了很多dpo,指向为下一步处理动作。每个dpo都是添加路由时的一个path的结果。 dpo标准类型有: DPO_DROP, DPO_IP_NULL, DPO_PUNT, DPO_LOAD_原创 2017-02-27 22:46:53 · 7341 阅读 · 1 评论 -
思科VPP源码分析(多线程支持分析)
基本概念核心函数原创 2016-11-12 11:51:20 · 6524 阅读 · 0 评论 -
思科VPP源码分析(trace机制分析)
基本概念核心函数原创 2016-11-17 15:01:10 · 4258 阅读 · 1 评论 -
思科VPP源码分析(CLI支持分析)
基本概念核心函数原创 2016-11-15 15:38:39 · 5062 阅读 · 0 评论 -
思科VPP源码分析(ethernet node分析)
基本概念核心函数施工中。。。原创 2016-11-10 09:38:04 · 5690 阅读 · 0 评论 -
思科VPP源码分析(dpdk node分析)
VPP使用者几乎都会使用dpdk node作为收包驱动,本文将分析其源码。- 基本概念vlib_buffer_t dpdk收到的数据包用rte_mbuf结构描述。vpp为了兼容其它收包node(netmap,pcap等)改为使用vlib_buffer_t来描述数据包。 vlib_buffer_t紧跟在rte_mbuf后面,headroom空间中。vlib_get_next_framevlib原创 2016-11-07 15:29:03 · 12293 阅读 · 0 评论 -
《What Every Programmer Should Know About Memory》学习笔记(第三章)
概述对网络包处理中,提升性能的关键在于CPU Cache的利用情况。因此,从体系结构角度深刻理解Cache的原理,对写出高性能数据包处理程序是必要的理论基础。这篇文档写于2007年,有点久远,但是其描述的原理仍然适用现在的主流CPU。我将从程序员的角度总结该文章的要点。CPU CachesL1 cache分为指令cache和数据cache,缓存不同内容。L2和L3不再区分,指令和数据共享。数据原创 2017-05-19 15:56:57 · 4227 阅读 · 1 评论