一种提升固态硬盘读写性能的方法及固态硬盘技术

技术编号:18114601 阅读:25 留言:0更新日期:2018-06-03 08:03
本发明专利技术公开了一种提升固态硬盘读写性能的方法及固态硬盘,其特征在于在SSD控制器与SSD缓存管理模块中增加拼接模块,所述拼接模块将主机下发的读命令或写命令的缓存块中连续的缓存块拼接为8K大小的数据包,并通过数据包描述符表描述拼接的信息,所述SSD控制器的DMA根据描述符表描述的信息控制读或写的数据传输。通过增加拼接模块降低建立生成数据包传输数据的次数,进而减少时间消耗,由此带来了提升读写命令的性能。

【技术实现步骤摘要】
一种提升固态硬盘读写性能的方法及固态硬盘
本专利技术涉及固态硬盘控制技术,特别涉及一种提升固态硬盘读写性能的方法及固态硬盘。
技术介绍
SATASSD的控制器设计和固件(FW)设计需要遵循ATA接口协议,ATA协议规定原生命令队列NCQ(NativeCommandQueuing)读写命令数据传输的数据帧信息结构(DataFIS-DataFrameInformationStructure,简称数据包)最大也建议为8KB,因为每次建立数据包的传输需要消耗一定的时间,所以单个命令形成的数据包越少,建立数据包传输造成的时间消耗越少。最理想的情况是命令的每个数据包都是8KB的,最后一笔不足8KB的数据包除外。当前SATASSD的固件设计中闪存转换层FTL(FlashTranslationLayer)采用4KB的映射机制,理所当然的缓存管理模块也是以4KB为单位管理且以链表形式管理,这样比较简单实用,如图1是常规的缓存管理示意图,逻辑链表上维护的是物理缓存块的索引值,缓存Buffer管理模块每次从逻辑链表头部摘下一个索引值,计算出该索引值对应的4KB物理缓存块的地址给申请者,申请者使用完归还后,缓存管理模块根据缓存块地址逆向计算出对应的索引值,把该索引值挂到链表尾部。由于固件设计中命令重排序的策略,最先申请出去的缓存块不一定优先与主机传输数据,所以也并不能保证优先申请出去的缓存块优先返还给缓存管理模块,即最后逻辑链表上相邻的索引值对应的物理块地址不一定是物理连续的,见图1中逻辑索引与物理块的对应关系,存在交错情况。读写命令的数据包(DataFIS)以4KB为单元封装的,如图2是常规的4KB大小的数据包数据流图,SSD的固件读写命令按照4KB单元分配多个缓存块,这些缓存块在物理上不一定连续,SSD控制器中有个描述符表的先进先出队列DataFISFIFO,DataFIS描述符表记录了缓存块的物理地址段,SSD固件把读写命令的缓存块物理地址按顺序(命令内的数据是按顺序传输的)提交至DataFISFIFO,SSD控制器依次从DataFISFIFO中取出DataFIS描述符表,然后解析出DataFIS描述的缓存物理地址段,然后启动控制器的DMA(DirectMemoryAccess,一种数据传输方式)连接主机缓存与SSD的缓存进行数据传输,传输完一个DataFIS后SSD控制器再取出下一个DataFIS描述符表,再次启动DMA进行数据传输。所以一个命令切割的DataFIS描述符表越多,SSD控制器的额外开销也越多,性能越差。现有技术中每个DataFIS描述的都是4KB的一段缓存,最后一个DataFIS可能不足4KB。由于映射单元和缓存管理单元都是4KB的,当前的固件策略中命令数据传输的数据包也是以4KB为单位,如此设计比较简单易于维护。但是缺点也很明显,数据包的数量增多了,降低了前端接口的传输速率。
技术实现思路
针对以上缺陷,本专利技术目的是如何降低建立数据包传输造成的时间消耗。为了解决以上问题本专利技术提出了提升固态硬盘读写性能的方法,其特征在于在SSD控制器与SSD缓存管理模块中增加拼接模块,所述拼接模块将主机下发的读命令或写命令的缓存块中连续的缓存块拼接为8K大小的数据包,并通过数据包描述符表描述拼接的信息,所述SSD控制器的DMA根据描述符表描述的信息控制读或写的数据传输。所述的提升固态硬盘读写性能的方法,其特征在于所述拼接模块缓存块上一个缓存信息,至少包括上一个缓存块的块起始地址start_addr、块尾地址end_addr和是否有效标志is_valid;所述拼接模块缓存接收到一个新缓存块,将新缓存块的块起始地址start_addr与上一个缓存块的块尾地址end_addr进行比较判断是否连续,如果连续则将上一个缓存块和新缓存块进行拼接,拼接为8K大小的数据包,并对应更新数据包描述符表数据。所述的提升固态硬盘读写性能的方法,其特征在于所述拼接模块至少维护以下信息:缓存块的块起始地址start_addr、块尾地址end_addr和是否有效标志is_valid;提交到数据包队列的缓存块地址首先送入到所述拼接模块,判断is_valid是否被置起,如果没有置起则置起is_valid,并置start_addr为新缓存块的起始地址,置end_addr为新缓存块的末尾地址并结束本次拼接;如果is_valid已经置起则判断end_addr是否等于新缓存块的起始地址,如果不等于则说明拼接模块之前缓存的缓存与新来的缓存块不连续,则把之前缓存的缓存形成数据包描述符表刷到SSD控制器的数据包队列,再把新来的缓存块缓存下来,即置start_addr为新缓存块的起始地址,置end_addr为新缓存块的末尾地址并结束流程;如果end_addr等于新缓存块的起始地址则将新缓存块与之前缓存的缓存拼接起来,即置end_addr为新缓存块的末尾地址;如果拼接后的缓存没有超过8KB则结束本次拼接,否则切割出8KB形成DataFIS描述符表刷到SSD控制器的数据包队列并记录剩余缓存;如果新缓存块不是命令的最后一段缓存则结束拼接,否则将拼接模块中剩余的缓存形成数据包描述符表刷到SSD控制器的数据包队列,清除is_valid标志并结束拼接。所述的提升固态硬盘读写性能的方法,其特征在于SSD在空闲时重置缓存管理模块,重置缓存管理模块将逻辑链表中相邻的缓存块的索引值对应的物理缓存整理为连续状态。一种固态硬盘,其特征在于在SSD控制器与SSD缓存管理模块中增加拼接模块,所述拼接模块将主机下发的读命令或写命令的缓存块中连续的缓存块拼接为8K大小的数据包,并通过数据包描述符表描述拼接的信息,所述SSD控制器的DMA根据描述符表描述的信息控制读或写的数据传输。所述的固态硬盘,其特征在于所述拼接模块缓存块上一个缓存信息,至少包括上一个缓存块的块起始地址start_addr、块尾地址end_addr和是否有效标志is_valid;所述拼接模块缓存接收到一个新缓存块,将新缓存块的块起始地址start_addr与上一个缓存块的块尾地址end_addr进行比较判断是否连续,如果连续则将上一个缓存块和新缓存块进行拼接,拼接为8K大小的数据包,并对应更新数据包描述符表数据。所述固态硬盘,其特征在于所述拼接模块至少维护以下信息:缓存块的块起始地址start_addr、块尾地址end_addr和是否有效标志is_valid;提交到数据包队列的缓存块地址首先送入到所述拼接模块,判断is_valid是否被置起,如果没有置起则置起is_valid,并置start_addr为新缓存块的起始地址,置end_addr为新缓存块的末尾地址并结束本次拼接;如果is_valid已经置起则判断end_addr是否等于新缓存块的起始地址,如果不等于则说明拼接模块之前缓存的缓存与新来的缓存块不连续,则把之前缓存的缓存形成数据包描述符表刷到SSD控制器的数据包队列,再把新来的缓存块缓存下来,即置start_addr为新缓存块的起始地址,置end_addr为新缓存块的末尾地址并结束流程;如果end_addr等于新缓存块的起始地址则将新缓存块与之前缓存的缓存拼接起来,即置end_addr为新缓存块的末尾地址;如果拼接后本文档来自技高网
...
一种提升固态硬盘读写性能的方法及固态硬盘

