一种面向NVMe的IO确定性优化策略方法与流程

文档序号:24398805发布日期:2021-03-27 00:39阅读:350来源:国知局
一种面向NVMe的IO确定性优化策略方法与流程
一种面向nvme的io确定性优化策略方法
技术领域
1.本发明涉及计算机科学技术,例如基于open channel ssd的面向nvme i/o确定性的调度器与缓存优化等,特别是一种面向nvme的io确定性优化策略方法。nvme(non

volatilememory express)是指非易失性存储系统及其标准或协议。i/o(或io,input/output)指输入/输出。open channel ssd(solid state drives)指开放通道固态驱动器或固态硬盘。


背景技术:

2.随着存储系统的不断发展,存储介质由于nand闪存的诞生带了一次巨大的飞跃。其优越的随机读写速度,逐步降低的单位容量价格,越来越受企业用户的青睐。固态硬盘ssd 的发展,伴随着闪存颗粒的位数扩大和闪存控制器的性能增强,因此sata协议的带宽限制成为了制约ssd持续读写性能的主要瓶颈。由sata过渡到直接使用pcie协议的nvme 协议于是成为了必然。虽然使用nand的nvm设备在不断的应用和发展,其固有缺陷越来越难以忽视,相比传统机械硬盘等块设备,nand闪存寿命普遍较低,颗粒的读写代价也不尽相同。闪存芯片从slc(single level cell,单层单元)发展到了现在的qlc(quad

levelcell,四层单元),带来的是断崖式的寿命减少和速度降低,数据的可靠性也越来越难以保证,ssd行业迫切的需要优秀的管理算法以尽可能缩小性能退化产生的影响。
3.由于nand的固态硬盘的物理特性,垃圾回收是其必不可少的操作,但是垃圾回收会带来巨大的时间和空间开销。垃圾回收操作必须占用固态硬盘内部的i/o资源,堵塞上层 i/o请求,因而可能会造成某一时刻的某些数据的读写延迟急剧增大,这一现象称为i/o抖动。另一个会引入i/o抖动的因素是用户间串扰。由于固态硬盘容量的不断增加,把它的容量进行分割,划分给不同的用户就成为了可能,但由于其随机写入的特性,用户间的读写操作可能会占用相同的通道,因而在某一用户进行访问时需阻塞其他用户的访问,对于被阻塞的用户来讲,同样引入了急剧增加的延迟。
4.目前业界对于延迟的解决方案包括:从提高垃圾回收效率方面、优化传统调度器和优化传统缓存管理算法。垃圾回收方面,现有研究从动态确定空闲页比率阈值、减小垃圾回收的阻塞单位和建立可中断的垃圾回收算法方面提高垃圾回收的效率,但都无法完全实现无垃圾回收时的性能。基于主机端与固态硬盘之间相对独立的性质,主机端无法知晓固态硬盘何时处于垃圾回收状态,因而还是无法完全消除垃圾回收操作带来的尾延迟。调度策略方面,现有研究倾向于为固态硬盘的并行度改进与设计调度算法,包括为并行单元单独创建请求队列和创建请求过滤器等方式。缓存管理方面,现有研究大部分集中于对传统 lru(least recently used,最近最少使用)替换算法的改进,减少缓存替换次数,提高缓存命中率。


技术实现要素:

