基于密码芯片的 DDR 加速器的设计与实现

2022-07-18 浏览(4) 评论(0) 当前位置:首页>互联网热门事件>基于密码芯片的 DDR 加速器的设计与实现

摘 要:

在安全服务器应用领域,基于对称算法的密码芯片需要读写访问大量、离散的密钥和初始向量(Intial Vector,IV)数据。利用密钥和 IV 数据的时间局部性和空间局部性,提出了一种预读与高速缓冲存储器(cache)相结合的双倍速率同步动态随机存取存储(Double Data Rate Synchronous Dynamic Random Access Memory,DDR)加速器,来解决密钥和 IV 的存储容量和访问效率的问题,并采用 Verilog 硬件描述语言完成 DDR 加速器的实现。最后基于芯动的 DDR 控制器和镁光的 DDR3 模型,进行有、无加速器的性能对比试验,试验表明 DDR 硬件加速器较大地提高了 DDR 对离散数据的访问性能,解决了密钥和 IV 存储中的容量和效率的问题。

随着云计算、大数据、5G 以及高清视频业务等领域网络信息技术的快速发展,通信设备对密码处理单元的加解密性能提出了更高的要求。为了满足网络汇聚层、核心服务器对海量密码业务处理能力的需求,需要研究具有高性能的密码芯片。

在基于对称算法的密码业务中,需要解决密钥和 IV 的管理(初始化、存储、访问、更新与注销)。密码服务涉及的密钥来源有以下两种:一是一包一密,随包下发,不需要维护;二是密钥需要由主机下发到加解密芯片并保存在加解密芯片内部,初始化完成后,由主机和加解密芯片共同完成密钥的维护。本文主要研究第二种。密码服务涉及的 IV 来源也有两种:一是一包一初始向量(Intial Vector,IV),随包下发,故无须考虑 IV 维护;二是对较大数据进行级联加解密处理,此时的 IV 生命周期为这个级联处理数据的整个处理周期,对于上层应用软件则是维护一个加密隧道的线程周期。本文主要研究第二种。IV 的初始化、更新和销毁,需要加解密芯片协同主机下发的初始化包(initial package)、更新包(update package)和结束包(final package)共同实现,如图 1 所示。

图 1 级联加解密过程

一个级联加解密过程可分为初始阶段、更新阶段和结束阶段 3 个阶段,更新阶段可以处理多个数据包。包序号和 IV 一对一绑定,密钥索引和密钥一对一绑定,下文将整个级联加密过程中的数据包统称为级联包。

初始阶段:首先主机创建一个加密隧道线程,完成密钥初始化,实现密钥和密钥索引的绑定,将包序号、IV、密钥索引及数据下发到密码芯片;其次密码芯片根据密钥索引查找密钥,并将密钥、IV和数据送入加解密模块进行运算;最后运算结果返回主机,并将运算结果的最后一个级联分组写入 IV存储空间,完成 IV 的更新。

更新阶段:首先主机下发包序号、密钥索引和数据;其次密码芯片根据包序号和密钥索引从本地缓存获取 IV 和密钥,连同数据送入加解密模块进行运算;最后运算结果包返回主机,并将运算结果的最后一个级联分组写入 IV 存储空间,完成 IV 的更新。

结束阶段:首先主机下发包序号、密钥索引和数据;其次密码芯片根据包序号和密钥索引从本地缓存获取 IV 和密钥,连同数据送入加解密模块进行运算,运算结果包返回主机;最后主机释放包序号,加密隧道现场注销。

