×
嵌入式开发 > 详情

RAID控制器中磁盘接口控制器流水线设计与实现

发布时间:2020-07-03 发布时间:
|

随着网络发展和计算机的普及应用,人们对存储系统的性能要求越来越高,尤其是关键事务的应用。廉价冗余磁盘阵列(RAID)采用分条和冗余的方法提高了存储系统的容量、速度和可靠性,已成为高性能数据存储的首选结构。磁盘阵列控制器是磁盘阵列的核心,多数缓存预取策略、缓存置换策略、磁盘聚合写策略、数据冗余计算、数据备份与重建均由磁盘阵列控制器完成。磁盘接口控制器主要负责磁盘组的管理及读写磁盘操作的具体实现。

流水线技术是计算机技术中同时具备空间并行性和时间并行性的技术,它把一个顺序处理的过程分解成若干个子处理过程,每个子处理过程能在专用的独立模块上有效地并行工作。本文通过对磁盘接口控制器的流水线设计,提高了磁盘接口的吞吐率。较高的磁盘接口控制器吞吐率可以降低平均访问时间,使复杂有效的预取和置换算法方便地应用于磁盘阵列,提高缓存的命中率,从而提高磁盘阵列的整体性能。

1 现有磁盘接口控制器设计

磁盘接口设计方式主要有2种:(1)使用通用处理器充当磁盘接口控制器,通过在处理器上运行相应的软件完成来自控制器上其他处理器的磁盘操作请求。这种方式最大的优点就是实现简单,但缺点也很明显。每一个新的磁盘操作请求必须在前一磁盘操作请求完成之后才能启动,并且需要占用大量处理器时间的异或操作也由该处理器承担,这使得每一次磁盘操作的时间太长,进而使得磁盘接口控制器的平均磁盘访问时间过长,吞吐率较低,尤其是降级模式读操作和磁盘写操作。(2)把需要长时间占用通用处理器的异或操作独立出来,由异或专用ASIC完成此功能,其他操作仍由通用处理器运行相应的软件完成。现在的中低端磁盘阵列常采用这种方式。使用专用的ASIC分担所有的异或操作,虽然可以部分减少需要异或操作的磁盘访问时间,如降级模式读操作和磁盘写操作,但新的磁盘操作也必须在前一磁盘操作完成之后才会启动,磁盘操作过程也是按顺序执行的,整体的吞吐率仍不是很高。所以这种方式不适合于高端磁盘阵列的需要。

2 并行流水线设计模型

与其他磁盘接口不同,磁盘阵列中的磁盘接口除了简单地完成磁盘的读写外,还需要完成数据块的逻辑地址到实际磁盘物理地址的映射和保证数据块在磁盘阵列中可靠地存储。根据所有磁盘操作请求完成的特点,磁盘接口操作被划分为4个子任务,每一个子任务由一个独立的模块来实现。在具体实现时,这些模块可以在同一芯片内,也可以在不同芯片中。这4个模块分别是:共享缓存操作模块、异或计算操作模块、地址映射模块和磁盘操作模块。共享缓存操作模块根据给定的共享缓存数据块地址读写数据块;异或计算操作模块是在降级模式读磁盘操作和正常模式下磁盘写操作时,完成异或计算;地址映射模块主要实现磁盘数据块的放置策略,将主机访问磁盘阵列的地址,如逻辑块地址LBA、逻辑单元号LUN,转换为实际的磁盘号、柱面号、磁道号、扇区号等;磁盘操作模块主要是根据地址映射模块操作后的结果完成磁盘的读写,包括相应的协议转换。图1是同一芯片实现各模块的磁盘接口控制器的结构框图。


实际上每个磁盘操作执行的这四个模块的次序和次数是不定的。读磁盘操作的数据流方向与写磁盘操作的数据流方向是相反的,执行这四个模块的顺序也是相反的。读写磁盘操作的各模块执行顺序如图2所示。一个磁盘操作请求只要在其执行的第一个模块空闲时便可启动,多个磁盘操作请求可以重叠的方式被磁盘接口控制器处理。理想情况下,磁盘接口控制器可以同时处理4个磁盘操作请求。


3 关键问题分析