5.针对闪存垃圾回收引起的nvme性能抖动问题,本发明提供一种面向nvme的io确定
性优化策略方法,通过基于集合和窗口划分进行优化,能够降低i/o请求的性能抖动等,从而提高垃圾回收效率并进一步延长固态硬盘寿命。
6.本发明的技术解决方案如下:
7.一种面向nvme的io确定性优化策略方法,其特征在于,包括以下步骤:步骤a,通过对nvme存储单元集合划分实现不同集合之间相互独立,以便在不同集合之间并行的进行读、写和垃圾回收操作;步骤b,面向划分集合后的nvme,提出新的i/o请求调度算法,避免发生垃圾回收与i/o请求访问冲突;步骤c,设计新的缓存管理算法感知nvme集合垃圾回收操作,最大限度的避免垃圾回收操作与i/o请求访问冲突的可能,降低i/o请求的性能抖动。
8.所述步骤a中还包括利用nvme自身存在若干并行单元,将并行单元进行划分得到相互独立的set组,确保set组之间的相互并行;划分后的set将拥有两种不同的时间窗口:一是完全不进行垃圾回收和磨损平衡操作的确定延迟窗口,即dtwin;二是为了维护set性能而进行上述操作的非确定窗口,即ndwin;确定延迟窗口可以保证窗口内没有任何控制器操作而导致的i/o阻塞;非确定窗口则会因为进行阻塞i/o的一系列操作而不能保证请求的低延迟处理;为分割而开的set组赋予属性,存储处于窗口内的时间,为属性设定阈值,设定超过阈值为触发器,触发窗口切换。
9.所述步骤b中还包括主机端将请求发送给pblk,经过集合特征判断后,由调度算法对请求队列进行调度,将操作处于确定延迟窗口的请求直接派遣,将操作处于非确定延迟窗口的请求进行延迟调度。
10.所述步骤c中新的缓存管理算法具有如下两个功能:一是基于set对缓存空间进行划分成缓存块,将缓存块与集合建立关联;二是管理算法set的pblk感知其时间窗口,当感知到相应集合处在非确定性时间窗口内,即该集合可能正在进行垃圾回收操作,则暂时避免将该数据替换出缓存。
11.所述优化策略方法包括以下环节:环节a,基于lightnvm设备划分拥有不同并行单元 lun的pblk对象,即集合,并为不同的集合划分不同的时间窗口;环节b,pblk系统加载调度器,调度文件系统的i/o请求;环节c,pblk系统加载缓存管理。
12.所述环节a包括采用以下步骤为pblk创建窗口的配置和基于时间对窗口切换进行控制:a1)pblk对象,即集合,初始化时分配三个窗口时间阈值,包括处于确定延迟窗口内的最小时间dtwin_min、处于确定延迟窗口的最大时间dtwin_max和处于非确定延迟窗口的最大时间ndwin_max;a2)集合创建后默认处于确定延迟窗口并开始记录时间;a3)当该集合处于dtwin时,垃圾回收线程将会进行窗口切换的判断;a4)判断时间、错误率、可用块等信息后垃圾回收线程会进行由dtwin到ndwin的切换;a5)当该集合处于ndwin时,垃圾回收线程同样会进行窗口切换的判断;a6)判断时间、可用块等信息后pblk会进行由 ndwin到dtwin的切换;a7)重复上述a3

a6。
13.所述环节a包括采用以下方式对时间进行判断:当集合处于dtwin时,垃圾回收进程在将集合切换至ndwin时会将当前集合所处窗口的时间与时间阈值进行比较;当集合处于 dtwin的时间小于等于dtwin_min时完全不进行窗口切换,即不开始垃圾回收操作;当集合处于dtwin的时间大于dtwin_min小于等于dtwin_max时,使用读取错误率和可用块限制进行窗口切换的判断;当集合处于dtwin的时间大于dtwin_max,强制进行dtwin到ndwin 的窗口切换;当集合处于ndwin的时间小于等于ndwin_max时,使用原有的,结束垃圾回收操作
的判断进行切换判断;当集合处于ndwin的时间大于ndwin_max时,强制将集合的时间窗口切换至dtwin。
14.所述环节b包括采用以下步骤的调度算法:b1)替换原有pblk的入口函数;b2)通用块层调用入口函数传入bio;b3)调度器获取所属集合的窗口属性;b4)当窗口处于确定时间窗口时,使用原有派遣逻辑进行派遣,当窗口处于非确定延迟窗口时,调用通用块层的 generic_make_rq()通知通用块层调度吓一条请求;b5)当新bio到达通用块层时循环上述 b2

b4;b1是pblk模块初始化时进行的步骤,b2