可见,在加解密过程中需要解决密钥和 IV 的存储和访问。在安全服务器应用领域,加解密业务通常需要支持百万级用户,密钥和 IV 的存储需求高达几百兆字节,片上静态随机存取存储器(StaticRandom Access Memory,SRAM)已不能满足应用的需求。DDR 较 SRAM 具有容量大、成本低等特点 ,因此 DDR 取代片上 SRAM 成为密钥和 IV 的存储器。通常,一个密钥或一个 IV 只有几十个字节,当多用户多线程加解密业务同时进行时,需要维护很多密钥和 IV,就会对 DDR 产生大量的离散数据读写访问。而芯动的 DDR 控制器和镁光的 DDR 颗粒、Cadence 的 DDR 控制器和镁光的 DDR 颗粒的访问延迟均在几十个周期,这是由于对于 DDR 的离散数据访问的延迟较大,因此存在访问性能低的问题。

针对 DDR 访问的延迟较大的问题,本文提出预读机制,提前发起读操作,读回的数据缓存到高速缓冲存储器(cache)中,当加解密模块发起读写IV 和密钥操作时,可直接从 cache 中读写数据,访问延迟小。当多包级联时,IV 和密钥数据具有时间局部性,而当包序号连续时,IV 数据具有空间局部性,因此在加解密模块与 DDR 之间引入一级cache,cache 命中率较高,从而减少了 DDR 的访问次数。

1、DDR硬件加速器

在密码芯片中,高速加解密业务由高速接口、直接存储器访问(Direct Memory Access,DMA)、数据整形和加解密模块共同完成,如图 2 所示。高速接口是主机和密码芯片的通信接口;DMA 模块将下行包从高速接口搬往加解密模块,将上行包从加解密模块搬往高速接口;数据整形模块将下行包数据进行整形并分发到加解密阵列中的各个加解密单元,当完成加解密后,将数据汇聚整理后组成上行包,送入 DMA 模块。加解密模块通常由多个加解密单元组成,完成加解密业务。

图 2 DDR 硬件加速器在密码芯片中的位置

如图 2 所示,DDR 硬件加速器包含预读检测和cache 加速模块。预读检测模块用于检测来自主机的高速接口的输入数据,当检测到初始包的密钥索引时,向 DDR 发起读密钥请求,cache 加速模块在收到读请求后,从 DDR 中读取密钥,并将其存储在 cache 中。当数据流经过 DMA 和数据整形模块后,到达加解密模块,加解密模块根据包序号和密钥索引向 DDR 发起访问读写密钥和 IV 请求,此时密钥和 IV 已经存在 cache 中,可以较快地完成密钥和 IV 的读写操作。

1.1 预读检测模块设计与实现

密码业务通常采用包传输模式,密钥索引字段位于包头信息中。预读检测模块根据包格式,找出初始包的密钥索引字段,根据密钥的索引规则,计算密钥在 DDR 中的存储地址,发起一笔长度为 1、首地址为该 DDR 地址的读操作。cache 加速模块在收到来自预读模块的读请求后,向 DDR 模块发起读请求,并读回一笔长度为缓存行(cache line)大小的数据包存放到 cache 中,以便后续的加解密模块可以从 cache 中读取密钥。

1.2 cache 加速模块设计与实现

常见的 cache 组织方式包含全关联、直接映射和路组关联 [3-5]。为了提高 cache 的命中率,本设计采用全关联方式。加速器的设计如图 3 所示,下面分别就各个子功能进行详细描述。

AXI_GS 模 块 将 AXI 总 线 接 口 转 化 成 内 部 自定义总线接口,并将读写命令、地址和数据送往内容可寻址存储器(Content Addressable Memory,CAM) search。该模块内设有深度为 8 的输入缓存和输出缓存,用于消除瞬时带宽不匹配对系统性能造成的影响。

CAM search 模块用于检测地址是否命中,它将burst 首地址送给 CAM 模块,从 CAM 模块获取命中信息,同时将读写命令、地址和数据送往 Write and read process 模块。

