A SATA Open Source Core Paper

A HIGH PERFORMANCE, OPEN SOURCE SATA2 CORE

Abstract

本文描述了基于FPGA的开源SATA2内核的设计和实现。它提供了直接与硬件核心接口的能力,这有利于高性能和嵌入式计算应用。此外,内核具有总线接口和DMA引擎,可通过Linux块设备驱动程序将其提供给操作系统。使用固态驱动器进行的测量表明,我们基于FPGA的实现可以实现接近磁盘理论峰值的性能。相比之下,我们发现现代Linux服务器上的软件开销阻碍了这些高速存储设备的全部潜力。核心支持本机命令队列,性能结果突出了其在SSD环境中的重要性,特别是对于小块传输。

1.引言

高速收发器的引入可以配置为与行业标准电气兼容,例如SATA和SATA2,使FPGA能够与大型非易失性存储设备进行通信。但是,商用SATA内核有两个缺点。首先,它们非常昂贵,其次,核心设计为只能从软件访问。这对于最简单,最直接的片上系统类型设计可能是明智的,但它限制了直接与基于FPGA的内核接口的能力。本文描述了开源SATA2内核的设计,实现和性能测量。根据编码,SATA内核可用作操作系统的传统“SATA芯片组”的基础或以非常规方式使用,例如另一个硬件核心和非易失性存储器之间的接口。这为基于FPGA的加速器提供了直接从非易失性存储访问原始数据的能力。它还支持在硬件中创建基于FPGA的文件系统的能力[1,2]。

后者非常重要,因为非易失性存储速度和延迟正在发生巨大变化(当前基于闪存的设计和未来的相变存储器),而软件堆栈和微处理器频率则不然。除了演示核心的功能之外,本文还对软件开销进行了量化,并证明了当前固态硬盘的这种代价是巨大的。该实现还揭示了Native Command Queing - 它是为允许Winchester风格的磁盘重新排序未完成的请求而开发的 - 对于固态驱动器也很重要,特别是对于小块传输。除了可从OpenCores [3]获得的硬件核心外,还有一个开源Linux块设备驱动程序内核模块,该核心模块使核心可供操作系统使用。目前,该设计支持Xilinx Virtex 5和Virtex 6器件上的收发器。

本文的其余部分安排如下。在下一节中,将解释SATA标准的相关方面以及相关工作。设计目标和实现细节见第3节。在第4节中,分析了具有多种商品现成驱动器(Winchester和固态驱动器)的核心性能。该性能还与传统的基于微处理器的系统中的商用SATA II主机总线适配器进行了比较。

2.背景

2.1。SATA协议SATA协议是一种计算机总线标准,用于在主机总线适配器(HBA)芯片组和大容量存储设备之间传输数据[4]。SATA Gen 1的传输速度为150 MB / s,在SATA Gen 2中增加到300 MB / s。(SATA Gen 3规范可用并支持高达600 MB / s的速度。但是,我们无法访问尚未与SATA Gen 3兼容的FPGA器件。)串行ATA旨在克服并行ATA的许多限制。这些改进包括一个四线点对点高速串行接口,每个控制器连接支持一个设备。每个设备都获得专用带宽,并且没有与并行ATA驱动器一样的主/从配置跳线问题。引脚数从80引脚减少到7引脚。三条地线散布在四条数据线之间以防止串扰。此外,较小的电缆可以减少杂乱,更好的布线和改善的气流。

SATA协议栈分为五层,如图1所示。应用层由SATA HBA的编程接口组成。传统上,主处理器中的驱动程序在主存储器中构建SATA特定数据结构。在此实现中,我们提供了与基于FPGA的内核的直接接口,以及用于嵌入式软处理器和系统总线的简单寄存器接口。命令层定义在执行ATA命令时在主机和设备之间交换的帧信息结构(FIS)的序列。传输层格式化和分解FIS,管理流量控制并在发生错误时重新传输缓冲的FIS。链路层负责发送和接收帧,解码原语,处理传输错误等。我们在FPGA架构中实现命令层,传输和链路层。物理层在主机和设备之间提供高速电气接口,以及编码/解码,串行化/反序列化数据的逻辑。此功能由FPGA收发器提供。该层的链路初始化序列在FPGA逻辑中实现。此功能由FPGA收发器提供。该层的链路初始化序列在FPGA逻辑中实现。此功能由FPGA收发器提供。该层的链路初始化序列在FPGA逻辑中实现。