b4是pblk运行过程中持续的循环过程。
15.所述环节c包括采用以下步骤的缓存管理算法:c1)环形缓存初始化,根据lun数量确定缓存大小,初始化缓存入口地址,和数据写入、冲刷指针;c2)当写入请求写入环形缓存后,对集合所处窗口进行判断;c3)当集合处于确定时间窗口时,缓存正常进行写线程的唤醒工作,对缓存内数据进行冲刷,当集合处于非确定时间窗口时,暂停对写线程的唤醒,避免垃圾回收线程对写线程的调用。
16.本发明的技术效果是:本发明提出了基于lightnvm的集合划分、时间窗口实现、i/o 调度器以及缓存管理算法。本发明与现有技术相比,其主要优点是:1、提出了pblk(physicalblock device)的时间窗口实现:在已经实现的多pblk对象配置基础上,加入了时间窗口的概念,实现了pblk对象之间并行的窗口配置和切换,并为查询pblk所处窗口提供了系统接口。2、改进的调度算法:传统的调度算法一般基于固态硬盘整体并行度进行设计,但是在固态硬盘容量以及并行度持续增加的背景下,传统调度算法已经无法满足对集合划分以及进行窗口配置后的固态硬盘的i/o请求进行调度的要求。本发明中提出的改进的调度算法满足了这一要求,可以根据固态硬盘的集合划分以及窗口进行调度,减小i/o请求的尾延迟。3、改进的缓存管理算法:本发明提出的缓存管理算法,在现有缓存管理算法的命中率优势上,基于集合和窗口划分进行优化,提高垃圾回收效率并进一步延长固态硬盘寿命。
17.本发明和传统固态硬盘优化算法的区别在于:(1)减少尾延迟的思路不同:传统的减少请求平均延迟以及尾延迟的解决方案主要集中于优化垃圾回收算法以及减少请求之间的干扰方面,包括缩小垃圾回收阻塞单位、使垃圾回收过程可中断、过滤请求减少串扰等。我们采取了划分集合的方法,分隔开不同用户操作的空间,尽可能减少用户间串扰的发生,采取划分时间窗口的方法,实现i/o延迟的确定性,通过不进行影响性能的垃圾回收操作以尽可能降低dtwin内的请求延迟。(2)调度器的优化思路不同:传统调度器没有考虑集合划分的问题,我们在考虑了上述因素后提出了改进的调度器。(3)缓存管理算法优化思路不同:传统缓存管理算法集中于提升命中率,减小对固态硬盘块的读写次数,同样没有考虑集合以及窗口的配置,我们在考虑了上述因素后提出了将缓存与集合进行结合的改进方法。
附图说明
18.图1是本发明的整体结构图。
19.图2是确定延迟窗口切换到非确定延迟窗口的判断算法。
20.图3是非确定延迟窗口切换到确定延迟窗口的判断算法。
21.图4是调度器的结构示意图。
22.图5是pblk的缓存管理以及判断窗口进行唤醒的示意图。
23.图中所有字符标记的中文概念列示如下:pblk

开放通道的基于主机端的ftl实现;req
‑ꢀ
操作系统通用块层下发的请求;set

文中的集合概念;dtwin_min

处于确定时间窗口的最短时间;dtwin_max

处于确定时间窗口的最大时间;app

应用层程序;pblk_gc_ts

pblk 的垃圾回收线程;pblk_write_ts

pblk的写线程;pblk_cach

pblk的缓存;ndwin

非确定时间窗口;generic_make_rq

