《5.Hardware accelerator for eBPF.pdf》由会员分享,可在线阅读,更多相关《5.Hardware accelerator for eBPF.pdf(23页珍藏版)》请在三个皮匠报告上搜索。
1、wBPF-out-of-order coprocessor optimized for eBPF周鹤洋2022.11.12简介-Work:Cloud InfrastructureDeno-这项工作是我的本科毕业设计-GitHub losfair主要工作1.硬件:硬件:面向FPGA的RISC-V处理器核心-面向网络报文处理场景下的内存访问特征优化-基于受限数据流机制实现指令乱序执行-针对FPGA实现优化了面积用量与最高频率2.软软件:件:eBPF二进制翻译软件与Linux内核驱动程序3.方法:方法:软硬件协同设计、硬件敏捷开发与敏捷验证、硬件自动化测试Why先前的硬件 eBPF 工作:hXDP/
2、FFShark(VLIW/众核架构)现代高性能应用处理器都采用乱序执行(OoOE)架构.尝试针对 eBPF 应用场景设计专用的 OoO 处理器.优势:动态指令级并行;无需缓存实时处理 DDR 数据系统架构平台:平台:Xilinx FPGA(Zynq-7020)数字逻辑:数字逻辑:基于 AXI4 互联协议软件:软件:基于 Linux硬件系统:硬件系统:流水线结构顺序执行乱序执行顺序执行硬件系统:硬件系统:流程视角(指令生命周期)前端阶段:前端阶段:进入后端前的指令处理不涉及数据,均属于前端阶段,包括分支预测、取指与译码。分发阶段:分发阶段:指令进入执行后端后的第一个阶段是分发(Dispatch)
3、,该阶段亦是动态数据流分析的第一阶段。指令分发逻辑利用前阶段的译码信号与物理寄存器状态表为指令依赖的数据与产生的数据分配物理寄存器,同时分配重排序缓冲槽。执行阶段:执行阶段:指令的所有数据依赖就绪后即会被发射,进入执行阶段。发射逻辑从物理寄存器堆中取得源寄存器数据,为指令生成发射上下文。预提交阶段:预提交阶段:指令执行完毕后进入预提交阶段,生成提交请求写入重排序缓冲,将指令计算结果写入目的寄存器,并生成唤醒信号。提交阶段:提交阶段:预提交阶段指令的提交请求到达重排序缓冲头部后进入提交阶段,输出物理寄存器状态被更新为已提交,寄存器提交映射表(CMT)中与输出架构寄存器对应的项被更新为输出物理寄存
4、器编号,副作用被广播到副作用总线上,指令生命周期结束。硬件系统:硬件系统:关键结构乱序发射单元 OoO-IQ:乱序发射单元 OoO-IQ:对指令进行数据等待,监听唤醒信号,将指令发射到功能单元数据唤醒通道 Wake:数据唤醒通道 Wake:向 OoO-IQ 通知数据就绪状态重排序缓冲 ROB:重排序缓冲 ROB:将乱序完成的指令重排序为指令流顺序访存子系统 LSU:访存子系统 LSU:执行指令的内存访问操作,并保证副作用顺序硬件系统:硬件系统:乱序发射单元 OoO-IQ指令流-数据流转换示例发射单元结构对指令进行数据等待,监听唤醒信号,将指令发射到功能单元硬件系统:硬件系统:数据唤醒通道 Wa
5、ke向 OoO-IQ 通知数据就绪状态常规唤醒:常规唤醒:在预提交阶段触发。所有指令都可由常规唤醒机制唤醒,且所有指令的完成都会触发常规唤醒机制。延迟:3周期快速唤醒:快速唤醒:由数据流发射单元直接触发。ALU 指令发射时,立即唤醒发射窗口中所有其他 ALU 指令对该指令目的寄存器的依赖,在下一周期即可发射。延迟:1周期指令类型延迟(周期数)ALU(到 ALU)1ALU(到其他单元)4乘法单元5除法单元36/68复杂运算单元5硬件系统:硬件系统:重排序缓冲 ROBROB 结构与逻辑预提交仲裁结构将乱序完成的指令重排序为指令流顺序硬件系统:硬件系统:访存子系统 LSU默认内存序保证:默认内存序保
6、证:全序 Store(TSO)+对于非 I/O 设备的推测读内存屏障内存屏障:1.写-读写屏障(fence w,rw)2.顺序化屏障(SERIALIZE)执行指令的内存访问操作,并保证副作用顺序硬件系统:硬件系统:分支预测低延迟预测器:低延迟预测器:BTB高准确率预测器:高准确率预测器:GShare在 CoreMark 测试上的准确率为 89.4%:Iterations:2000#brmiss:19876082#brhit:167532846软件系统:软件系统:二进制翻译端到端流程:端到端流程:输入:输入:一组 eBPF ELF 对象文件输出:输出:可加载的 Protobuf 镜像软件系统:软
7、件系统:Linux设备驱动程序wbpf043c00000#address-cells=;#size-cells=;compatible=bluelogic,wbpf1;clocks=;reg=;interrupt-parent=;interrupts=;设备树(Device Tree)结点定义(1)获取设备中断请求(IRQ)资源。(2)获取设备总线地址资源。(3)分配等待队列(waitqueue).(4)初始化设备时钟,根据设备硬件版本设置对应的时钟频率。(5)分配直接内存访问(DMA)缓冲区,向内核请求DMA通道。(6)读取设备信息。(7)注册IRQ处理回调函数。(8)创建/dev下的字符设
8、备,向用户态提供接口。设备初始化流程系统实现:系统实现:硬件设计与验证设计语言:设计语言:SpinalHDL验证框架:验证框架:Cocotb+Verilator模块LUTFFBRAMDSP最高频率顶层设计(总用量)顶层设计(总用量)382463586193.51693.9MHzeBPF 硬件加速器子模块eBPF 硬件加速器子模块.016-系统实现:系统实现:硬件设计与验证-敏捷硬件设计方法SpinalHDL:基于 Scala 的浅嵌SpinalHDL:基于 Scala 的浅嵌入型数字硬件描述语言入型数字硬件描述语言充分利用 Scala 强大的逻辑表达力与高阶类型系统提供的
9、正确性约束,提高设计效率系统实现:系统实现:硬件设计与验证-CoreMark 测试1.42 CoreMark/MHz(直接访问 DDR,无数据缓存)U-Boot+CoreMark 完整输出U-Boot+CoreMark 完整输出系统实现:系统实现:软件开发采用 Rust 与 C 语言混合实现Linux内核驱动程序:Linux内核驱动程序:C二进制翻译软件+硬件 FSBL:二进制翻译软件+硬件 FSBL:Rust系统实现:系统实现:自动化测试本设计的自动化测试(CI/CD)基于 GitHub Actions实现。流程如下:1.软软件自件自动动化构建化构建本项CI流程自动构建Zynq平台的BOOT
10、.BIN启动文件,分为u-boot、Linux内核、启动镜像构建三个阶段。2.硬件硬件单单元元测试测试(test)本项CI流程基于Verilator运行硬件单元测试,验证硬件正确性。3.硬件硬件设计设计RTL生成生成(build-socs)本项CI流程由以SpinalHDL描述的硬件设计构建Verilog RTL,供其他相关流程使用。4.系系统测试统测试(system-test)本项CI流程依赖流程(三),构建FSBL,并基于cocotb与Verilator运行系统测试.5.版本版本发发布布(create-release)本项CI流程依赖流程(三),提交RTL到GitHub Release版本
11、发布系统,作为预发布版本。总结与展望本工作实现了以下目标:1.实现了一个基于受限数据流架构、RISC-V指令集与二进制翻译受限数据流架构、RISC-V指令集与二进制翻译的eBPF硬件加速器,可作为独立的IP核集成进智能网卡等须在硬件上执行eBPF程序的设计中;2.实现了与上述硬件结合的eBPF二进制翻译软件与Linux内核驱动程序eBPF二进制翻译软件与Linux内核驱动程序,提供从Linux用户态调用硬件运行eBPF程序的端到端功能。本工作下一步的改进方向:1.1.性能优化:性能优化:超标量取指与译码;2.2.精确内存权限控制:精确内存权限控制:独立于内核的硬件执行引擎和复杂的内存拓扑为安全带来了新的挑战,为实现对不可信eBPF程序的的隔离,须实现精确的内存权限控制;3.3.PCIe支持:PCIe支持:兼容当前主流的服务器系统;4.4.与Linux eBPF子系统的集成:与Linux eBPF子系统的集成:面向网络场景提供完整的硬件eBPF解决方案。开源地址硬件设计:硬件设计:https:/