2.2。相关工作

FPGA和SATA领域的工作相对较少。FPGA设备有两种商用SATA内核[5,6],2012年5月刚刚报道了另一种开源工作[7]。但是,关于这些内核的性能的数据很少,目前尚不清楚支持软件基础架构是否已经开发。相比之下,人们对高性能计算领域中的固态驱动器和新型二级存储子系统非常感兴趣。也许最突出的是Green Flash [8],它直接使用闪存(没有SATA接口,没有FPGA)来构建高能效的超级计算机。另一个研究小组正在寻求使用基于PCIe的SSD并使用FPGA作为原型平台的高能效数据密集型超级计算[9]。虽然PCIe闪存设备提供更好的性能,它的成本更高(比SATA SSD更高)和更高的CPU利用率,从而掠夺应用程序的计算能力。人们也有兴趣使用FPGA和存储设备来研究使数据处理单元更靠近存储设备的活动磁盘方法[10,11]。这样做的好处是可以根据应用程序的数据处理需求定制系统。在商业上,Netezza使用这种方法通过使用FPGA在数据源上进行智能过滤和压缩来减少数据仓库设备中的数据量[12]。

我们的开源SATA内核以及支持基于FPGA的SOC基础设施将有助于这一研究方向。人们也有兴趣使用FPGA和存储设备来研究使数据处理单元更靠近存储设备的活动磁盘方法[10,11]。这样做的好处是可以根据应用程序的数据处理需求定制系统。在商业上,Netezza使用这种方法通过使用FPGA在数据源上进行智能过滤和压缩来减少数据仓库设备中的数据量[12]。我们的开源SATA内核以及支持基于FPGA的SOC基础设施将有助于这一研究方向。人们也有兴趣使用FPGA和存储设备来研究使数据处理单元更靠近存储设备的活动磁盘方法[10,11]。这样做的好处是可以根据应用程序的数据处理需求定制系统。在商业上,Netezza使用这种方法通过使用FPGA在数据源上进行智能过滤和压缩来减少数据仓库设备中的数据量[12]。我们的开源SATA内核以及支持基于FPGA的SOC基础设施将有助于这一研究方向。Netezza使用这种方法通过使用FPGA在数据源上进行智能过滤和压缩来减少数据仓库设备中的数据量[12]。

我们的开源SATA内核以及支持基于FPGA的SOC基础设施将有助于这一研究方向。Netezza使用这种方法通过使用FPGA在数据源上进行智能过滤和压缩来减少数据仓库设备中的数据量[12]。我们的开源SATA内核以及支持基于FPGA的SOC基础设施将有助于这一研究方向。

3.设计和实施

本节重点介绍了我们的设计目标,概述了SATA内核的用户界面,然后提供了设计的内部细节。(“用户”指的是设计基于FPGA的应用程序的人,他们希望使用该核心。)

3.1。设计目标

SATA内核的设计主要是为用户提供易于使用的界面,并能够直接连接到高带宽,非易失性存储系统。商用SATA IP核通常在软件中保留命令层和传输层的一部分(处理将命令编码到帧信息结构中)[5,6]。主处理器通常在系统存储器中构建命令FIS,并通过DMA和FIFO将其传送到SATA内核。这样可以灵活地支持各种SATA命令。但是,为了允许FPGA内核直接访问磁盘,我们在硬件中实现了命令层,并支持启用功能,状态,读取和写入扇区所需的最小ATA命令子集。持续,为了支持软处理器和操作系统,需要一个到命令层的总线接口。块设备内核驱动程序使大容量存储可用作传统的二级存储子系统。

3.2。SATA核心接口和模块

SATA内核(如图2所示)提供了一个简单的用户界面,用于读写存储设备。用户核心设置起始扇区地址,扇区数和请求类型(读或写)。它检查ready for cmd信号并触发新的cmd。数据可以通过32位接口发送/接收,支持FIFO,如握手信号(full,empty,write en,read en)。命令done和命令失败信号表示完成状态。接下来描述设计中的模块,从最外层(应用侧)开始。3.2.1。命令层模块ATA命令集的一个子集(读取DMA扩展,写入DMA扩展,FPDMA读取,FPDMA写入,设置功能和识别设备)已在此层使用FSM实现。命令层模块解码来自顶层实体的读/写命令,以向传输层发出适当的读/写扇区命令。每个命令执行都是一系列特殊数据结构,称为在SATA主机和驱动器之间交换的帧信息结构(FIS)。Write DMA Ext命令的示例命令序列如图3所示

