Io命令处理的方法及其固态硬盘的制作方法

文档序号:6383463阅读:208来源:国知局
专利名称:Io命令处理的方法及其固态硬盘的制作方法
技术领域
本发明涉及存储技术领域,尤其涉及一种IO命令处理的方法及其固态硬盘。
背景技术
固态硬盘(Solid State Disk,简称SSD)是一种基于永久性存储器,如闪存,或非永久性存储器,SDRAM (Synchronous Dynamic Random Access Memory,同步动态随机存取存储器)的计算机外部存储设备。其具有读写速度快,低功耗,无噪音,抗震动,低热量,体积小,工作范围大,广泛应用于军事、车载、工控、视频监控、网络监控、网络终端、电力、医疗、航空等、导航设备等领域。如果能够克服容价比低,和寿命限制,将会得到更广泛的应用。固态硬盘能够逐渐取代机械硬盘的根本原因是其相对于机械硬盘卓越的性能。虽然固态硬盘拥有较高的性能,但是硬盘接口还是计算机的主要瓶颈。尤其是对于以磁盘10 (Input/Output,输入/输出)为主的场合,提高CPU频率和使用多核处理器对于提升整个计算机系统的性能效果并不明显。而把机械盘换成固态硬盘能够显著的提高磁盘10处理速度。但是固态硬盘的处理速度和CPU和内存相比,速度还是有较大的差距。进一步优化固态硬盘的处理速度有着现实的意义。目前大部分固态硬盘控制器的基本处理方式是接收来自上层软件产生的10命令,转换格式成底层固件能够直接处理的巾贞,然后通过DMA (Direct Memory Access,直接内存存取)把10发送给硬件处理。在硬件处理完该10后,产生一个硬件中断,把硬件处理的结果返回给上层软件。因为硬件中断的产生和处理需要消耗大量的系统资源,因此,合并多个10命令可以减少中断的产生和处理,合并比较多的情况下,可以极大的提高系统性能。本发明就是提供了一种合并同质10命令的方法和装置。综上可知,现有10命令处理技术在实际使用上,显然存在不便与缺陷,所以有必要加以改进。