通用块层的bio下发接口。
具体实施方式
24.以下结合附图(图1

图5)和实施例对本发明进行说明。
25.参考图1至图5,一种面向nvme的io确定性优化策略方法,包括以下步骤:步骤a,通过对nvme存储单元集合划分实现不同集合之间相互独立,以便在不同集合之间并行的进行读、写和垃圾回收操作;步骤b,面向划分集合后的nvme,提出新的i/o请求调度算法,避免发生垃圾回收与i/o请求访问冲突;步骤c,设计新的缓存管理算法感知nvme集合垃圾回收操作,最大限度的避免垃圾回收操作与i/o请求访问冲突的可能,降低i/o请求的性能抖动。所述步骤a中还包括利用nvme自身存在若干并行单元,将并行单元进行划分得到相互独立的set组,确保set组之间的相互并行;划分后的set将拥有两种不同的时间窗口:一是完全不进行垃圾回收和磨损平衡操作的确定延迟窗口,即dtwin;二是为了维护 set性能而进行上述操作的非确定窗口,即ndwin;确定延迟窗口可以保证窗口内没有任何控制器操作而导致的i/o阻塞;非确定窗口则会因为进行阻塞i/o的一系列操作而不能保证请求的低延迟处理;为分割而开的set组赋予属性,存储处于窗口内的时间,为属性设定阈值,设定超过阈值为触发器,触发窗口切换。所述步骤b中还包括主机端将请求发送给pblk,经过集合特征判断后,由调度算法对请求队列进行调度,将操作处于确定延迟窗口的请求直接派遣,将操作处于非确定延迟窗口的请求进行延迟调度。所述步骤c中新的缓存管理算法具有如下两个功能:一是基于set对缓存空间进行划分成缓存块,将缓存块与集合建立关联;二是管理算法set的pblk感知其时间窗口,当感知到相应集合处在非确定性时间窗口内,即该集合可能正在进行垃圾回收操作,则暂时避免将该数据替换出缓存。
26.所述优化策略方法包括以下环节:环节a,基于lightnvm设备划分拥有不同并行单元 lun的pblk对象,即集合,并为不同的集合划分不同的时间窗口;环节b,pblk系统加载调度器,调度文件系统的i/o请求;环节c,pblk系统加载缓存管理。所述环节a包括采用以下步骤为pblk创建窗口的配置和基于时间对窗口切换进行控制:a1)pblk对象,即集合,初始化时分配三个窗口时间阈值,包括处于确定延迟窗口内的最小时间dtwin_min、处于确定延迟窗口的最大时间dtwin_max和处于非确定延迟窗口的最大时间ndwin_max;a2) 集合创建后默认处于确定延迟窗口并开始记录时间;a3)当该集合处于dtwin时,垃圾回收线程将会进行窗口切换的判断;a4)判断时间、错误率、可用块等信息后垃圾回收线程会进行由dtwin到ndwin的切换;a5)当该集合处于ndwin时,垃圾回收线程同样会进行窗口切换的判断;a6)判断时间、可用块等信息后pblk会进行由ndwin到dtwin的切换; a7)重复上述a3

a6。所述环节a包括采用以下方式对时间进行判断:当集合处于dtwin时,垃圾回收进程在将集合切换至ndwin时会将当前集合所处窗口的时间与时间阈值进行比较;当集合处于dtwin的时间小于等于dtwin_min时完全不进行窗口切换,即不开始垃圾回收操作;当集合处于dtwin的时
间大于dtwin_min小于等于dtwin_max时,使用读取错误率和可用块限制进行窗口切换的判断;当集合处于dtwin的时间大于dtwin_max,强制进行 dtwin到ndwin的窗口切换;当集合处于ndwin的时间小于等于ndwin_max时,使用原有的,结束垃圾回收操作的判断进行切换判断;当集合处于ndwin的时间大于ndwin_max时,强制将集合的时间窗口切换至dtwin。所述环节b包括采用以下步骤的调度算法:b1)替换原有pblk的入口函数;b2)通用块层调用入口函数传入bio;b3)调度器获取所属集合的窗口属性;b4)当窗口处于确定时间窗口时,使用原有派遣逻辑进行派遣,当窗口处于非确定延迟窗口时,调用通用块层的generic_make_rq()通知通用块层调度吓一条请求;b5)当新bio到达通用块层时循环上述b2

b4;b1是pblk模块初始化时进行的步骤,b2

b4是pblk 运行过程中持续的循环过程。所述环节c包括采用以下步骤的缓存管理算法:c1)环形缓存初始化,根据lun数量确定缓存大小,初始化缓存入口地址,和数据写入、冲刷指针; c2)当写入请求写入环形缓存后,对集合所处窗口进行判断;c3)当集合处于确定时间窗口时,缓存正常进行写线程的唤醒工作,对缓存内数据进行冲刷,当集合处于非确定时间窗口时,暂停对写线程的唤醒,避免垃圾回收线程对写线程的调用。
27.本文将采用基于open channel ssd的lightnvm模拟器搭建,open channel ssd的主要特点是将nvme的控制器部分移交给主机端,也就是说将数据布局和垃圾回收、磨损平衡等算法交给主机端进行处理。该设计方式的最大优势在于,主机端可以实时明确的知晓固态硬盘内部各处的状态,有助于打通主机端与nvme之间的隔离,可以达到可预测延迟的效果,方案设计整体架构如图1所示。
28.1、面向i/o确定性的nvme集合划分优化策略
29.nvme的集合划分是本文的一个基础性步骤。nvme自身存在若干并行单元,将并行单元进行划分可以得到相互独立的set组。划分后的set将拥有两种不同的时间窗口:一是完全不进行垃圾回收和磨损平衡操作的确定延迟窗口,即dtwin;二是为了维护set性能而进行上述操作的非确定窗口,即ndwin。因为set保有nvme的并行单元,因此可以确保set之间的相互并行。确定延迟窗口可以保证窗口内没有任何控制器操作而导致的i/o阻塞;非确定窗口则会因为进行阻塞i/o的一系列操作而不能保证请求的低延迟处理。除此之外,为分割而开的set组赋予属性,存储处于窗口内的时间,为属性设定阈值,设定超过阈值为触发器,触发窗口切换。
30.本文采用在ubuntu主机上安装qemu虚拟机的qemu