3.2.2。传输层模块

传输层构造并分解命令层请求的FIS。它们提供命令,数据,状态和控制信息。表1中显示了用于Read DMA Ext命令的寄存器主机到设备FIS的示例。根据ATA格式封装用户参数,例如命令类型,扇区地址和扇区数。FIS类型由位于有效载荷的第一个Dword(32位)的字节0中的帧信息类型字段指示。我们实施中使用的FIS及其特征列于(表2)。它们充当由链路层发送的帧的有效载荷。设备通过注册设备向主机FIS报告FIS传输成功和错误。传输层FSM对FIS进行解码,并检查FIS的ATA状态和错误字段中的错误(与表1中的命令和功能字段相同)。FIS发送缓冲区保留每个命令FIS(寄存器主机到设备)的副本,并在发生错误时重新发送它。由于发送缓冲器的成本考虑,不保留尺寸较大(最大为8196字节)的数据FIS。

3.2.3。链路层模块

链路层主要涉及通过遵循帧传输协议来构造和传送每个FIS(由传输层创建)。为此,它使用称为基元的特殊控制字,它们是协议中定义的唯一模式。它们用于管理框架的流动以及框架结构。图4描绘了传输和链路层模块的控制单元和数据路径,它们一起工作以创建和控制每个FIS的传送。传输层FSM创建命令FIS(将主机注册到设备)并将其存储在FIS传输缓冲区中。然后它向链路层FSM发出请求以处理它。链路层RX和TX FSM处理帧构造和解构过程。TX FSM读取FIS缓冲区,计算32位CRC(循环冗余校验)并将其附加到帧有效负载的末尾。下一步是添加SOF(帧开始)和EOF(帧结束)基元以标记帧边界,如图5所示。这有助于接收器从SATA链路上的信息流中识别每个FIS。为了防止电磁干扰(EMI),需要通过扰码器电路发送帧。通过使用线性反馈移位寄存器(LFSR)的输出对要发送的数据进行异或来执行加扰。该过程在更宽的频谱上分散噪声。然而,由于定义每个基元的数据模式必须由接收器的物理层检测,因此基元不会被加扰。因此,为了简化实施,

图6描绘了主机和设备之间的帧传输协议。最初,当SATA链路空闲时,主机和设备连续发送SYNC基元流。当主机准备好发送帧时,它发送X RDY原语(发送器就绪)。设备响应R RDY(接收器就绪)。接下来,主机通过将SOF和FIS发送到设备来开始帧传输。一旦设备识别出有效帧,它就会向主机发送R IP(正在接收)原语(注意SATA协议是半双工)。主机通过发送CRC和EOF原语来终止帧,并通过发送WTRM等待来自设备的帧验证响应(等待帧终止)。设备发送R OK或R ERR以表示成功或失败的帧传输。通过发送SYNC原语将链路返回到空闲状态。在接收侧,来自物理层的帧被解构并通过解扰器。然后,链路层RX FSM计算CRC并将其与附加的CRC进行核对。如果在接收期间出现CRC错误或由R ERR检测到传输错误,则链路层会通知传输层,该传输层将重新传输FIS,如第3.2.2小节所述。此外,链路层还执行流控制以防止缓冲区下溢和溢出传输条件

硬IP收发器负责序列化/反序列化数据以及8位到10位编码/解码。但是,在建立数据通信链路之前,SATA协议要求通过使用带外(OOB)信号进行复位,同步和链路初始化过程。这由FPGA逻辑中的FSM处理。在开发SATA内核时,我们使用了Xilinx应用笔记[13]提供的SATA内核链路初始化参考设计作为起点。但是,该参考设计与Virtex 5 FPGA的GTP收发器(16位数据)兼容。为了支持Virtex 6,我们首先使用Xilinx Coregen生成了一个GTX包装器,并为SATA2配置了收发器的OOB参数。GTP和GTX收发器的数据路径宽度不同(GTP为16位,GTX为32位)以及用于OOB信号的端口(尽管OOB信号的序列保持不变)。因此,我们不得不重写OOB信令控制器状态机和时钟模块,并将其连接到GTX包装器。

3.3。本机命令队列