磁盘接口的并行流水线设计模型在具体实现时有2个问题需要解决:(1)如何控制磁盘操作请求在模块间执行顺序和执行次数。因为在具体执行时有3种情况:4个模块每个模块执行1次、执行部分模块多次和只执行3个模块。(2)需要操作的数据块如何在模块间进行传递。

3.1 任务通信

要控制一个磁盘操作请求如何在模块间进行处理,一种有效的方式就是让每个模块都知道这个磁盘操作请求的具体需求。为此,一个用来描述磁盘操作请求的特殊的数据结构被引入,其结构如图3。每一个磁盘操作请求都有一个磁盘操作数据块结构,磁盘接口控制器预处理部件每收到一个来自控制器上的其他处理器的磁盘操作请求便产生相应的操作数据块结构,并根据其操作类型放入相应的模块任务池中。


每一个模块都有一个任务池来存放操作数据块结构。模块总是从自己的任务池中取操作数据块结构,然后根据数据块结构中的说明进行相应的处理,处理完成后再根据数据块结构中的说明正确地放入到下一个模块的任务池中。如某个模块处理后磁盘操作请求已完成,则该模块不再向其他模块传递该数据块结构,直接将其删除。这种方式简单有效,易于编码实现。

3.2 缓冲管理

在RAID5中,计算奇偶校验块需要同分条中的4个数据块,因此异或计算模块需要一个较大的缓冲来存放数据块。其他模块也至少需要一个数据块大小的缓冲存放当前操作的数据块。一个双队列的生产者-消费者模型(如图4)被用来实现高效缓冲管理。


这2个队列的长度不是固定的,是根据每个操作方向上的请求数量动态调整。在图4中,若读磁盘操作请求较多则增加缓冲队列1的长度;若写磁盘操作请求较多则增加缓冲队列2的长度。2个队列的总大小总是小于或等于整个缓冲的大小。每一个队列都是循环队列,生产者总是把新的数据块放到队列的尾部;只要该队列不为空,消费者总是从队列的头部取走数据块。

4 磁盘接口控制器系统设计与实现

4.1 应用环境

本控制器应用在RAID控制器的系统总线与连接硬盘的SAS总线之间,主要根据RAID控制器中的主处理器命令进行可靠快速的磁盘数据块的读写。

图5描述了本控制器典型应用环境。深色部分为本控制器,浅色部分是外部环境。


从应用环境中可以看出,磁盘接口控制器是连接RAID控制器与硬盘组的桥梁。磁盘接口控制器通过SAS总线连接多个硬盘,通过系统总线(如PCI总线)连接到RAID控制器整个系统中。

4.2 总体结构与各功能模块

磁盘接口控制器包括5个大的功能模块:磁盘命令预处理模块、共享缓存操作模块、地址映射模块、异或计算模块、磁盘操作模块。由于采用的是FPGA测试和验证,对成熟的模块,如PCI模块、SATA模块、DMA模块直接使用FPGA中的资源。四级流水的磁盘接口控制器总体结构如图6。


4.2.1 命令预处理模块

命令预处理模块主要根据RAID控制器中主处理器的命令决定该命令的操作流程,不同的读写方式在不同的工作模式下其数据流程不一样。命令预处理模块主要包括命令缓冲区和PLC微处理器。命令缓冲区主要接收RAID控制器中主处理器发过来的命令,命令包括:2种工作模式命令(正常模式和降级模式)、2种分条读写方式(完整分条和部分分条)、磁盘写命令(首个逻辑块地址LBA,逻辑块数)、磁盘读命令(首个逻辑块地址LBA,逻辑块数)。PLC微处理器是一个8 bit RISC微处理器,也是整个控制器的核心,负责解析磁盘操作命令和控制命令的整个执行过程,包括其他4个功能模块的任务分派和协调。

4.2.2 共享缓存操作模块

RAID控制器包含有大容量的SDRAM作为磁盘阵列的缓存,所有异或操作的数据块都存放在缓存中。共享缓存操作模块主要完成缓存数据块的读写,包括PCI总线和读写控制逻辑。PCI总线使用FPGA芯片自身所带的逻辑,读写控制逻辑主要根据命令预处理模块发过来的命令产生相应的读写时序并解决总线冲突。

4.2.3 地址映射模块

