1.23k likes | 1.4k Views
IXA SDK 3.x 及其程序开发. 胡越明 上海交通大学计算机系. Agenda. IXA 工作平台和可移植框架 网络处理器软硬件系统结构 微块的开发设计环境 内核构件的开发环境 基本路由器设计实例 主要微块分析 内核构件分析. IXA 工作平台和移植框架. IXA SDK 3.5 的工作平台 Developer Workbench IXA SDK 3.5 的移植框架 Portability Framework. IXA SDK 3.5 的工作平台. 特点 用于开发基于 Intel IXP2xxx 网络处理器的系统
E N D
IXA SDK 3.x及其程序开发 胡越明 上海交通大学计算机系
Agenda • IXA工作平台和可移植框架 • 网络处理器软硬件系统结构 • 微块的开发设计环境 • 内核构件的开发环境 • 基本路由器设计实例 • 主要微块分析 • 内核构件分析
IXA工作平台和移植框架 • IXA SDK 3.5的工作平台 • Developer Workbench • IXA SDK 3.5的移植框架 • Portability Framework
IXA SDK 3.5的工作平台 • 特点 • 用于开发基于Intel IXP2xxx网络处理器的系统 • 支持微引擎C第二版 • 支持第二版汇编语言 • 模拟器具有更好的数据收集和图形功能 • 提供网络模拟器(NetSim)动态连接库 • 支持Wind River VxWorks 5.4(大数端)和MontaVista Linux专业版3.0(大数端) • 不包含XScale内核软件的开发工具
IXA SDK 3.5的工作平台 • 函数库构成 • 微代码下载器 • 用于下载微代码图像(image)到相应的微引擎中 • 硬件抽象层库函数(HAL)的基础上 • C:\IXA_SDK_3.5\me_tools\XSC_CoreLibs\uclo • 硬件抽象层(HAL)函数库 • 用于在XScale内核硬件与事务模拟器之间的兼容 • 提供对CSR以及复杂的SRAM访问函数 • C:\IXA_SDK_3.5\me_tools\XSC_CoreLibs\HalMev2 • HAL微引擎C函数库 • 操作系统抽象层(OSSL)服务库 • 定义了一个对各种操作系统兼容的界面
IXA SDK 3.5的移植框架 • 特点 • 用于开发模块化的能够移植的代码 • 集成第三方软件厂商的构件产品 • 不同的工程之间可以共享程序代码构件 • 提供了一套构件和应用程序设计实例
IXA SDK 3.5的移植框架 • 微块(microblock) • 微引擎应用程序的独立功能模块 • 运用在各个微引擎的线程中 • 如IPv4转发、以太网链路层过滤、5元组分类等 • 可以相互连接构成流水线 • 内核构件(core component) • XScale内核软件模块 • 大部分与微块对应 • POS/MAC/ATM和交换结构的分组接收和发送 • 队列管理 • 发送调度 • 业务流速率整形和虚电路管制 • 处理微块来不及处理的较为复杂的工作 • 管理微块的下载和初始化 • 为上层软件提供API
IXA SDK 3.5的移植框架 • 构成 • 微块基础设施库(Infrastructure Library) • 优化的数据平面库 • 用于硬件抽象、协议处理、加密功能和例行程序 • 资源管理器 • 提供内核软件的基础功能 • 管理与微引擎共享的存储空间 • 内核构件基础设施(CCI)库 • 提供内核构件的基础功能 • 仅用于VxWorks操作系统 • 控制平面平台开发包(CP_PDK) • 基于网络处理器论坛(NPF)标准API的库 • 用于上层与控制平面协议栈的通信 • 仅用于VxWorks操作系统 • 应用程序样例
应用程序样例 • 支持多种链路层 • 四重千兆以太网 • 10重千兆以太网 • 万兆以太网 • 四重OC-12 ATM • OC-48 POS • OC-192 POS • CSIX交换结构 • IPv4 L3转发 • 符合RFC1812 • IPv6 L3转发 • 区分服务 • MPLS交换
内核构件的例子 • 分组接收和发送 • POS、MAC、ATM和交换结构接口 • 分组处理 • 标记、路由、整形 • 队列管理 • 发送调度 • 与TCP/IP协议栈的接口
优化的数据平面库 • 微块的基础设施库 • 底层的宏和微引擎C函数 • 一些硬件操作的函数 • CAM函数 • 本地存储器函数 • 临界区函数 • 协议头扫描函数 • 用于IPv4头和IPv6头等的操作 • 例程 • 散列表 • CRC
资源管理器库 • XScale内核的底层软件库 • 硬件初始化 • 微引擎的管理 • 包括微引擎程序的下载、填补符号、微引擎的启动和终止 • 硬件配置 • CSR的设置 • 存储器资源管理 • 与微块共享的SRAM、DRAM区域和便笺 • 用于存储控制块、路由表、转发表和分组(DRAM中) • 采用位于SRAM中的缓存自由链表 • 微块与相应的内核构件之间的通信
CCI与CP_PDK • 内核构件基础设施(CCI)库 • 内核构件的开发和运行平台 • 提供内核构件之间消息通信和分组传递的API和基础设施 • 控制平面平台开发包(CP_PDK) • 为内核的控制平面软件提供标准化的接口 • 基于网络处理器论坛(NPF) API • 建立在内核构件基础上 • 同步调用 • 异步调用(消息辅助支持库) • 使得转发平面以及硬件对控制平面透明
操作系统服务层(OSSL) • 内核软件的基础库 • 线程管理 • 线程创建、线程删除、获取线程号、终止线程 • 同步愿语 • 创建信号量、删除信号量、获取信号量、释放信号量 • 互斥 • 创建互斥变量、删除互斥变量、锁定互斥变量、解锁互斥变量 • 定时器 • 睡眠、获取时间 • 存储器管理 • 动态存储器分配、存储器数据复制、存储器设置 • 消息日志
代码文件目录(\src子目录下 ) • Applications • 包含应用程序的微引擎代码源程序文件。 • Building_blocks • 包含微块及其对应的内核构件 • Cp_pdk • 包含控制平面平台开发包,提供通过标准接口连接内核构件的工具。 • EXAMPLES • 包含一系列应用程序样例,主要用于展示程序设计思想和新的硬件特征。 • Framework • 支持内核构件(CC)的建立、删除等操作的库函数和资源管理器RM的源代码。 • Include • 包含常用的头文件。包括微引擎C的和内核的头文件。 • Library • 包含常用于积木块和应用程序的实用例程或宏,如散列表的访问、CRC计算、字节顺序转换等。这些就是优化的数据平面库。 • 包含用于调度环中缓存和元数据管理的微块库。其中的xscale子目录包含CCI库的源代码,包括路由表管理库。 • Workspace • 包含Wind River Tornado工作空间文件及其工作路径,用于编译整个系统的文件。 • 一个包含每个模块的基础工程、每个模块的工程文件以及一些支持make的文件
代码文件目录(\src\applications子目录下 ) • Dispatch_loop • 包含调度环程序的源文件。 • List • Build的输出,主要是在汇编和编译中生成的.list文件。 • Log • 主要是分组在接收和发送之后的日志。 • 用于验证程序的正确性。 • Scripts • 包含脚本.ind文件 • 用于应用系统模拟模型的建立、配置、路由表的建立等。 • Streams • 工程的分组流,作为模拟模型的分组输入
Agenda • IXA工作平台和可移植框架 • 网络处理器软硬件系统结构 • 微块的开发设计环境 • 内核构件的开发环境 • 基本路由器设计实例 • 主要微块分析 • 内核构件分析
网络处理器软硬件系统结构 网络处理器论坛(NPF) • 数据平面 • 以高速处理分组的转发为主 • 快速通道(转发平面)和慢速通道(Intel) • 由一系列的插件(plug-in)构成 • 控制平面 • 控制和配置转发平面 • 负责建立、配置和更新数据平面的数据集 • 路由表、转发表、端口配置表、QoS配置表 • 提供转发平面的绑定和能力发现、配置管理、名字空间管理和VIDD功能 • 分为应用层、服务层和功能层 • 管理平面 • 负责系统的配置、收集和报告统计数据 • 根据用户的输入启动或停止应用程序
控制平面(NPF的模型) • 应用层 • 路由协议 • 边界网关协议 • 路由信息库的管理 • 统一的RIB • 虚拟的RIB • 服务层 • 识别下层系统的能力 • 功能层 • 实现与硬件单元相关(element aware)的抽象
控制平面提供的用户操作界面 • 创建前缀表 • 创建下一跳表 • 创建地址解析表 • 删除前缀表 • 删除下一跳表 • 删除地址解析表 • 绑定前缀与下一跳表 • 加入前缀表项 • 加入下一跳表项 • 加入地址解析表项
硬件结构 • 刀片 • 包含网络处理器的板卡和若干网络接口 • 包含与交换结构之间的接口(NPF的CSIX接口)
微引擎软件 • 基本概念 • 队列 • 缓存的有序列表 • 用队列描述符描述 • 缓存在DRAM中(2KB)
基本概念 • 环 • 数据字的有序列表 • 存储在连续的地址中 • 用一个头指针和一个尾指针来描述 • 存储空间是有边界的 • 在便笺存储器或SRAM中 • 便笺环(Scratch ring) • 元数据(meta data) • 分组缓存的描述符 • SRAM中 (8个长字) • 用一个32位的缓存句柄唯一地标识
基本概念 • 调度环(dispatch loop) • 微引擎中的循环程序 • 实现微引擎软件的逻辑功能到微引擎硬件结构的映射 • 组织微块,构成线程 • dl_source • dl_sink • 提供微块间的共享变量和分组信息 • 调度环变量 • dlNextBlock • 处理来自内核构件的分组并将其提交给微块 便笺环 便笺环 微块 微块 微块 调度环
内核构件(CC ) • 管理用于分组/消息处理的数据结构 • 配置相关的微块 • 接收并处理来自微块的异常分组 • 可以管理多个微块 • 一个初始化函数 • 分配存储器资源 • 下载微块 • 符号填补(patches symbols) • 注册特征信息 • 一个终止函数 • 释放分配的存储器资源 • 一个或多个分组处理函数 • 一个或多个消息处理函数 • 在初始化时需要注册
执行引擎 • 包含一个或多个内核构件的执行线程 • 构件的执行环境 • 初始化函数 • 初始化CCI和各个构件 • 建立、分配便笺环 • 注册特征值 • 终止函数 • 线程的入口函数 • 等待关机或重新启动的无穷循环 • 通过中断响应来处理各种消息、分组和事件 • 构成一个特殊的构件 • 系统应用 • 创建一个操作系统线程 • 初始化资源管理器、系统硬件配制以及各个内核构件、下载微块和进行启动时的配置
事件 • 由系统应用定义 • 处理程序由系统应用提供 • 关机命令、重新启动 • 路由通告、邻机发现、处理ICMP分组 • 属性 • 有效期、优先级、事件处理函数、来源、存储句柄、类型、周期性 • 执行引擎在事件发生时调用系统应用提供的处理程序
调度策略(SP) • 执行引擎中用于安排分组、消息、事件的处理顺序 • 简单的策略 • 严格的优先级、轮回、加权轮回 • 层次化的算法 • 调度策略构成一颗策略树 • 分组、消息是树的叶结点
特征(property) • 一个“名字-数值”实体构成的树形数据结构 • 由执行引擎进行动态的维护 • 初始化时下载并建立 • 执行引擎的信息 • 共享存储器、信号量、标记、系统配置 • 广播特征、MTU、接口状态(打开或关闭)、MAC地址、链路速度、链路状态 • IP地址、掩码、广播状态
回调函数(call-back) • 向控制平面提供异步的API函数 • 内核构件在完成控制平面调用的操作后使用回调函数将返回结果 • 如向应用程序提供统计信息或接口状态信息的函数 • 放在一个专门的线程中 • 与其他内核构件分离以避免内核构件被阻塞 • 可以由控制平面提供 • 必须向执行引擎进行注册
控制平面界面 (NPF模型) • CP_PDK • 函数库 • 向控制平面提供NPF API • 组成 • 控制平面模块 • 传输插件 • 转发平面模块
CP_PDK的控制平面API模块 • 应用API实现模块 • 实现NPF应用API • 配置和管理模块 • 实现配置和管理API • 名字空间模块 • 实现名字空间API • 路由器结点名、刀片名、虚拟接口名、隧道名 • 绑定和能力发现模块 • 发现下层转发平面的能力(支持热插拔) • 进行内核构件相互连接关系的绑定 • 转发平面间转发模块 • 负责打标签,用于转发平面单元之间的转发 • 回调和事件处理器 • CP模块管理器 • 负责初始化和关闭控制平面模块 • 协议支持服务模块 • 为传统应用和路由协议提供支持
CP_PDK控制平面模块的特点 • 知道多个转发平面的存在 • 能够进行一到多的映射 • 如将每一个路由信息下载到多个转发平面的路由表中 • 知道下层多个转发平面相互连接的拓扑结构 • 需要时可以进行转发平面之间的转发。 • 绑定和能力发现功能可以检测新的转发平面单元(FE) • 提供热插拔的支持 • 有一个转发平面插件API • 用于与转发平面进行通信 • 提供并实现一些NPF API • 如应用API和管理API • 使用操作系统抽象层来实现与控制平面和操作系统的独立性 • 使用shim层次与传输插件接口
名字空间 • 用于对象的识别、定位和分组管理 • 转发平面特征属性的访问句柄 • 提供系统需要的下层配置信息 • 采用树形结构组织名字结点 • 包括代表各个转发平面实体的对象 • 转发平面的物理接口和ARP表 • 可以实现一些实体的映像 • 如将两个转发平面映像为一个虚拟路由器的转发平面 • 类似于内核构件维护的特征信息库 • 但名字空间的抽象层次更高 • 而且它只是一个目录结构,并不包含数据本身
CP_PDK的传输插件 • 提供在控制平面和转发平面之间的通信方式 • IETF标准协议 • ForCES • IETF正在制订的协议draft-ietf-forces-protocol-01.txt • 用于在跨平面的多个中介(agent)之间交换数据 • COPS • Common Open Policy Service • 在QoS信令机制上支持策略控制的协议 RFC2748 • GSMP • General Switch Management Protocol • IP交换机的控制协议RFC3292-5 • 诸如CORBA的机制 • Infiniband • PCI • 背板交换结构 • 共享存储器
CP-PDK的转发平面(FP)模块 • 与特定的转发平面API相关 • 在转发平面上建立起统一的接口API • Shim层次 • 接收上层的对API的调用 • 将其映像为相应的FP API调用 • 将NPF API调用映像为内核构件的调用 • 在Intel的IXP网络处理器中 • 负责FP的绑定和发现
VIDD • 虚拟接口设备驱动器 • 转发平面接口对控制平面提供的虚拟接口 • 路由协议和其它控制平面应用看到的转发平面接口 • 模拟转发平面物理接口 • 控制平面发送给虚拟接口的分组经过转发平面后送到相应的物理接口 • 分组的传递采用IP-in-IP隧道协议 • 对控制平面的分组进行分类 • 实现为一个网络协议工具包(NPT)驱动器 • 具有END的功能
Agenda • IXA工作平台和可移植框架 • 网络处理器软硬件系统结构 • 微块的开发设计环境 • 内核构件的开发环境 • 基本路由器设计实例 • 主要微块分析 • 内核构件分析
微块设计 • 微块的连接 • 微块的ID • 一个全局唯一的8位的ID • 在编译时分配 • 微块的逻辑输出通过设置调度环变量dl_next_block来指定 • 每个微块检查dl_next_block并依次进行分组的传递 • 便笺环用于在微引擎之间传递分组缓存和描述符(元数据)信息
调度环代码例子 void main() { DL_Source_Init(); // initialize DL_Source block IPFwd_Init(); // initialize the Ipv4 Forwarding block Meter_Init(); // initialize the meter block WRED_Init(); // initialize the WRED block DL_Sink_Init(); // initialize DL_MESink block while(TRUE) { // Run the dispatch loop DL_Source(); // Get a packet from the scratch ring IPFwd(); // call the IP forwarding block Meter(); // call the metering block WRED(); // call the WRED block DL_Sink(); // pass packet to another microengine } // end dispatch loop while } // end main
调度环的数据结构 • 缓存句柄 • 唯一地标识分组的元数据在SRAM中的存储位置 • 低24位 • 唯一地标识实际数据存储在SDRAM的位置
调度环的数据结构 • 元数据