[0037] 为了使本领域技术人员能更好地理解本发明的技术方案,下面将结合附图以及具体实施方式,对本发明进行详细的介绍说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明的保护范围。
[0038] 此外,本发发明假设了上层文件系统对固态硬盘进行读写的最小单位为1个闪存页,即整页进行读或写。实际系统中,文件系统对固态硬盘进行读写的最小单位为1个扇区。通过对齐操作,可以很方便的将扇区访问转换为页访问,此发明中对此不再累述。
[0039] 本发明提出的固态硬盘读写请求并行处理方法,由地址映射模块、通道分配模块、通道队列模块、待处理队列模块,数据缓冲区和垃圾回收模块六部分组成,如图1所示。
[0040] 地址映射模块负责实现请求的逻辑地址到物理地址的映射,采用页级映射方式,由地址映射表和页分配模块组成。其中地址映射表记录逻辑页和物理页之间的映射关系,页分配模块给写请求分配新的物理页。读请求到来时,通过地址映射模块的地址映射表获取逻辑页对应的物理页;写请求到来时,通过地址映射模块的页分配模块对写请求中每个逻辑页分配新的物理页,并更新地址映射表。
[0041] 通道分配模块负责计算请求中每个页实际需要访问的通道。通道分配模块根据地址映射模块得到的物理页号计算每个页对应的通道,并将其插入对应通道的读写队列。
[0042] 通道队列模块由每个通道的队列组成,每个通道的队列又分为读请求队列和写请求队列,通道分配模块将读写访问请求以页为单位插入到通道的读写队列。
[0043] 待处理队列保存通道分配完成、但实际闪存读写未全部完成的请求,按先进先出的方式完成待处理队列的调度。
[0044] 数据缓冲区用来暂存从闪存中读出的数据。
[0045] 垃圾回收模块用来完成垃圾回收过程,采用主动垃圾回收和被动垃圾回收相结合的方式。
[0046] 本发明提出的固态硬盘读写请求并行处理方法,在实际处理访问请求时,涉及到预处理,访问闪存和垃圾回收三个过程。这三个过程的触发条件和处理流程如下:
[0047] 当有新的读写请求到达,且待处理队列不满时,触发预处理流程,其流程如图2所示,具体工作过程如下:
[0048] 步骤1,判断到达请求类型:若是读请求,执行步骤2;否则为写请求,执行步骤4。
[0049] 步骤2,调用地址映射模块,访问地址映射表,获取读请求每个逻辑页对应的物理页号PPN。
[0050] 步骤3,调用通道分配模块,根据每个页的PPN得到对应的闪存通道,然后将每个页插入到对应的闪存通道的读队列的队尾,最后执行步骤6。
[0051] 步骤4,调用地址映射模块的页分配模块,采用异地更新策略,为写请求的每个页分配新的物理页号PPN,并更新地址映射表,执行步骤5。
[0052] 步骤5,调用通道分配模块,根据每个页的PPN得到对应的闪存通道,然后将每个页插入对应闪存通道的写队列的队尾,最后执行步骤6。
[0053] 步骤6,将该请求插入到待处理队列的队尾,结束本次预处理。
[0054] 进一步,所述的步骤4中的写请求的页分配方法的具体流程如下:
[0055] P41,计算每个通道闪存块的擦除次数,按擦除次数从小到大进行排序;
[0056] P42,将写请求需要的物理页数N表示成N=n*C+q的形式(C为通道数,n为N/C的商,q为N/C的余数);
[0057] P43,按照擦除次数最小的通道优先分配写和最大化通道并行写的策略,先给每个通道分配n个页写,以实现最大化并行写;然后将q个页写分配给擦除次数最小的前q个通道,以均衡每个通道的磨损程度。
[0058] 当待处理队列不为空时,触发闪存访问流程,其实现流程如图3所示,具体工作过程如下:
[0059] 步骤1,判断待处理队列队首请求类型:若是读请求,执行步骤2;否则,执行步骤5。
[0060] 步骤2,判断请求队列队首读请求是否执行完成:若是,执行步骤4,否则执行步骤3。
[0061] 步骤3,将所有通道读队列队首的页从闪存中读出到数据缓冲区中,然后剔除所有通道读队列的队首,执行步骤2。
[0062] 步骤4,合并数据缓冲区中来自同一请求的读数据,并响应上层文件系统,剔除待处理队列队首请求,结束本次闪存访问操作。
[0063] 步骤5,判断请求队列队首写请求是否执行完成:若是,执行步骤7,否则执行步骤6。
[0064] 步骤6,将所有通道写队列队首的请求写入到对应通道下的物理页中,同时剔除所有通道写队列的队首,执行步骤5。
[0065] 步骤7,响应上层文件系统,剔除待处理队列队首请求,结束本次闪存访问操作。
[0066] 当待处理对列为空,且某个通道内空闲块的数量小于阈值TH1时,触发主动垃圾回收操作。当在进行闪存访问操作,且某个通道内空闲块的数量小于阈值TH2时,暂停闪存访问操作,触发被动垃圾回收操作。实际垃圾回收操作是选择该通道下包含最多无效页的数据块作为无效块,将无效块中的有效页迁移至同一个通道内的空闲块中,然后将无效块擦除。此外,为尽量少触发被动垃圾回收操作,TH1应该大于TH2。
[0067] 为了对本发明的并行处理流程进行进一步解释,结合具体的实际请求进行说明。为了方便描述,假设闪存通道数C=4,每个通道的闪存阵列包含128个物理页,即1‑128号物理页对应通道1,129‑256号物理页对应通道2,257‑384号物理页对应通道3,385‑512号物理页对应通道4。请求队列和通道读写队列都为空,通道按照闪存块擦除次数由小到大排列为
4,3,2,1。
[0068] 实施例1:预处理操作。
[0069] 队列中的预处理操作如图4所示。请求R1,W1,R2按照时间顺序到达,此处R代表读请求,W代表写请求,数字代表到达顺序。其处理过程如下所示:
[0070] C1,待处理队列未满,开始执行请求预处理操作,读请求R1(78,2)。此处78代表访问操作的开始逻辑页号,2代表访问两个页(下同)。根据图4所示的地址映射表,可得到实际需要访问的物理页号是66和301,执行C2。
[0071] C2,物理页66,301分别在通道1,3。通道分配模块将其分别插入通道1和通道3的读队列,执行C3。
[0072] C3,待处理队列未满,继续执行请求预处理操作,写请求W1(236,5)。地址映射模块将W1中前4个页分配到4个通道中,第5个页分配到通道4中。假设分配信息为236‑103,237‑247,238‑331,239‑500,240‑501。将映射信息更新至地址映射模块,执行C4。
[0073] C4,物理页103,247,331,500,501分别在通道1,2,3,4,4。通道分配模块将其分别插入通道1,通道2,通道3,通道4的写队列,执行C5。
[0074] C5,待处理队列未满,继续执行请求预处理操作,读请求R2(126,3)。访问地址映射模块得到地址映射信息为126‑79,127‑210,128‑407,执行C6。
[0075] C6,物理页79,210,407分别在在通道1,2,4。通道分配模块将其分别将其插入通道1,通道2和通道4的读队列,执行C7。
[0076] C7,待处理队列未满,但无后续请求,预处理操作执行结束。
[0077] 实施例2:闪存访问操作。
[0078] 队列中的读请求处理情况如图5所示,其处理过程如下所示:
[0079] C1,待处理队列不为空,队首为读请求R1,且R1未执行完成,因此读出4个通道读队列的队首页号,即分别从4个通道读出物理页66,210,301,407至数据缓冲区。将4个通道读队列队首请求剔除,此时R1执行完成,将R1从待处理队列剔除,合并缓冲区中R1的物理页66和301并上传,执行C2。
[0080] C2,待处理队列不为空,队首为读请求W1,且W1未执行完成,因此写入4个通道写队列队首,分别将数据写入4个通道下的103,247,331,500物理页。将4个通道写队列队首请求剔除,执行C3。
[0081] C3,待处理队列不为空,队首为读请求W1,且W1未执行完成,因此写入4个通道写队列队首,只有通道4的写队列不为空,将数据写入通道4下的501物理页。将通道4写队列队首剔除,此时W1执行完成,将W1从待处理队列剔除,执行C4。
[0082] C4,待处理队列不为空,队首为读请求R2,且R2未执行完成,因此读出4个通道读队列队首,只有通道1的读队列不为空,从通道1读出物理页79。将通道1读队列队首剔除,此时R2执行结束,将R2从待处理队列剔除,合并缓冲区中的物理页79,210,407并上传,执行C5。
[0083] C5,待处理队列为空,执行结束。
[0084] 以上所述仅为本发明的优先实施例而已,并不用于限制本发明,对本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同的替换、改进等,均应包含在本发明的保护范围之内。