nvme分支,用于支持nvme设备,在其上安装虚拟机系统,并模拟一块具有多个并行单元的ocssd设备。并且为了使虚拟机子系统支持lightnvm以及pblk,并对子系统的内核进行了替换,使用open channel ssd 官方提供的内核进行编译安装。
31.对于研究点一的具体方案设计是:将整块nvme划分为多个逻辑单元集合,以实现不同集合之间相互独立,在不同集合可以并行的进行读、写和垃圾回收等操作。在此基础上,将集合进行标签化,即为集合赋予确定性和非确定性时间窗口。处在确定性时间窗口的集合一定不会发生垃圾回收操作,即保证了此时的集合不会发生垃圾回收与i/o请求访问冲突;处在非确定性时间窗口的集合在有可能发生垃圾回收等会带来i/o请求响应延迟的操作。由lightnvm的基于host端的控制器pblk为nvme容量划分set并管理set的各种属性以及窗口切换。
32.在步骤二的具体实现内容中,修改pblk内部代码,引入了时间窗口这一概念。在pblk 原有的判断是否进入垃圾回收进程的基础上,加入了对经过时间的判断。如图2与图3所示,是步骤二中关于窗口切换的伪代码。包括步骤如下:
33.步骤2.1:pblk对象,即集合,初始化时分配三个窗口时间阈值,包括处于确定延迟窗口内的最小时间(dtwin_min)、处于确定延迟窗口的最大时间(dtwin_max)和处于非确定延迟窗口的最大时间(ndwin_max);
34.步骤2.2:集合创建后默认处于确定延迟窗口并开始记录时间;
35.步骤2.3:当该集合处于dtwin时,垃圾回收线程将会进行窗口切换的判断;
36.步骤2.4:判断时间、错误率、可用块等信息后垃圾回收线程会进行由dtwin到ndwin 的切换;
37.步骤2.5:当该集合处于ndwin时,垃圾回收线程同样会进行窗口切换的判断;
38.步骤2.6:判断时间、可用块等信息后pblk会进行由ndwin到dtwin的切换;
39.步骤2.7:重复上述2.3

2.6步骤。
40.2、面向nvme性能抖动的i/o调度算法
41.本文中实现的调度算法替换了原有入口函数,的因为采用了将调度算法写进pblk的方法,新构建的调度算法可以很轻松的获取当前pblk实例的各种信息,包括当前pblk实例所处的时间窗口、pblk内存储的闪存转换信息、时间窗口阈值等等。
42.在原有的pblk结构体基础上,优化策略增加了用于标识当前pblk实例拥有的调度算法结构体,并在实例初始化时对调度算法结构体进行初始化,其初始化步骤与pblk的其余工作结构体类似。为了保证与原有代码的兼容性,采取替换pblk入口函数的办法,将原有的 pblk入口函数pblk_make_rq()替换为调度算法的pblk_sche_make_rq()。为了更好的进行请求的调度,在上文中提到的调度算法中编写了具体的调度算法,遍历调用上述入口函数插入到请求队列的请求,根据调度器所属的pblk实例的窗口状态,针对性的对请求进行调度。当pblk实例处于dtwin时,调度算法的入口函数会先进行窗口判断,而后对读、写请求进行派遣,将请求交由nvme设备进行响应;当pblk实例处于ndwin时,算法会将请求退回通用块层,通知上层调度属于设备的队列里的下一条bio,以达到比原有设计更加优越的iops与响应延迟性能。
43.具体步骤如下:
44.步骤3.1:替换原有pblk的入口函数;
45.步骤3.2:通用块层调用入口函数传入bio;
46.步骤3.3:调度器获取所属集合的窗口属性;
47.步骤3.4:当窗口处于确定时间窗口时,使用原有派遣逻辑进行派遣。当窗口处于非确定延迟窗口时,调用通用块层的generic_make_rq()通知通用块层调度吓一条请求;
48.步骤3.5:当新bio到达通用块层时循环上述3.2