Address FIFO 用于存放未完成的且需要从 DDR颗粒读取数据的读写操作的 burst 首地址和 burstID。在 Write and read process 模块中,对于地址未命中读操作和地址未命中且需要从 DDR 读数据回填 cache line 的写操作,burst 首地址和 burst ID 写入 Address FIFO;在 Write and read process 模块中,命中的写操作需要检查地址是否与 Address FIFO 中的地址相同,若相同,则当前操作与之前操作可能存在数据相关性 ,需要等到之前操作完成后,才开始当前操作。在 Write and read process 模块中,地址命中的读操作,需要检查当前读地址是否与Address FIFO 中的地址相同,若相同,则当前操作与之前操作可能存在数据相关性,需要等到之前操作完成后才开始当前读操作,此外还需要检查当前读 ID 是否跟 Address FIFO 的读 ID 相同。根据 AXI总线相同 ID 顺序执行的要求,则应该等到该 ID 的之前操作完成后,才开始当前读操作。

Write and read process 模块根据地址是否命中,对读写 burst 进行分别处理。

为了减少对 DDR 的访问,读操作采用 lookthrough 机制 [3,4,6]。对于地址命中的读 burst,读命令和地址被送往 Match read process 模块处理;对于地址未命中的读 burst,向 AXI_GM_RD 模块发起 AXI读请求,将该笔读响应的参数写入 PFIFO,同时将首地址写入 Address FIFO。

为了尽快向加解密模块返回写响应信号,写操作采用 write-back 机制 [3,4,6]。对于地址命中的写burst,写地址、写数据、写命令送往 SRAM write interface 模块处理;对于地址未命中的写 Burst,写地址、写数据、写命令送往 SRAM write interface 模块,若 burst 长度小于 cache line 大小,为了保持 cache数据和 DDR 数据一致,则需要从 DDR 读数据回填当前 cache line,因此会向 AXI_GM_RD 模块发起AXI 读请求,将该笔读响应的参数写入 PFIFO,同时将首地址写入 Address FIFO。每次操作,会更新CAM 和 LRU。

SRAM write interface 用于处理写 burst,它先将写数据写入 SRAM,然后将 response 写回 AXI_GS响应通道。

图 3 cache 加速模块

GM read response process 模块根据 PFIFO 中的参数,处理从 AXI_GM_RD 模块读回的 DDR 数据。若是地址未命中写,则将从 DDR 读回的数据写入SRAM 中;若是地址未命中读,则将从 DDR 读回的数据写入 AXI_GS 响应通道,同时将数据写入SRAM。

数据回收模块采用最近最少使用(Least Recently Used,LRU)替换算法实现对 cache line 的更新。为了避免 cache 满时,没有可用的 cache 空间,导致流水线被阻塞,本设计在 cache 将满未满时,把最久没有访问过的 cache line 状态清零,更新 LRU矩阵和 CAM 状态,若该 cache line 中的数据比 DDR中的数据新,则读出 cache line 的数据并写入 DDR中。当接收到 Flush 命令时,将整个 CAM 的状态复位,当 cache line 的数据比 DDR 数据新时,则读出cache line 的数据并写入 DDR 中 。

CAM 模块用于查询地址是否命中。当地址命中时,命中标志生效并返回当前地址所在的 cache地址;若地址未命中且 cache 不满时,命中标志无效并返回可用的 cache 地址;若地址未命中且 cache已满时,命中标志无效并返回没有可用 cache 地址的标志。

LRU 用于查找最久未被使用的 cache line。本设计使用 LRU 矩阵算法。

AXI_GM_RD 用于将内部的读请求总线转换成AXI 读地址、读数据通道信号。

AXI_GM_WR 用于将内部的写请求总线转换成AXI 写地址、写数据以及写响应通道信号。

REG_IF 模块为寄存器模块,用于 CPU 配置模块寄存器、读取模块状态和调试信息。

1.3 cache 加速模块设计特点

为了提高性能,采用全流水线设计 。写操作处理过 程 包 含 4 级 流 水:第 1 级,AXI_GS将 AXI 总线转化为内部总线;第 2 级,cam search模 块 检 查 地 址 是 否 命 中;第 3 级,SRAM write interface 将数据写到 SRAM 并向 GS response arbiter输出写响应;第 4 级,AXI_GS 将内部写响应转换成 AXI 写响应。