【技术保护点】
一种提升固态硬盘读写性能的方法,其特征在于在SSD控制器与SSD缓存管理模块中增加拼接模块,所述拼接模块将主机下发的读命令或写命令的缓存块中连续的缓存块拼接为8K大小的数据包,并通过数据包描述符表描述拼接的信息,所述SSD控制器的DMA根据描述符表描述的信息控制读或写的数据传输。

【技术特征摘要】
1.一种提升固态硬盘读写性能的方法,其特征在于在SSD控制器与SSD缓存管理模块中增加拼接模块,所述拼接模块将主机下发的读命令或写命令的缓存块中连续的缓存块拼接为8K大小的数据包,并通过数据包描述符表描述拼接的信息,所述SSD控制器的DMA根据描述符表描述的信息控制读或写的数据传输。2.根据权利要求1所述的提升固态硬盘读写性能的方法,其特征在于所述拼接模块缓存块上一个缓存信息,至少包括上一个缓存块的块起始地址start_addr、块尾地址end_addr和是否有效标志is_valid;所述拼接模块缓存接收到一个新缓存块,将新缓存块的块起始地址start_addr与上一个缓存块的块尾地址end_addr进行比较判断是否连续,如果连续则将上一个缓存块和新缓存块进行拼接,拼接为8K大小的数据包,并对应更新数据包描述符表数据。3.根据权利要求1所述的提升固态硬盘读写性能的方法,其特征在于所述拼接模块至少维护以下信息:缓存块的块起始地址start_addr、块尾地址end_addr和是否有效标志is_valid;提交到数据包队列的缓存块地址首先送入到所述拼接模块,判断is_valid是否被置起,如果没有置起则置起is_valid,并置start_addr为新缓存块的起始地址,置end_addr为新缓存块的末尾地址并结束本次拼接;如果is_valid已经置起则判断end_addr是否等于新缓存块的起始地址,如果不等于则说明拼接模块之前缓存的缓存块与新来的缓存块不连续,则把之前缓存的缓存形成数据包描述符表刷到SSD控制器的数据包队列,再把新来的缓存块缓存下来,即置start_addr为新缓存块的起始地址,置end_addr为新缓存块的末尾地址并结束流程;如果end_addr等于新缓存块的起始地址则将新缓存块与之前缓存的缓存拼接起来,即置end_addr为新缓存块的末尾地址;如果拼接后的缓存没有超过8KB则结束本次拼接,否则切割出8KB形成DataFIS描述符表刷到SSD控制器的数据包队列并记录剩余缓存;如果新缓存块不是命令的最后一段缓存则结束拼接,否则将拼接模块中剩余的缓存形成数据包描述符表刷到SSD控制器的数据包队列,清除is_valid标志并结束拼接。4.根据权利要求1所述的提升固态硬盘读写性能的方法,其特征在于SSD在空闲时重置缓存管理模块,重置缓存管理模块将逻辑链表中相邻的缓存块...

【专利技术属性】
技术研发人员:许毅姚兰郑春阳
申请(专利权)人:深圳忆联信息系统有限公司
类型:发明
国别省市:广东,44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1