3.4步骤。
49.步骤3.1是pblk模块初始化时进行的步骤,步骤3.2

3.4是pblk运行过程中持续的循环过程。
50.3、面向i/o性能抖动的nvme缓存管理算法
51.该管理算法具有如下两个功能。一是基于set对缓存空间进行划分成缓存块,将缓存块与集合建立关联。二是管理算法set的pblk感知其时间窗口,当感知到相应集合处在非
确定性时间窗口内,即该集合可能正在进行垃圾回收操作,则暂时避免将该数据替换出缓存。
52.pblk代码中对于读取和写入的实现是使用两个单独的线程,读取线程可以直接向下调用 nvm驱动部分进行访问,写入线程不能直接获取经过pblk入口函数进入的bio数据,而是需要通过环形缓存以生产者消费者模型进行数据存入。在需要写入线程进行写入时,程序可以调用pblk_write_kick()对pblk的写线程进行强制唤醒,唤醒后的写线程会根据需要对环形缓存内的数据进行冲刷,即向下调用nvme驱动将环形缓存的内容写入固态硬盘存储空间内。本文中所具体更改的就是数据插入环形缓存时唤醒写线程进行数据换出的逻辑,当缓存检测到当前pblk实例处于ndwin时,将避免唤醒写线程对用户数据进行写入闪存的操作。如图5所示,当一个写请求被传入pblk时,pblk的缓冲在进行完数据插入后对pblk 实例所处窗口进行查询,当垃圾回收线程在正在占用缓存区域以及写线程时,避免对cache 对写线程的唤醒,减少写入流程对垃圾回收过程的影响。因为在pblk的设计中,写线程是环形缓存的一个单独的消费者,pblk的垃圾回收线程同样使用环形缓存进行数据的暂存操作,所以当用户数据插入环形缓存时进行窗口判断可以在最大程度上减少用户唤醒写线程对垃圾回收唤醒写线程的影响,提高垃圾回收的效率,减少垃圾回收的时间,即减少固态硬盘运行过程中处于ndwin的时间,提高整体延迟和iops性能。
53.具体步骤是:
54.步骤4.1:环形缓存初始化,根据lun数量确定缓存大小,初始化缓存入口地址,和数据写入、冲刷指针;
55.步骤4.2:当写入请求写入环形缓存后,对集合所处窗口进行判断;
56.步骤4.3:当集合处于确定时间窗口时,缓存正常进行写线程的唤醒工作,对缓存内数据进行冲刷,当集合处于非确定时间窗口时,暂停对写线程的唤醒,避免垃圾回收线程对写线程的调用。
57.针对闪存垃圾回收引起的nvme性能抖动问题,本发明将从如下三个层面开展闪存垃圾回收操作与i/o请求访问冲突解决方案的研究工作。通过合理地nvme存储单元集合划分,实现不同集合之间相互独立,在不同集合并行的进行读、写和垃圾回收操作;面向划分集合后的nvme,提出新的i/o请求调度算法,避免发生垃圾回收与i/o请求访问冲突;设计新的缓存管理算法感知nvme集合垃圾回收操作,最大限度的避免垃圾回收操作与i/o 请求访问冲突的可能,降低i/o请求的性能抖动。
58.本发明的技术方案是:首先,通过合理地nvme存储单元集合划分,实现不同集合之间相互独立,不同集合间可以并行的进行读、写和垃圾回收操作。nvme自身存在若干并行单元,将并行单元进行划分可以得到相互独立的set组。划分后的set将拥有两种不同的时间窗口:一是完全不进行垃圾回收和磨损平衡操作的确定延迟窗口,即dtwin;二是为了维护set性能而进行上述操作的非确定窗口,即ndwin。因为set保有nvme的并行单元,因此可以确保set之间的相互并行。确定延迟窗口可以保证窗口内没有任何控制器操作而导致的i/o阻塞;非确定窗口则会因为进行阻塞i/o的一系列操作而不能保证请求的低延迟处理。除此之外,为分割而开的set组赋予属性,存储处于窗口内的时间,为属性设定阈值,设定超过阈值为触发器,触发窗口切换。其次,面向划分集合后的nvme,提出新的i/o请求调度算法,避免发生垃圾回收与i/o请求访问冲突。主机端将请求发送给pblk,经过集合特征判断后,由
调度算法对请求队列进行调度,将操作处于确定延迟窗口的请求直接派遣,将操作处于非确定延迟窗口的请求进行延迟调度。最后,设计新的缓存管理算法感知nvme集合垃圾回收操作,最大限度的避免垃圾回收操作与i/o请求访问冲突的可能,降低i/o请求的性能抖动。该管理算法具有如下两个功能。一是基于set对缓存空间进行划分成缓存块,将缓存块与集合建立关联。二是管理算法set的pblk感知其时间窗口,当感知到相应集合处在非确定性时间窗口内,即该集合可能正在进行垃圾回收操作,则暂时避免将该数据替换出缓存。
59.主要包括以下研究点:研究点1:基于lightnvm设备划分拥有不同并行单元lun的 pblk对象,即集合,并为不同的集合划分不同的时间窗口;研究点2:pblk系统加载调度器,调度文件系统的i/o请求;研究点3:pblk系统加载缓存管理。其中,研究点1包括为pblk 创建窗口的配置和基于时间对窗口切换进行控制,具体判断如下:步骤1:pblk对象,即集合,初始化时分配三个窗口时间阈值,包括处于确定延迟窗口内的最小时间(dtwin_min)、处于确定延迟窗口的最大时间(dtwin_max)和处于非确定延迟窗口的最大时间 (ndwin_max);步骤2:集合创建后默认处于确定延迟窗口并开始记录时间;步骤3:当该集合处于dtwin时,垃圾回收线程将会进行窗口切换的判断;步骤4:判断时间、错误率、可用块等信息后垃圾回收线程会进行由dtwin到ndwin的切换;步骤5:当该集合处于ndwin时,垃圾回收线程同样会进行窗口切换的判断;步骤6:判断时间、可用块等信息后pblk会进行由ndwin到dtwin的切换;步骤2.7:重复上述2.3