本机命令队列(NCQ)是一种通过在驱动器上排队多个请求来优化读写操作的机制。这最初是为硬盘设计的,它可以在内部优化命令的顺序,以最小化驱动头移动(寻道时间)。具有多个闪存芯片的固态硬盘也可以通过使用它同时访问这些闪存芯片而受益于NCQ。SATA NCQ支持32个未完成命令的最大队列深度。SATA协议提供特殊命令:NCQ的FPDMA读取和FPDMA写入。将5位标记添加到命令帧(H2D Reg FIS)并与每个排队命令一起发送。驱动器通过发送设备到主机寄存器FIS来确认该命令已入队。此时,主机可以自由向设备发出更多命令。当设备准备好发送或接收数据时,它会发送一个DMA Setup FIS,其中包含与正在完成的命令相对应的标记。在FPDMA读取的情况下(图7),驱动器发送数据FIS,然后发送设备位比特FIS以指示命令完成。(该FIS基本上包含32位位图,以对应32个NCQ命令中的每一个)。多个DMA设置序列FIS - 数据FIS - 设置设备位FIS由设备发送以完成所有排队的命令。对于FPDMA写入,驱动器在DMA设置FIS之后发送DMA激活FIS以通知主机它已准备好接收数据。主机提供数据FIS,设备在完成写入后发回设备位比特FIS。同样,重复上述序列,直到完成所有排队的命令。它发送一个DMA Setup FIS,其标签对应于正在完成的命令。在FPDMA读取的情况下(图7),驱动器发送数据FIS,然后发送设备位比特FIS以指示命令完成。(该FIS基本上包含32位位图,以对应32个NCQ命令中的每一个)。多个DMA设置序列FIS - 数据FIS - 设置设备位FIS由设备发送以完成所有排队的命令。对于FPDMA写入,驱动器在DMA设置FIS之后发送DMA激活FIS以通知主机它已准备好接收数据。主机提供数据FIS,设备在完成写入后发回设备位比特FIS。同样,重复上述序列,直到完成所有排队的命令。它发送一个DMA Setup FIS,其标签对应于正在完成的命令。在FPDMA读取的情况下(图7),驱动器发送数据FIS,然后发送设备位比特FIS以指示命令完成。(该FIS基本上包含32位位图,以对应32个NCQ命令中的每一个)。多个DMA设置序列FIS - 数据FIS - 设置设备位FIS由设备发送以完成所有排队的命令。对于FPDMA写入,驱动器在DMA设置FIS之后发送DMA激活FIS以通知主机它已准备好接收数据。主机提供数据FIS,设备在完成写入后发回设备位比特FIS。同样,重复上述序列,直到完成所有排队的命令。驱动器发送数据FIS,然后发送设备位FIS以指示命令完成。(该FIS基本上包含32位位图,以对应32个NCQ命令中的每一个)。多个DMA设置序列FIS - 数据FIS - 设置设备位FIS由设备发送以完成所有排队的命令。对于FPDMA写入,驱动器在DMA设置FIS之后发送DMA激活FIS以通知主机它已准备好接收数据。主机提供数据FIS,设备在完成写入后发回设备位比特FIS。同样,重复上述序列,直到完成所有排队的命令。驱动器发送数据FIS,然后发送设备位FIS以指示命令完成。(该FIS基本上包含32位位图,以对应32个NCQ命令中的每一个)。多个DMA设置序列FIS - 数据FIS - 设置设备位FIS由设备发送以完成所有排队的命令。对于FPDMA写入,驱动器在DMA设置FIS之后发送DMA激活FIS以通知主机它已准备好接收数据。主机提供数据FIS,设备在完成写入后发回设备位比特FIS。同样,重复上述序列,直到完成所有排队的命令。多个DMA设置序列FIS - 数据FIS - 设置设备位FIS由设备发送以完成所有排队的命令。对于FPDMA写入,驱动器在DMA设置FIS之后发送DMA激活FIS以通知主机它已准备好接收数据。主机提供数据FIS,设备在完成写入后发回设备位比特FIS。同样,重复上述序列,直到完成所有排队的命令。多个DMA设置序列FIS - 数据FIS - 设置设备位FIS由设备发送以完成所有排队的命令。对于FPDMA写入,驱动器在DMA设置FIS之后发送DMA激活FIS以通知主机它已准备好接收数据。主机提供数据FIS,设备在完成写入后发回设备位比特FIS。同样,重复上述序列,直到完成所有排队的命令。

3.4。Linux块设备驱动程序