发明内容
针对上述的缺陷,本发明的目的在于提供一种10命令处理的方法及其固态硬盘,以提高固态硬盘的读写性能。为了实现上述目的,本发明提供一种10命令处理的方法,所述方法包括如下步骤预设同质10命令的相关参数以及下发条件;在根据所述同质10命令的相关参数判断接收到10命令为同质10命令时,收集所述同质10命令;在所述下发条件发生时,将收集到的所述同质10命令下发到对应的固件进行处理。根据所述的方法,所述预设同质10命令的相关参数以及下发条件的步骤包括初始化及注册10命令收集装置;
设置所述同质IO命令长度的区间值;设置收集所述同质IO命令的时间阈值、每次收集所述同质IO命令的数目阈值以及计时定时器;获取处理所述同质IO命令的固件所能够处理同质IO命令的最大数目。根据所述的方法,所述在根据所述同质IO命令的相关参数判断接收到IO命令为同质IO命令时,收集所述同质IO命令的步骤包括对从上层下发的IO命令进行同质IO命令的判断;在判断所述从上层下发的IO命令的长度在所述同质IO命令长度的区间值的范围之内时,收集所述同质IO命令。根据所述的方法,所述在所述下发条件发生时,将收集到的所述同质IO命令下发到对应的固件进行处理的步骤包括在每次收集的所述同质IO命令数达到所述固件所能够处理同质IO命令的最大数目时,向所述固件下发收集到的所述同质IO命令;在所述定时器计时达到收集所述同质IO命令的时间阈值时,向所述固件下发收集到的所述同质IO命令。根据所述的方法,在所述在根据所述同质IO命令的相关参数判断接收到IO命令为同质IO命令时,收集所述同质IO命令的步骤之后还包括对于符合要求的所述同质IO命令,构建新的所述固件能够识别的命令,对所述固件能够识别的控件的相关结构进行填充;在接收到新的命令包含的所述同质IO命令小于每次收集所述同质IO命令的数目阈值时,对新的符合格式的所述同质IO命令插入由第一个所述同质IO命令新建的链表中。为了实现本发明的另一发明目的,本发明还提供了一种固态硬盘,包括预设模块,用于预设同质IO命令的相关参数以及下发条件;收集模块,用于在根据所述同质IO命令的相关参数判断接收到IO命令为同质IO命令时,收集所述同质IO命令;下发模块,用于在所述下发条件发生时,将收集到的所述同质IO命令下发到对应的固件进行处理。根据所述的固态硬盘,所述预设模块包括初始化子模块,用于初始化及注册IO命令收集装置;第一设置子模块,用于设置所述同质IO命令长度的区间值;第二设置子模块,用于设置收集所述同质IO命令的时间阈值、每次收集所述同质IO命令的数目阈值以及计时定时器;获取子模块,用于获取处理所述同质IO命令的固件所能够处理同质IO命令的最大数目。根据所述的固态硬盘,所述收集模块包括判断子模块,用于对从上层下发的IO命令进行同质IO命令的判断;收集子模块,用于在判断所述从上层下发的IO命令的长度在所述同质IO命令长度的区间值的范围之内时,收集所述同质IO命令。根据所述的固态硬盘,所述下发模块包括
第一下发子模块,用于在每次收集的所述同质IO命令数达到所述固件所能够处理同质IO命令的最大数目时,向所述固件下发收集到的所述同质IO命令;第二下发子模块,用于在所述定时器计时达到收集所述同质IO命令的时间阈值时,向所述固件下发收集到的所述同质IO命令。根据所述的固态硬盘,所述固态硬盘还包括构建模块,用于在收集模块收集所述同质IO命令后对于符合要求的所述同质IO命令,构建新的所述固件能够识别的命令,对所述固件能够识别的控件的相关结构进行填充;插入模块,用于在接收到新的命令包含的所述同质IO命令小于每次收集所述同质IO命令的数目阈值时,对新的符合格式的所述同质IO命令插入由第一个所述同质IO命令新建的链表中。本发明通过在固态硬盘执行IO操作的过程中,启动同质IO命令收集装置,同时设置相关的定时器。对特定的同质IO命令,则符合特定大小,如可以手工设定的,在某一固定时间段,不引起延迟的IO命令。确保收集命令的总大小和个数能够被固态硬盘固件一次性处理,在处理完这些命令后,仅产生一个硬件中断;可以在大部分应用场合提高固态硬盘的读写性能,在特定场合能够极大的提高固态硬盘的读写性能。