2.6步骤。
60.研究点1中对时间的具体判断如下:当集合处于dtwin时,垃圾回收进程在将集合切换至ndwin时会将当前集合所处窗口的时间与时间阈值进行比较。当处于dtwin的时间小于等于dtwin_min时完全不进行窗口切换,即不开始垃圾回收操作;当处于dtwin 的时间大于dtwin_min小于等于dtwin_max时,使用读取错误率和可用块限制进行窗口切换的判断;当处于dtwin的时间大于dtwin_max,强制进行dtwin到ndwin 的窗口切换。当集合处于ndwin的时间小于等于ndwin_max时,使用原有的,结束垃圾回收操作的判断进行切换判断,当处于ndwin的时间大于ndwin_max时,强制将集合的时间窗口切换至dtwin。
61.研究点2中调度的算法为:步骤2.1:替换原有pblk的入口函数;步骤2.2:通用块层调用入口函数传入bio;步骤2.3:调度器获取所属集合的窗口属性;步骤2.4:当窗口处于确定时间窗口时,使用原有派遣逻辑进行派遣。当窗口处于非确定延迟窗口时,调用通用块层的generic_make_rq()通知通用块层调度吓一条请求;步骤2.5:当新bio到达通用块层时循环上述2.2

2.4步骤。步骤2.1是pblk模块初始化时进行的步骤,步骤2.2

2.4是pblk 运行过程中持续的循环过程。
62.研究点3中的缓存管理算法为:步骤3.1:环形缓存初始化,根据lun数量确定缓存大小,初始化缓存入口地址,和数据写入、冲刷指针;步骤3.2:当写入请求写入环形缓存后,对集合所处窗口进行判断;步骤3.3:当集合处于确定时间窗口时,缓存正常进行写线程的唤醒工作,对缓存内数据进行冲刷,当集合处于非确定时间窗口时,暂停对写线程的唤醒,避免垃圾回收线程对写线程的调用。
63.本发明说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。在此指明,以上叙述有助于本领域技术人员理解本发明创造,但并非限制本发明创造的保护范围。任何没有脱离本发明创造实质内容的对以上叙述的等同替换、修饰改进和/或删繁从简而进行的实施,均落入本发明创造的保护范围。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1