由于RAID控制器中主处理器操作的都是逻辑地址,地址映射模块完成的是逻辑地址到物理盘号、柱面号、扇区号的映射。地址映射模块包括逻辑地址寄存器和物理地址寄存器,并包括一个地址变换机构。地址变换机构是一个快速哈希变换机构,输入的逻辑地址通过快速哈希变换和相应的查表获得实际的物理地址。

4.2.4 异或操作模块

异或操作模块是RAID保证数据可靠性的基础,主要完成异或计算。这个模块比较简单,包括2个数据输入寄存器和一个输出寄存器,所有寄存器的位数是256 bit,一次异或操作可完成2个16 B数据的操作。一个分条的异或操作通过多次执行异或计算逻辑来实现。

4.2.5 磁盘操作模块

磁盘操作模块主要完成实际磁盘的数据读写,该模块通过SATA总线连接多个磁盘。该模块主要包括SATA主控制器和磁盘操作单元,SATA主控制器使用FPGA芯片本身自带的逻辑,磁盘操作单元是要实现的逻辑,主要接收和执行PLC微处理器发过来的读写命令,将数据从磁盘读到共享缓冲区或把共享缓冲区的数据写到对应的磁盘上。

4.3 RTL设计与实现

根据前述的系统结构和各功能模块,对本控制器进行了RTL设计和实现。这里以复位控制、输入控制为例说明其实现过程。

复位控制是IC设计中一个基本而重要的问题。综合同步复位和异步复位的优缺点,对复位控制电路的设计采用“异步复位,同步撤离”的策略,使用2个触发器级联,消除亚稳态的影响。同时,为了滤除异步复位中毛刺的影响,在复位端口用一个二输入与非门和一个缓冲器设计了一级滤除毛刺的电路,这样就可以得到一个干净的复位信号。

在本控制器的5个子模块中都存在数据的输入和输出。不同的模块只需要配置不同大小的FIFO。输入控制的设计主要以一个异步FIFO作为弹性缓冲器,该FIFO的大小是可配置的。另外还有一部分逻辑用来生成输出数据有效指示信号,这个指示信号采集到的FIFO读信号有效时即为有效。

5 FPGA测试与实验结果

经过RTL设计、仿真及相应的EDA验证,实现了流水线的磁盘接口控制器并对该控制器进行了FPGA测试。测试过程中,使用的测试平台板为Xilinx ML505测试平台,主芯片为Virtex-5 FPGA,在不加SATA多路器的情况下可同时连接4个SATA硬盘。

为了进行性能分析和比较,除了流水线的磁盘接口控制器外,同样基于Virtex-5 FPGA并使用MIPS CPU核的磁盘接口控制器也被实现。基于MIPS CPU核的磁盘接口控制器在Virtex-5 FPGA上可以很方便地实现,因为Virtex-5 FPGA本身自带MIPS CPU核和SATA控制器。只需要实现专用异或逻辑及在MIPS CPU核实现地址映射和读写控制即可。

测试过程中使用的磁盘为高速SATA磁盘,对应的磁盘参数见表1。这里只对磁盘接口控制器进行测试,对磁盘阵列控制器中主处理器产生的磁盘操作命令通过模拟产生。命令到达的方式服从泊松分布,工作为正常工作模式,读写方式为随机产生。在读磁盘请求数与写磁盘请求数相等的情况下,其实验结果如图7所示。由图可知,在任何磁盘请求到达率情况下,基于流水线的磁盘接口控制器的吞吐率都比基于MIPS的吞吐率高。在其他读写请求比率的条件下,也可以得到类似的结果。


磁盘阵列控制器是磁盘阵列的核心,直接决定了整个磁盘阵列的性能。本文通过研究现有磁盘接口设计和磁盘接口完成的功能,提出了一种磁盘接口的并行流水线设计模型,并对该模型实现过程中的模块间的通信问题和模块间的缓冲管理问题进行了相应的分析和设计。实验结果表明,在各种情况下,磁盘接口的吞吐率都有提高,在高写请求率和重负载两种情况下尤为显著。较高的磁盘接口控制器的吞吐率可以降低平均访问时间,使复杂有效的预取和置换算法方便地应用于磁盘阵列,提高缓存的命中率,从而提高磁盘阵列的整体性能。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ST Bluetooth®5.2认证系统芯片问市.延长电池续航