如今,将一个或多个微处理器作为硬核或软核嵌入FPGA中是很常见的。在许多能够在FPGA平台上运行的操作系统中,Linux可以说是最受欢迎的操作系统。因此,除了能够直接与基于FPGA的内核接口外,我们还提供优化的Linux块设备驱动程序,使我们的SATA内核可供操作系统使用。详细的Linux I / O堆栈已在[14]中介绍过。但是,Linux I / O堆栈中的传统硬盘中心设计无法充分利用SSD的功能,主要原因有两个[15]。首先,某些抽象层是不必要的,例如ATA驱动器的SCSI仿真。其次,对硬盘有用的队列调度程序会给基于SSD的系统增加CPU负载和延迟。[16]报道了更积极地调整块设备驱动程序以最小化软件开销。我们的设备驱动程序使用名为make request的现有内核函数来避免调用队列调度程序。此块设备驱动程序也不实现SCSI / ATA仿真。相反,驱动程序直接与SATA内核中实现的命令层交互。

4.结果与分析

4.1。实验装置

为了在FPGA上测试SATA内核的功能和性能,我们使用Xilinx EDK为Xilinx ML605板创建了一个基本系统。图8显示了实验设置,其中包括CPU(MicroBlaze),系统总线(PLB),内存,UART以及SATA核心子系统和非易失性存储。由于ML605板本身不包含SATA连接器,因此连接了FPGA夹层卡(FMC XM104 [17])。MicroBlaze上的AC测试应用程序设置SATA内核的命令参数并检查完成状态。虽然可以通过PLB的从寄存器接口读取和写入SATA内核的FIFO,但这在性能方面不是最佳的。另一个选择是使用Xilinx Central DMA控制器IP来节省处理器时间,但仍然使用系统总线在系统内存和SATA内核之间复制数据。为了测试SATA内核的峰值性能,有必要以更高的速率提供和使用数据。因此,我们开发了一个定制DMA内核,通过高带宽本机端口接口(NPI)直接访问DDR到内存控制器。这使得SATA内核能够将NPI通道用于从辅助存储器发送/接收的测试数据,同时依靠较慢的MicroBlaze-PLB接口来获取命令和状态。

4.2。性能

我们首先使用传统的Winchester风格硬盘(160 GB Western Digital Caviar Blue)以及基于闪存的固态硬盘(60 GB OCZ Agility 2)测试SATA内核的顺序传输速率。这让我们了解了SATA内核本身引起的开销以及存储设备和SATA协议的峰值带宽功能。计数器在HDL源代码中引入以收集性能数字。使用硬盘时,对于32 MB及更高的顺序数据传输大小,可达到≈1010MB / s(图9)的最大读/写带宽。在这种情况下,SATA2协议的峰值带宽能力(300 MB / s)未得到充分利用。这是由于机械磁盘驱动器的限制。另一方面,固态驱动器没有移动部件,可以实现更短的延迟和更高的带宽。SATA Gen 2 OCZ SSD的读取额定峰值性能为285 MB / s,写入时为275 MB / s。可以使用与6 Gb / s(600 MB / s)SATA Gen 3协议兼容的更快的SSD,但目前的Xilinx设备(最高为Virtex 6)仅支持收发器上的SATA2协议(300 MB / s)。因此,OCZ SSD目前足以进行我们的测试。

图10显示了带有SSD的SATA内核的带宽,传输大小在4KB到8MB之间(我们在实践中测试了高达4GB)。凭借SSD的低延迟,该内核可实现接近1024 KB额定峰值的性能。写入的性能优于4KB-512KB之间的传输大小的读取。设备上的SSD控制器使用写压缩技术[18],这减少了写入闪存的数据量。性能饱和,读取峰值为279 MB / s,超过8 MB传输大小的写入峰值为276 MB / s。这表明SATA内核本身可以产生最小的开销,并且可以有效地利用可用的磁盘和SATA通道带宽。