地址命中的读操作的处理过程包含 4 级流水:第 1 级,AXI_GS 将 AXI 总线转化为内部总线;第2 级,cam search 模块检查地址是否命中;第 3 级,match read process 从 SRAM 读回数据,并将其送往GS response arbiter;第 4 级,AXI_GS 将内部读响应转换成 AXI 读响应。

地址未命中的读操作的处理过程又分为请求过程和响应过程。请求过程包含 4 级流水:第 1 级,AXI_GS 将 AXI 总线转化为内部总线;第 2 级,cam search 模块检查地址是否命中;第 3 级,write readprocess 通过 AXI_GM_RD 模块向 DDR 控制器发起读请求;第 4 级,AXI_GM_RD 将内部的读请求转换成 AXI 读地址通道信号,送给 DDR 控制器。响应过程包含 3 级流水:第 1 级,AXI_GM_RD 将来自 DDR 控制器的读数据通道信号转换成内部读响应信号;第 2 级,GM read response process 将来自AXI_GM_RD 模块的读数据写入 SRAM,同时送往GS response arbiter;第 3 级,AXI_GS 将内部读响应转换成 AXI 读响应。

采用 FIFO 设计,PFIFO 将 DDR 读请求和读数据分开,可以支持 Outstanding 操作。Address FIFO用于存放未完成的且需要从 DDR 颗粒读取数据的 burst 的首地址和 ID,用于解决数据的相关性和AXI 总线要求相同 ID 顺序执行的问题。

为了简化设计,所有仲裁均采用固定优先级算法。

数据回收与数据读写相互独立,并行完成。当正在被回收的对象又被重新访问时,完成回收后,cam 的状态不被清除。

2、DDR硬件加速器分析

如图 2 所示,预读检测利用 DMA 和数据整形模块的延迟(通常几十个周期),提早发起对 DDR的读操作,读回的数据存放于 cache 中,这样抵消了 DDR 访问延迟对加解密模块的影响。该模块易于实现且硬件开销不大。

当包序号连续时,由于 IV 数据的存储地址是由包序号索引,相邻的级联包的 IV 数据存储地址连续,因此 IV 数据具有空间局部性。当多包级联时,由于更新包和结束包与初始包有相同的 IV 地址和密钥地址,因此密钥和 IV 数据具有时间局部性。由于数据的时间局部性和空间局部性,cache加速器会有较高的命中率,使得大量密钥和 IV 的访问在 cache 中完成,从而有效减少 DDR 的访问次数。

本文用芯动的 DDR 控制器、镁光的 DDR3 仿真模型以及 SYNOPSYS 的 VCS 仿真工具,搭建了仿真环境。本文分别对不同个数的级联包,以及包序号是否连续进行有、无加速器的对比试验。IV 长度为 16 字节,4 个级联包包个数分别为 1,2,3,4,包序号连续时,加解密模块读写 IV 和密钥所需时间如表 1 所示,单位为时钟周期;IV 长度为 16字节,4 个级联包包个数分别为 1,2,3,4,包序号不连续时,加解密模块读写 IV 和密钥所需时间如表 2 所示,单位为时钟周期。

表 1 包序号连续的访问时间

通过对比试验,由表 1、表 2 可知:加速器对密钥和 IV 的访问性能有较大提高,当包序号连续时,加速器性能有 80% 以上的提升,当包序号不连续时,有 50% 以上的性能提升。

3、结语

本文设计并用 Verilog 硬件描述语言实现了一种预读与 cache 结合的 DDR 硬件加速器。通过对比试验说明,加速器较大程度上提高了 DDR 的访问性能,且适用于安全服务器领域的对称算法密码芯片的密钥和 IV 存储管理,有效地解决了片上 SRAM存储容量不够,片外 DDR 访问效率低的问题。

标签云