图1是本发明第一实施例提供的固态硬盘的结构示意图;图2是本发明第二实施例提供的固态硬盘的结构示意图;图3是本发明第三、四、五实施例提供的固态硬盘的结构示意图;图4是本发明第六实施例提供的IO命令处理的方法流程图;图5是现有技术中提供的IO命令处理的方法流程图;图6是本发明一个实施例提供的IO命令处理的方法流程图。
具体实施例方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。参见图1,在本发明的第一实施例中提供了一种固态硬盘100,包括预设模块10,用于预设同质IO命令的相关参数以及下发条件;收集模块20,用于在根据所述同质IO命令的相关参数判断接收到IO命令为同质IO命令时,收集所述同质IO命令;下发模块30,用于在所述下发条件发生时,将收集到的所述同质IO命令下发到对应的固件进行处理。在该实施例中,预设模块10预设同质IO命令的相关参数以及下发条件;该同质IO命令的相关参数作为判断是否为同质IO命令的标准,由于将多个同质IO命令收集后再下发可以提供固态硬盘100处理IO命令的效率;并且设置适应固态硬盘100控制器的处理能力的下发条件,可以在该条件具备时将所述同质IO命令进行下发,进一步提高了固态硬盘100的处理IO命令的效率。收集模块20则在根据所述同质IO命令的相关参数判断接收到IO命令为同质IO命令时,收集所述同质IO命令;收集符合所述相关参数的同质IO命令后对其进行收集。最后下发模块30在所述下发条件发生时,将收集到的所述同质IO命令下发到对应的固件进行处理,以此提高了固态硬盘100处理IO命令的效率。参见图2,在本发明的第二实施例中,预设模块10包括初始化子模块11,用于初始化及注册IO命令收集装置;第一设置子模块12,用于设置所述同质IO命令长度的区间值;第二设置子模块13,用于设置收集所述同质IO命令的时间阈值、每次收集所述同质IO命令的数目阈值以及计时定时器;获取子模块14,用于获取处理所述同质IO命令的固件所能够处理同质IO命令的
最大数目。在该实施例中,初始化子模块11在IO启动之前先初始化和注册一个IO命令收集装置,在初始化硬件的过程中,从固件的相关位置获取固件所能够处理IO命令的相关阈值,包括该固态硬盘控·制器所能够支持的最大命令长度,Flash芯片的page大小,最大命令
数等等第一设置子模块12设置所述同质IO命令长度的区间值;该区间值根据包含固态硬盘100控制器的处理能够确定,第二设置子模块13设置相关的定时器,获取子模块14获得相关的固件所能处理的IO命令的相关阈值,最大命令长度,最大命令数,固件处理总长度等。例如最大命令长度为8Κ,最小命令长度为521Bytes,固件处理总长度为4M。参见图3,在本发明的第三实施例中,收集模块20包括判断子模块21,用于对从上层下发的IO命令进行同质IO命令的判断;收集子模块22,用于在判断所述从上层下发的IO命令的长度在所述同质IO命令长度的区间值的范围之内时,收集所述同质IO命令。在该实施例中,判断子模块21对于每个从上层下发的IO命令,都要对其IO的长度进行判断,如何长度不属于IO同质命令的区间,则直接发送到固件处理,且每次收集的IO同质命令总数小于所述同质IO命令的数目阈值。对于从上层下发的IO命令,对IO命令的特质进行相关的判断,确保其长度符合同质命令的收集需求,同时所收集的IO命令的总长度也不能超过固态硬盘控制器固件所能一次性处理的总长度。参见图3,在本发明的第四实施例中,下发模块30包括第一下发子模块31,用于在每次收集的所述同质IO命令数达到所述固件所能够处理同质IO命令的最大数目时,向所述固件下发收集到的所述同质IO命令;第二下发子模块32,用于在所述定时器计时达到收集所述同质IO命令的时间阈值时,向所述固件下发收集到的所述同质IO命令。在该实施例中,当固件上等待的IO命令数大于固件所能够承受的IO数时,或者当收集到的IO同质命令达到每次能够收集命令的最大值的时候,第一下发子模块31让收集到IO命令下发。例如最大IO数为20,同质命令为256。当收集到的IO同质命令虽然未达到每次能够收集命令的最大值的时候,到达定时器设置时间时,第二下发子模块32也将收集到的同质IO进行下发。因此,当每次收集的同质命令数达到固件所能一次性承受的IO数,或者同质命令的总长度达到固件能够一次性处理的总长度时,下发收集到的命令。虽然同质命令的收集未到达总数,在计时定时器超时的情况下,仍然下发。参见图3,在本发明的第五实施例中,固态硬盘100还包括构建模块40,用于在收集模块收集所述同质IO命令后对于符合要求的所述同质IO命令,构建新的所述固件能够识别的命令,对所述固件能够识别的控件的相关结构进行填充;插入模块50,用于在接收到新的命令包含的所述同质IO命令小于每次收集所述同质IO命令的数目阈值时,对新的符合格式的所述同质IO命令插入由第一个所述同质IO命令新建的链表中。在该实施例中,对于符合要求的同质命令,构建模块40构建新的底层固件能够识别的命令,对固件能够识别的frame的相关结构进行填充。插入模块50在新的命令包含的同质命令小于每次收集总数时,对新的符合格式的同质命令进行插入。具体的,对于符合同质要求的IO命令,接收到的第一个同质IO命令时,分配一个新的格式的命令,对于后续符合同质的IO命令,插入第一个新命令所建立的链表中,例如当建立链表后,下一个命令也在512bytes和2M之间时,把这个结构插入到新建立的链表中。在上述多个实施例中,固态硬盘100的多个模块可以软件单元,硬件单元或软硬件结合单元。参见图4,在本发明的第六实施例中提供了一种IO命令处理的方法,所述方法包括如下步骤步骤S401中,预设模块10预设同质IO命令的相关参数以及下发条件;步骤S402中,收集模块20在根据所述同质IO命令的相关参数判断接收到IO命令为同质IO命令时,收集所述同质IO命令;步骤S403中,下发模块30在所述下发条件发生时,将收集到的所述同质IO命令下发到对应的固件进行处理。在该实施例中,对符合同质属性的IO命令进行收集,让固态硬盘100控制器能够一次性处理多个IO命令,减少了系统IO硬件中断产生,提高了计算机系统处理IO的效率,极大的提闻了系统的IO速率。在本发明的第七实施例中,所述步骤S401包括初始化子模块11初始化及注册IO命令收集装置;第一设置子模块12设置所述同质IO命令长度的区间值;第二设置子模块13设置收集所述同质IO命令的时间阈值、每次收集所述同质IO命令的数目阈值以及计时定时器;获取子模块14获取处理所述同质IO命令的固件所能够处理同质IO命令的最大数目。在该实施例中,对同质IO命令的收集进行初始化准备,并且设置相关的参数。在本发明的第八实施例中,所述步骤S402包括判断子模块21对从上层下发的IO命令进行同质IO命令的判断;收集子模块22在判断子模块21判断所述从上层下发的IO命令的长度在所述同质IO命令长度的区间值的范围之内时,收集所述同质IO命令,在本发明的第八实施例中,所述步骤S403包括第一下发子模块31在每次收集的所述同质IO命令数达到所述固件所能够处理同质IO命令的最大数目时,向所述固件下发收集到的所述同质IO命令;第二下发子模块32在所述定时器计时达到收集所述同质IO命令的时间阈值时,向所述固件下发收集到的所述同质IO命令。在该实施例中,固态硬盘100控制器需要能够支持同时对多个非连续IO进行处理,仅仅适用于具有该功能的固态硬盘控制器。在本发明的第九实施例中,在所述步骤S402之后还包括构建模块40对于符合要求的所述同质IO命令,构建新的所述固件能够识别的命令,对所述固件能够识别的控件的相关结构进行填充;插入模块50在接收到新的命令包含的所述同质IO命令小于每次收集所述同质IO命令的数目阈值时,对新的符合格式的所述同质IO命令插入由第一个所述同质IO命令新建的链表中。在本发明的一个实施例中,首先选择能够同时处理多个IO的固态硬盘控制器作为硬件基础。对于一次只能处理单个IO的固态硬盘控制器不属于该发明的适用范围。在驱动程序初始化的过程中,初始化同质命令收集装置的相关参数和定时器。具体的参数一般从固态硬盘控制器硬件的相关寄存器获取,定时器时间的设置也由固态硬盘控制器的处理能力决定。为防止数据不一致性情况的产生,该时间值一般不宜设置过长。启动定时器,同时对每个下发的IO命令特征进行判断,如果不符合同质命令的特征,将会直接下发给固件处理。对于符合同质的IO命令,将会构建新的命令格式同时进行收集,在出现当收集IO命令总数达到阈值、收集IO命令总长度达到阈值或者定时器时间超时的任一情况时将所得到的新的同质IO命令的集合下发。然后开始新的重复命令收集的循环。从上述实施例中可以看出,对固态硬盘同质命令进行收集,在符合IO同质命令比较多的情况下,性能提高将会非常明显,如果符合同质的IO命令比较少时,性能提高的提升效果将会不明显。参见图5,在现有技术中,提供了传统的固态硬盘IO操作流程,描述如下步骤S501中,产生IO步骤S501中,插入IO等待队列;步骤S503中,判读FW(Firmware,固件)是否忙,是则执行步骤S504,否则执行步骤 S505 ;步骤S504中,继续等待;步骤S505中,DMA (Direct Memory Access,直接内存存取访问)到数据队列;步骤S506中,硬件处理;步骤S507中,产生中断;步骤S508中,上层处理。在传统的固态硬盘IO操作流程中,首先生成软件产生一个IO请求,把构建好的IO请求不是直接发送给固件,而是插入等待队列,在固件不忙的时候把IO下发给固件,硬件处理完成以后产生一个硬件中断,生成软件完成相关的IO处理。首先,产生IO命令,然后把IO命令插入等待队列,然后开始检查固件状态,如果固件忙,则返回,继续等待下一个IO命令,固件不忙则把等待队列的IO命令放到DMA数据队列,然后固件开始做DMA,把数据转送到固件处理,硬件处理完成以后,产生一个硬件中断,在中断处理函数中通知上层软件数据传送已经完成,同时释放之前产生IO命令时申请的资源,整个IO流程结束。在本发明的一个实施例中采取以下措施,可以使得在固态硬盘在大部分的情况下提高固态硬盘的IO速度,因为大部分应用的IO都符合同质IO的特征。参见图6,在本发明的一个实施例中提供了加入同质命令收集机制后的固态硬盘IO操作流程,该流程对于已经处在等待队列的IO请求进行判断,如果其IO长度属于收集的区间,将会被认为是同质命令进行收集。具体处理流程描述如下步骤S601中,产生IO步骤S602中,插入IO等待队列;步骤S603中,判读是否是同质IO命令,是则执行步骤S604,否则执行步骤S606 ;步骤S604中,插入同质IO命令队列;步骤S605中,判读同质IO命令是否满了或者超时,是则执行步骤S606,否则返回步骤S602 ;步骤S606中,判断FW是否忙,是则执行步骤S607,否则执行步骤S608 ;步骤S607中,继续等待;步骤S608中,DMA (Direct Memory Access,直接内存存取访问)到数据队列;步骤S609中,硬件处理;步骤S610中,产生中断;步骤S611中,返回上层处理。 在该实施例中,首先,上层产生一个IO命令,然后将IO命令插入等待队列,然后设置定时器,同时对每个IO命令进行检查,如果该IO命令不符合同质命令的特质,按之前传统IO处理流程,检查固件是否忙等等。如果该IO命令符合同质命令的特质,则把该IO命令插入到同质命令收集队列,然后检查定时器是否超时或者同质命令是否收集到最多,如果这两个条件满足一个就立即把收集队列的所有同质命令下发,如果不符合继续收集同质命令,知道上面两个条件中的一个满足,后续过程和传统IO命令一样。如果收集到的同质命令达到预定的阈值或者设置的定时器超时,将会对收集的同质命令进行下发。下发时,会删除等待队列中的IO命令。在硬件处理完IO以后,多个同质IO命令将会只产生一个中断。对于处理好的10,上层软件将会对每一个同质的IO命令返回内容分别进行处理。综上所述,本发明通过在固态硬盘执行IO操作的过程中,启动同质IO命令收集装置,同时设置相关的定时器。对特定的同质IO命令,则符合特定大小,如可以手工设定的,在某一固定时间段,不引起延迟的IO命令。确保收集命令的总大小和个数能够被固态硬盘固件一次性处理,在处理完这些命令后,仅产生一个硬件中断;可以在大部分应用场合提高固态硬盘的读写性能,在特定场合能够极大的提高固态硬盘的读写性能。当然,本发明还可有其它多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
权利要求
1.一种IO命令处理的方法,其特征在于,所述方法包括如下步骤 预设同质IO命令的相关参数以及下发条件; 在根据所述同质IO命令的相关参数判断接收到IO命令为同质IO命令时,收集所述同质IO命令; 在所述下发条件发生时,将收集到的所述同质IO命令下发到对应的固件进行处理。
2.根据权利要求1所述的方法,其特征在于,所述预设同质IO命令的相关参数以及下发条件的步骤包括 初始化及注册IO命令收集装置; 设置所述同质IO命令长度的区间值; 设置收集所述同质IO命令的时间阈值、每次收集所述同质IO命令的数目阈值以及计时定时器; 获取处理所述同质IO命令的固件所能够处理同质IO命令的最大数目。
3.根据权利要求2所述的方法,其特征在于,所述在根据所述同质IO命令的相关参数判断接收到IO命令为同质IO命令时,收集所述同质IO命令的步骤包括 对从上层下发的IO命令进行同质IO命令的判断; 在判断所述从上层下发的IO命令的长度在所述同质IO命令长度的区间值的范围之内时,收集所述同质IO命令。
4.根据权利要求2所述的方法,其特征在于,所述在所述下发条件发生时,将收集到的所述同质IO命令下发到对应的固件进行处理的步骤包括 在每次收集的所述同质IO命令数达到所述固件所能够处理同质IO命令的最大数目时,向所述固件下发收集到的所述同质IO命令; 在所述定时器计时达到收集所述同质IO命令的时间阈值时,向所述固件下发收集到的所述同质IO命令。
5.根据权利要求2所述的方法,其特征在于,在所述在根据所述同质IO命令的相关参数判断接收到IO命令为同质IO命令时,收集所述同质IO命令的步骤之后还包括 对于符合要求的所述同质IO命令,构建新的所述固件能够识别的命令,对所述固件能够识别的控件的相关结构进行填充; 在接收到新的命令包含的所述同质IO命令小于每次收集所述同质IO命令的数目阈值时,对新的符合格式的所述同质IO命令插入由第一个所述同质IO命令新建的链表中。
6.一种固态硬盘,其特征在于,包括 预设模块,用于预设同质IO命令的相关参数以及下发条件; 收集模块,用于在根据所述同质IO命令的相关参数判断接收到IO命令为同质IO命令时,收集所述同质IO命令; 下发模块,用于在所述下发条件发生时,将收集到的所述同质IO命令下发到对应的固件进行处理。
7.根据权利要求6所述的固态硬盘,其特征在于,所述预设模块包括 初始化子模块,用于初始化及注册IO命令收集装置; 第一设置子模块,用于设置所述同质IO命令长度的区间值; 第二设置子模块,用于设置收集所述同质IO命令的时间阈值、每次收集所述同质IO命令的数目阈值以及计时定时器; 获取子模块,用于获取处理所述同质IO命令的固件所能够处理同质IO命令的最大数目。
8.根据权利要求7所述的固态硬盘,其特征在于,所述收集模块包括 判断子模块,用于对从上层下发的IO命令进行同质IO命令的判断; 收集子模块,用于在判断所述从上层下发的IO命令的长度在所述同质IO命令长度的区间值的范围之内时,收集所述同质IO命令。
9.根据权利要求6所述的固态硬盘,其特征在于,所述下发模块包括 第一下发子模块,用于在每次收集的所述同质IO命令数达到所述固件所能够处理同质IO命令的最大数目时,向所述固件下发收集到的所述同质IO命令; 第二下发子模块,用于在所述定时器计时达到收集所述同质IO命令的时间阈值时,向所述固件下发收集到的所述同质IO命令。
10.根据权利要求7所述的固态硬盘,其特征在于,所述固态硬盘还包括 构建模块,用于在收集模块收集所述同质IO命令后对于符合要求的所述同质IO命令,构建新的所述固件能够识别的命令,对所述固件能够识别的控件的相关结构进行填充; 插入模块,用于在接收到新的命令包含的所述同质IO命令小于每次收集所述同质IO命令的数目阈值时,对新的符合格式的所述同质IO命令插入由第一个所述同质IO命令新建的链表中。
全文摘要
本发明适用于存储技术领域,提供了一种IO命令处理的方法及其固态硬盘,所述方法包括如下步骤预设同质IO命令的相关参数以及下发条件;在根据所述同质IO命令的相关参数判断接收到IO命令为同质IO命令时,收集所述同质IO命令;在所述下发条件发生时,将收集到的所述同质IO命令下发到对应的固件进行处理。借此,本发明提高了固态硬盘的读写性能。
文档编号G06F3/06GK103049215SQ20121052139
公开日2013年4月17日 申请日期2012年12月7日 优先权日2012年12月7日
发明者冯旭刚 申请人:记忆科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1