接下来,我们测试了内核的随机读/写性能以及在SSD上使用NCQ的好处。闪存SSD上的读/写操作的基本单位是4KB页面(与硬盘上的512字节扇区相比)。此外,文件系统的标准块大小为4KB。因此,4KB随机读/写结果是获得SSD最坏情况性能的重要指标。这里必须注意的是,最初用于传统硬盘的SATA协议仍然使用指向512字节区域的扇区地址。如果扇区请求未与闪存设备的页面边界对齐,则SSD设备处理器最终在多个闪存页面上读取/写入,这降低了性能。在我们的测试中,扇区偏移与页面边界对齐。要充分发挥NCQ的潜力,我们还确保SATA核心队列中有足够的命令发送到驱动器。图11显示了SSD的随机读/写吞吐量,数据大小为4KB,队列深度不同。随机读取性能与队列深度成线性比例,使用32个排队命令达到173.3 MB / s的峰值。对于使用OCZ SSD测试的4KB随机写入,观察到设备在从主机接收到前三个命令后将发送DMA设置FIS。然后,SATA内核必须在发送第4个命令请求之前发送与当前排队命令相关的数据。因此,随机写入带宽在队列深度为4的情况下饱和约196 MB / s。通常与SSD一起使用的随机读/写性能的另一个度量标准是4K IOPS,它指定驱动器每秒可以处理多少4 KB操作,每个块(页面)被读取或写入随机位置。OCZ Agility 2 60 GB SSD的额定4KB随机写入性能为10,000 IOPS,这些驱动器中的SandForce SF-1200处理器具有30,000 IOPS用于4KB读写,但我们的SATA核心超出了这些已发布的规格,达到了最大值写入的50,337 IOPS和队列深度为32的读取的44,366 IOPS(图12)。为了提供这些结果的参考框架,我们还使用现代Linux服务器的SATA HBA芯片组测试了OCZ SSD的性能。使用的机器是2.1GHz四核AMD Opteron CPU,具有16 GB的系统内存和运行Linux。我们首先在原始块设备上使用Linux实用程序dd,块大小为1024KB,峰值写入性能为174 MB / s,峰值读取性能为197 MB / s。接下来,再次在块设备上使用基准测试工具fio [19]。这能够为I / O传输生成多个进程并测试HBA和驱动器的NCQ功能。表3提供了CPU-SATA-SSD系统与FPGA-SATA-SSD解决方案的基准性能对比。尽管以低得多的时钟频率运行,但FPGA系统对于大型顺序和小型随机请求的性能都优于CPU。因此,尽管SSD能够提供更高的性能,但CPU系统上的Linux软件堆栈甚至在原始块设备访问期间也会引起开销。(我们没有尝试优化服务器上​​的Linux驱动程序以进行这些测试。)对于较小的4KB读写,软件开销变得更加突出,FPGA的性能优于CPU。我们还使用Linux实用程序dd来测试SATA Core的性能,使用在Virtex6 FPGA上的Microblaze软处理器上运行的块设备驱动程序。我们获得了21.74 MB / s和17.73 MB / s的顺序读写带宽。与我们的FPGA-SATA-SSD解决方案相比,这种未充分利用可归因于MicroBlaze(100 MHz)的低频率以及Linux软件堆栈的开销。我们还使用Linux实用程序dd来测试SATA Core的性能,使用在Virtex6 FPGA上的Microblaze软处理器上运行的块设备驱动程序。我们获得了21.74 MB / s和17.73 MB / s的顺序读写带宽。与我们的FPGA-SATA-SSD解决方案相比,这种未充分利用可归因于MicroBlaze(100 MHz)的低频率以及Linux软件堆栈的开销。我们还使用Linux实用程序dd来测试SATA Core的性能,使用在Virtex6 FPGA上的Microblaze软处理器上运行的块设备驱动程序。我们获得了21.74 MB / s和17.73 MB / s的顺序读写带宽。与我们的FPGA-SATA-SSD解决方案相比,这种未充分利用可归因于MicroBlaze(100 MHz)的低频率以及Linux软件堆栈的开销。

4.3。尺寸

表4显示了Xilinx Virtex 5(V5)和Virtex 6(V6)FPGA的SATA内核尺寸。对于V5,SATA内核的总逻辑利用率为3.3%,V6为1.5%。FIS缓冲器和帧发送 - 接收FIFO映射到专用片上Block RAM,占用V5上的2%和V6上的1%。这两款Xilinx器件都集成了丰富的收发器。SATA内核的小资源占用空间表明可以使用多个实例来构建片上系统RAID系统。

5.结论

本文描述了基于开源FPGA的SATA II核心和软件基础架构的实现。该核心在硬件中实现协议的命令层,其启用新功能(例如直接连接其他核心和硬件文件系统的实现)。我们证明FPGA实现更好地实现了现代闪存驱动器的全部性能并量化了软件开销。实现使我们能够证明SATA中的NCQ协议即使对于固态驱动器也很有价值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值