CN103336669B - 一种基于固态盘内部并行性的i/o调度方法及调度器 - Google Patents
一种基于固态盘内部并行性的i/o调度方法及调度器 Download PDFInfo
- Publication number
- CN103336669B CN103336669B CN201310190301.0A CN201310190301A CN103336669B CN 103336669 B CN103336669 B CN 103336669B CN 201310190301 A CN201310190301 A CN 201310190301A CN 103336669 B CN103336669 B CN 103336669B
- Authority
- CN
- China
- Prior art keywords
- request
- solid
- region
- state disk
- write
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Signal Processing For Digital Recording And Reproducing (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于固态盘内部并行性的I/O调度方法,包括:将SSD的逻辑地址空间划分为N个具有相同大小的区域,对每个区域进行顺序编号,并为每个区域分配一个用于管理区域的子队列,每个子队列中包括读请求FIFO队列、写请求FIFO队列、读请求红黑树、以及写请求红黑树,设置区域计数器i=1,判断第i个区域的读请求FIFO队列中是否有读请求,或写请求FIFO队列中是否有写请求,如果有读请求或写请求,则判断第i个区域中上一次服务的请求是否为写请求,如果是则,判断第i个区域中读请求FIFO队列和读请求红黑树中是否有读请求。本发明能够合理适度地利用固态盘内部的并行性以及避免读写请求之间的相互干扰,从而能够提高整个固态盘系统的I/O性能和使用寿命。
Description
技术领域
本发明属于固态盘存储技术领域,更具体地,涉及一种基于固态盘内部并行性的I/O调度方法及调度器。
背景技术
近年来,由于半导体技术的日益成熟,固态盘(SolidStateDisk,简称SSD)技术在存储系统中的使用越来越广泛。固态盘相对于传统的机械式磁盘(HardDiskDrive,简称HDD),有如下特点:
固态盘的总体性能要优于机械式磁盘,尤其是随机访问性能。HDD磁盘内部的机械部件寻道操作是其性能低下的主要原因,相反,固态盘内部没有机械部件,没有寻道操作,其主要开销来自FTL层(FlashTranslationLayer:闪存转换层)逻辑地址到物理地址的翻译过程,而与访问数据的实际物理地址无关,因而具有良好的随机性能。
固态盘的并行性能要优于机械式磁盘的并行性能。固态盘内部由多芯片、多通道组成,通道和芯片之间都可以并行地操作以提高系统整体性能。而磁头不能并行地对磁盘进行访问,相反,若应用具有高并发度会导致磁头不停地“抖动(Thrashing)”而降低性能。
机械式磁盘的读写访问具有对称性,而固态盘的读写访问具有很强的非对称性,即机械式磁盘的数据读写都需要进行相同的磁盘寻道操作,因而耗费大致相当的时间(毫秒级),而固态盘的数据读写性能之间相差一到两个数量级,且读写操作之间具有很强的干扰影响。
机械式磁盘具有几乎无限长的寿命,而固态盘由于擦写次数有限导致其使用寿命有限,而且其寿命与所经历的总写入数据量有关。写入的数据总量越多,则其消耗的寿命也越大。
然而,现有的系统软件大多都是面向传统机械磁盘(HDD)设计和优化的,它们充分考虑了HDD的物理操作特性,当固态盘(SSD)取代传统机械磁盘,原有系统针对传统机械磁盘的优化将不再适用。
发明内容
针对现有技术的以上缺陷或改进需求,本发明提供了一种基于固态盘内部并行性的I/O调度方法,其目的在于根据SSD的特点,在内核块层进行优化,使得到达固态盘的I/O请求呈现更强的顺序性,能够合理适度地利用固态盘内部的并行性以及避免读写请求之间的相互干扰,从而能够提高整个固态盘系统的I/O性能和使用寿命。
为实现上述目的,按照本发明的一个方面,提供了一种基于固态盘内部并行性的I/O调度方法,包括以下步骤:
(1)将SSD的逻辑地址空间划分为N个具有相同大小的区域,对每个区域进行顺序编号,并为每个区域分配一个用于管理区域的子队列,每个子队列中包括读请求FIFO队列、写请求FIFO队列、读请求红黑树、以及写请求红黑树;
(2)设置区域计数器i=1;
(3)判断第i个区域的读请求FIFO队列中是否有读请求,或写请求FIFO队列中是否有写请求,如果有读请求或写请求,则转入步骤(4),否则转入步骤(15);
(4)判断第i个区域中上一次服务的请求是否为写请求,如果是则进入步骤(5),否则进入步骤(10);
(5)判断第i个区域中读请求FIFO队列和读请求红黑树中是否有读请求,如果有则进入步骤(6),否则进入步骤(11);
(6)判断第i个区域中读请求FIFO队列中是否存在超时的请求,若存在则转入步骤(7),否则转入步骤(8);
(7)从读请求FIFO队列中提取该超时的读请求,然后发送到固态盘驱动器中,然后转入步骤(9);
(8)从读请求红黑树中选择与上一次读请求位置相邻的请求,并将其发送到固态盘的驱动器中;
(9)判断已经发送到固态盘驱动器中的总读请求数目是否超过了一阀值,若是则转入步骤(15),否则返回步骤(6);
(10)判断第i个区域中写请求FIFO队列和写请求红黑树中是否有未处理的请求,如果有则进入步骤(11),否则返回步骤(6)。
(11)判断第i个区域中写请求FIFO队列中是否存在超时的写请求,若存在转入步骤(12),否则转入步骤(13);
(12)从写请求FIFO队列中提取该超时的写请求,然后发送到固态盘驱动器中,转入步骤(14);
(13)从写请求红黑树中选择与上一次写请求位置相邻的写请求发送到固态盘驱动器中;
(14)判断已经发送到固态盘驱动器中的总写请求数目是否超过了其阀值,若是则转入步骤(15),否则返回步骤(11);
(15)执行i自加1,并判断是否有i<=N,如果是则返回步骤(3),否则过程结束。
优选地,N值的确定方法为:首先获取固态盘总容量大小C,然后根据黑盒测试所设定的区域大小R计算出固态盘需要的区域数其中表示向上取整。
优选地,步骤(1)中,在任意时刻,当新的块I/O操作到达时,检查对应区域的子队列,若存在与其访问位置相邻的请求,则将该块I/O操作与位置相邻的请求合并成一个连续的大请求;若不存在,则为该块I/O操作分配一个新的请求,然后将该请求插入到对应的子队列的相应FIFO队列和红黑树中。
优选地,步骤(6)中,若该请求的当前时间大于该请求的Deadline字段中记录的时间点,则说明该请求超时;否则说明该请求没有超时。
优选地,步骤(8)具体为,在读请求红黑树中查找请求的“Start”字段等于上一次读请求的“End”字段加1的请求。
优选地,步骤(13)具体为,在写请求红黑树中查找请求的Start字段等于上一次写请求的End字段加1的请求。
按照本发明的另一方面,提供了一种使用上述I/O调度方法的调度器,包括:
第一模块,用于将SSD的逻辑地址空间划分为N个具有相同大小的区域,对每个区域进行顺序编号,并为每个区域分配一个用于管理区域的子队列,每个子队列中包括读请求FIFO队列、写请求FIFO队列、读请求红黑树、以及写请求红黑树;
第二模块,用于设置区域计数器i=1;
第三模块,用于判断第i个区域的读请求FIFO队列中是否有读请求,或写请求FIFO队列中是否有写请求,如果有读请求或写请求,则转入步骤(4),否则转入步骤(15);
第四模块,用于判断第i个区域中上一次服务的请求是否为写请求,如果是则进入步骤(5),否则进入步骤(10);
第五模块,用于判断第i个区域中读请求FIFO队列和读请求红黑树中是否有读请求,如果有则进入步骤(6),否则进入步骤(11);
第六模块,用于判断第i个区域中读请求FIFO队列中是否存在超时的请求,若存在则转入步骤(7),否则转入步骤(8);
第七模块,用于从读请求FIFO队列中提取该超时的读请求,然后发送到固态盘驱动器中,然后转入步骤(9);
第八模块,用于从读请求红黑树中选择与上一次读请求位置相邻的请求,并将其发送到固态盘的驱动器中;
第九模块,用于判断已经发送到固态盘驱动器中的总读请求数目是否超过了一阀值,若是则转入步骤(15),否则返回步骤(6);
第十模块,用于判断第i个区域中写请求FIFO队列和写请求红黑树中是否有未处理的请求,如果有则进入步骤(11),否则返回步骤(6);
第十一模块,用于判断第i个区域中写请求FIFO队列中是否存在超时的写请求,若存在转入步骤(12),否则转入步骤(13);
第十二模块,用于从写请求FIFO队列中提取该超时的写请求,然后发送到固态盘驱动器中,转入步骤(14);
第十三模块,用于从写请求红黑树中选择与上一次写请求位置相邻的写请求发送到固态盘驱动器中;
第十四模块,用于判断已经发送到固态盘驱动器中的总写请求数目是否超过了其阀值,若是则转入步骤(15),否则返回步骤(11);
第十五模块,用于执行i自加1,并判断是否有i<=N,如果是则返回步骤(3),否则过程结束。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:
(1)充分利用固态盘的内部并行性能:通过将逻辑地址空间划分为固定大小的区域并且轮流地服务所有区域,调度器能够有效地控制发送到区域中上的并发请求数,既能充分利用区域内部可用的并行性,又能灵活地选择发送其它区域上的请求,从而避免在某一时间段内向同一区域上发送过多请求,导致性能下降。
(2)充分利用固态盘良好的随机读写功能:读写混合请求之间存在严重的相互干扰,并且会导致固态盘整体性能严重下降。为了避免读写请求的相互干扰,调度器在服务某个区域队列时,每次只发送一定量的同一类型请求(读或写),并在下次服务该队列时发送另一类型请求。这样可以保证某一区域在同一时间段内只有一种类型的请求在上面执行,避免了读写请求之间的相互干扰。
(3)提高固态盘的使用寿命:固态盘由于擦写次数有限导致其使用寿命有限,而且其寿命与所经历的总写入数据量有关。每次一个新的块I/O操作到达I/O调度层时,先检查等待队列中是否存在与该I/O操作访问位置相邻的请求,若存在相邻的请求则将该块操作与相邻的请求合并成一个连续的大请求,这样可以减少写入的次数,达到提高固态盘使用寿命的效果。
附图说明
图1是Linux操作系统固态盘访问的I/O路径及详细的IO调度器结构示意图。
图2是本发明基于固态盘内部并行性的I/O调度方法的流程图。
图3是固态盘性能与Qdep和区域的关系图。
图4是不同调度算法的性能比较。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
如图1所示,上层应用访问固态盘(SolidStateDisk,简称SSD)上的数据,需要经过文件系统层、通用块层、I/O调度层、固态盘驱动层,并最终到达固态盘。文件系统层用于完成文件访问的地址转换过程,通用块层为块设备访问提供了一系列抽象接口,I/O调度层的功能是确定以何种顺序将队列中的请求下发到固态盘设备驱动程序中以完成数据访问,固态盘驱动层完成对固态盘的访问操作。本发明基于固态盘内部并行性的I/O调度器工作在I/O调度层。
本发明的整体思路在于,其充分考虑了固态盘中一定大小的逻辑地址空间中存在着可利用的最优并行度,而且当并发的请求数超过最优并行度时系统性能反而会有所下降。为了有效地利用各个逻辑地址空间内的并行性以及逻辑地址空间之间的并行性,本发明将固态盘的逻辑地址空间划分为若干个相同大小的区域(Region),并通过黑盒测试固态盘整体性能的方法,确定该区域对应的最优并发度,同时为每个区域创建一个专门的子队列来管理访问本区域的所有请求。如图1中的队列R1,R2,...,Rn所示,右上图为每个子队列的内部结构示意图。内核以轮转(Round-robin)方式对所有的子队列服务,将到达对应区域的请求下发到磁盘驱动器中。
在每个区域的内部结构中,如图1右上角所示,两棵红黑树分别将到达对应区域内的读写请求按地址顺序排序;每个请求在到达时都赋予了一个最晚需要被调度的时间期限(Deadline),然后检查等待队列中是否存在与该I/O操作访问位置相邻的请求,若存在相邻的请求则将该块操作与相邻的请求合并成一个连续的大请求;若不存在相邻的请求,则为该块分配一个新的请求,并插入到对应的先进先出(FIFO)队列和红黑树中。选择请求时,若不存在超时请求,则从对应红黑树中选择与前一请求位置相邻的请求发送;若存在超时了的请求,则优先选择超时了的请求发送。
如图2所示,本发明基于固态盘内部并行性的I/O调度方法包括以下步骤:
(1)将SSD的逻辑地址空间划分为N个具有相同大小的区域,对每个区域进行顺序编号,并为每个区域分配一个用于管理区域的子队列,每个子队列中包括读请求FIFO队列、写请求FIFO队列、读请求红黑树、以及写请求红黑树,任意时刻,当新的块I/O操作到达时,检查对应区域的子队列,若存在与其访问位置相邻的请求,则将该块I/O操作与位置相邻的请求合并成一个连续的大请求;若不存在,则为该块I/O操作分配一个新的请求,然后将该请求插入到对应的子队列的相应FIFO队列和红黑树中;其中N为正整数,其确定方法为:首先获取固态盘总容量大小,然后根据黑盒测试所设定的区域大小计算出固态盘需要的区域数。举例而言,假设固态盘的总容量为CGB,黑盒测试所设定的区域大小为RGB,则需要划分个区域,其中表示向上取整;
(2)设置区域计数器i=1;
(3)判断第i个区域的读请求FIFO队列中是否有读请求,或写请求FIFO队列中是否有写请求,如果有读请求或写请求,则转入步骤(4),否则转入步骤(15);
(4)判断第i个区域中上一次服务的请求是否为写请求,如果是则进入步骤(5),否则进入步骤(10);具体而言,如果该请求中的“Direction”字段等于WRITE(即该字段等于1),则表示上一次服务的请求是写请求,如果该字段等于READ(即该字段等于0),则上一次服务的请求是读请求;
本步骤的优点在于,避免读写混合请求造成的性能下降,并保证读写请求交替被服务,不至于造成读请求或写请求处于饥饿状态(即请求长期不被服务);
(5)判断第i个区域中读请求FIFO队列和读请求红黑树中是否有读请求,如果有则进入步骤(6),否则进入步骤(11);
(6)判断第i个区域中读请求FIFO队列中是否存在超时的请求,若存在则转入步骤(7),否则转入步骤(8);具体而言,每个请求到达时,该请求的Deadline字段都会被赋予一个最晚被服务的时间点,若当前时间大于该请求的Deadline字段中记录的时间点,则说明该请求超时;否则说明该请求没有超时;
本步骤的优点在于,优先服务超时的读请求,避免某一读请求长期得不到服务;
(7)从读请求FIFO队列中提取该超时的读请求,然后发送到固态盘驱动器中,然后转入步骤(9);
(8)从读请求红黑树中选择与上一次读请求位置相邻的请求,并将其发送到固态盘的驱动器中;具体而言,在读请求红黑树中查找请求的“Start”字段等于上一次读请求的“End”字段加1的请求;
本步骤的优点在于,通过请求的合并,将随机请求可以尽量的转化为顺序请求,大大地提高了系统的性能;
(9)判断已经发送到固态盘驱动器中的总读请求数目是否超过了一阀值,若是则转入步骤(15),否则返回步骤(6);具体而言,阈值的大小是通过黑盒测试确定的第i个区域的最优并行度;
采用Intel公司开发的OpenStorageToolkit工具,通过改变向测试对象发送的最大请求数参数(Qdep)和请求访问的区域大小来黑盒测试固态盘的并行性能(即最优并行度)。图3显示了固态盘性能与Qdep和区域的关系,从图中可以得知,对于固定大小的区域,随着并发请求数量的增加固态盘总体性能先增加到最大点,然后逐渐减小(1G和2G工作集除外,因为空间太小其可利用的并行性非常有限)。这说明在达到性能最优点之前,增加并发请求数可以利用固态盘内部的并行性提高性能,而且对于不同大小的区域,存在不同的最优并发度可以产生最优性能。比如4GB和8GB工作集对应的最优并发度分别是8和16。当发送到磁盘的请求数超过最优并发度时,固态盘的性能反而会下降。
本步骤的优点在于,充分利用固态盘的并行性,同时避免过度的并行导致整体性能下降;
(10)判断第i个区域中写请求FIFO队列和写请求红黑树中是否有未处理的请求,如果有则进入步骤(11),否则返回步骤(6);
(11)判断第i个区域中写请求FIFO队列中是否存在超时的写请求,若存在转入步骤(12),否则转入步骤(13);判断超时请求的方法与上述步骤(6)完全相同,再此不再赘述;
(12)从写请求FIFO队列中提取该超时的写请求,然后发送到固态盘驱动器中,转入步骤(14);
(13)从写请求红黑树中选择与上一次写请求位置相邻的写请求发送到固态盘驱动器中;具体而言,就是在写请求红黑树中查找请求的Start字段等于上一次写请求的End字段加1的请求;
本步骤的优点在于,通过请求的合并,将随机请求可以尽量的转化为顺序请求,大大地提高了系统的性能;
(14)判断已经发送到固态盘驱动器中的总写请求数目是否超过了其阀值,若是则转入步骤(15),否则返回步骤(11);具体而言,阈值的大小是通过黑盒测试确定的第i个区域的最优并行度;
本步骤的优点在于,充分利用固态盘的并行性,同时避免过度的并行导致整体性能下降;
(15)执行i自加1,并判断是否有i<=N,如果是则返回步骤(3),否则过程结束。
本发明基于固态盘内部并行性的I/O调度器,包括:
第一模块,用于将SSD的逻辑地址空间划分为N个具有相同大小的区域,对每个区域进行顺序编号,并为每个区域分配一个用于管理区域的子队列,每个子队列中包括读请求FIFO队列、写请求FIFO队列、读请求红黑树、以及写请求红黑树;
第二模块,用于设置区域计数器i=1;
第三模块,用于判断第i个区域的读请求FIFO队列中是否有读请求,或写请求FIFO队列中是否有写请求,如果有读请求或写请求,则转入步骤(4),否则转入步骤(15);
第四模块,用于判断第i个区域中上一次服务的请求是否为写请求,如果是则进入步骤(5),否则进入步骤(10);
第五模块,用于判断第i个区域中读请求FIFO队列和读请求红黑树中是否有读请求,如果有则进入步骤(6),否则进入步骤(11);
第六模块,用于判断第i个区域中读请求FIFO队列中是否存在超时的请求,若存在则转入步骤(7),否则转入步骤(8);
第七模块,用于从读请求FIFO队列中提取该超时的读请求,然后发送到固态盘驱动器中,然后转入步骤(9);
第八模块,用于从读请求红黑树中选择与上一次读请求位置相邻的请求,并将其发送到固态盘的驱动器中;
第九模块,用于判断已经发送到固态盘驱动器中的总读请求数目是否超过了一阀值,若是则转入步骤(15),否则返回步骤(6);
第十模块,用于判断第i个区域中写请求FIFO队列和写请求红黑树中是否有未处理的请求,如果有则进入步骤(11),否则返回步骤(6);
第十一模块,用于判断第i个区域中写请求FIFO队列中是否存在超时的写请求,若存在转入步骤(12),否则转入步骤(13);
第十二模块,用于从写请求FIFO队列中提取该超时的写请求,然后发送到固态盘驱动器中,转入步骤(14);
第十三模块,用于从写请求红黑树中选择与上一次写请求位置相邻的写请求发送到固态盘驱动器中;
第十四模块,用于判断已经发送到固态盘驱动器中的总写请求数目是否超过了其阀值,若是则转入步骤(15),否则返回步骤(11);
第十五模块,用于执行i自加1,并判断是否有i<=N,如果是则返回步骤(3),否则过程结束。
性能比较:
为了验证本发明的性能,以下将本发明的方法与linux内核现有的几种常见调度算法,即无优化操作调度算法(NoOperation,简称Noop)、截止时间调度算法(Deadline)、完全公平队列调度算法(CompletelyFairQueuing,简称CFQ)、以及预期调度算法(AnticipatoryScheduler,简称AS)进行比较。
Noop调度算法:Noop调度算法是最简单的一种I/O调度算法,它只检查当前到达请求所访问的位置是否与前一个到达请求所访问的磁盘位置是否连续,若连续则将他们合并成一个更大的连续请求;若不连续则不做任何优化。所有到达的请求只是简单地以先进先出(FIFO)的方式发送到下层磁盘驱动器中。这种调度算法比较适合随机访问设备或者那类内部自身具有I/O调度优化功能的设备。noop调度算法通常被认为适合用作闪存和固态盘的I/O调度算法。
Deadline调度算法:Deadline调度算法的设计为了满足两个目标:减少磁盘寻道操作和避免请求“饥饿”。Dealine算法给每个到达的请求都赋予一个最晚被服务的时间点,以保证没有请求被无限期地得不到服务。默认情况下读请求的时间期限是500毫秒,写请求的时间期限是5秒。Dealine调度算法使用两个(读和写)FIFO队列和两棵(读和写)红黑树(Red-blacktree)来管理所有的请求。每个请求都同时被连接在一个FIFO队列和一棵红黑树中,即按其到达的时间顺序连接在FIFO队列中,并且按其访问的扇区地址顺序插入到红黑树中。选择请求服务时,Deadline算法以批量(batch参数)的方式交替地选择读或写方向请求。选择了被服务请求方向后,先判断该方向上的FIFO队列中是否有请求已经超时没有得到服务,若有,则服务超时的请求;若没有则选择上个被服务请求在红黑树中下一个位置上的请求进行服务。
CFQ调度算法:CFQ的目标是将磁盘带宽公平地在所有竞争进程之间分配。每个使用磁盘带宽的进程都有一个相关联的队列来管理该进程产生的所有磁盘访问请求。在每个队列中,所有的请求都被同时连接在一个先进先出(FIFO)的队列和一棵红黑树中。与Deadline调度算法相似,所有请求到达时都被赋予一个deadline,并且按其达到的时间顺序插入到先进先出(FIFO)队列中以及按其所访问的起始扇区地址插入到队列的红黑树中。与Deadline调度算法不同的是,每个队列中只有一个FIFO队列和一棵红黑树,而Deadline中分别有读写FIFO两个队列和读写两棵红黑树。CFQ在选择请求服务时,若没有请求超时,则从红黑树中选择与前一发送请求访问位置相邻的请求;若有请求超时,则优先服务超时了的请求。CFQ以轮转(Round-robin)方式服务所有进程的请求队列。
AS调度算法:AS算法是为了应对应用中的假空闲现象(Deceptiveidleness)而提出的。它是基于Deadline算法实现的,其主要思想是每次服务完一个请求时,不是立即转而去服务其它已经在队列中的请求,而是让磁盘暂时空闲下来等待一段很短的时间以期望即将到来的请求会访问与该请求相邻的磁盘位置。在实现中,等待时间段的长度由历史请求到达时间的统计情况决定。由于程序的访问具有局部性特征,在等待的这段时间里应用往往会出来预期的与之前请求相邻的请求。比如,上层应用在运行的过程中需要等待某互斥锁释放,因此会暂时停止产生磁盘I/O请求,获得了互斥锁后应用会继续运行产生相邻的磁盘I/O请求。预期调度算法通过暂时停止磁盘服务而等待连续的磁盘请求能够将随机的访问请求转化为顺序的访问请求,减少了磁头总的机械运动,从而提高请求的平均响应时间。
图4显示了文件IO模式下的测试性能。图中横坐标表示采用的不同线程数量,纵坐标表示对应的系统性能(MB/s)。从图中可以看出,本发明的方法在文件IO负载情况下的性能比其它四种调度算法性能都要好,尤其是在多线程的情况下。如图4所示,在线程数量很少(1和2)的情况下,本发明的方法与其它调度算法的性能相当,但随着并发线程数量的增加,本发明的方法的性能逐渐变得高于其它调度算法。例如,在并发线程数为16和32时,本发明的方法比其它四种调度算法中性能最好的调度算法性能要分别提高36.6%和41.6%。但随着并发线程数的继续增加,其性能反而慢慢下降。这说明,过多的并发线程会导致每个区域上在单位时间内接收的请求数剧增,导致过度并发竞争而影响并行性的作用,这与前面的分析吻合。虽然其它调度算法在跨过性能最低点对应的线程数后,继续增加并发线程数性能反而慢慢提高,但其总性能水平仍然远远低于本发明的方法,这更进一步地说明了其它调度算法没有感知到固态盘内部并行性的存在。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (6)
1.一种基于固态盘内部并行性的I/O调度方法,其特征在于,包括以下步骤:
(1)将SSD的逻辑地址空间划分为N个具有相同大小的区域,对每个区域进行顺序编号,并为每个区域分配一个用于管理区域的子队列,每个子队列中包括读请求FIFO队列、写请求FIFO队列、读请求红黑树、以及写请求红黑树;
(2)设置区域计数器i=1;
(3)判断第i个区域的读请求FIFO队列中是否有读请求,或写请求FIFO队列中是否有写请求,如果有读请求或写请求,则转入步骤(4),否则转入步骤(15);
(4)判断第i个区域中上一次服务的请求是否为写请求,如果是则进入步骤(5),否则进入步骤(10);
(5)判断第i个区域中读请求FIFO队列和读请求红黑树中是否有读请求,如果有则进入步骤(6),否则进入步骤(11);
(6)判断第i个区域中读请求FIFO队列中是否存在超时的请求,若存在则转入步骤(7),否则转入步骤(8);
(7)从读请求FIFO队列中提取该超时的读请求,然后发送到固态盘驱动器中,然后转入步骤(9);
(8)从读请求红黑树中选择与上一次读请求位置相邻的请求,并将其发送到固态盘的驱动器中;
(9)判断已经发送到固态盘驱动器中的总读请求数目是否超过了一阀值,若是则转入步骤(15),否则返回步骤(6);
(10)判断第i个区域中写请求FIFO队列和写请求红黑树中是否有未处理的请求,如果有则进入步骤(11),否则返回步骤(6);
(11)判断第i个区域中写请求FIFO队列中是否存在超时的写请求,若存在转入步骤(12),否则转入步骤(13);
(12)从写请求FIFO队列中提取该超时的写请求,然后发送到固态盘驱动器中,转入步骤(14);
(13)从写请求红黑树中选择与上一次写请求位置相邻的写请求发送到固态盘驱动器中;
(14)判断已经发送到固态盘驱动器中的总写请求数目是否超过了其阀值,若是则转入步骤(15),否则返回步骤(11);
(15)执行i自加1,并判断是否有i<=N,如果是则返回步骤(3),否则过程结束。
2.根据权利要求1所述的I/O调度方法,其特征在于,N值的确定方法为:首先获取固态盘总容量大小C,然后根据黑盒测试所设定的区域大小R计算出固态盘需要的区域数其中表示向上取整。
3.根据权利要求1所述的I/O调度方法,其特征在于,步骤(1)中,在任意时刻,当新的块I/O操作到达时,检查对应区域的子队列,若存在与其访问位置相邻的请求,则将该块I/O操作与位置相邻的请求合并成一个连续的大请求;若不存在,则为该块I/O操作分配一个新的请求,然后将该请求插入到对应的子队列的相应FIFO队列和红黑树中。
4.根据权利要求1所述的I/O调度方法,其特征在于,步骤(6)中,若该请求的当前时间大于该请求的Deadline字段中记录的时间点,则说明该请求超时;否则说明该请求没有超时。
5.根据权利要求1所述的I/O调度方法,其特征在于,步骤(8)具体为,在读请求红黑树中查找请求的“Start”字段等于上一次读请求的“End”字段加1的请求。
6.根据权利要求1所述的I/O调度方法,其特征在于,步骤(13)具体为,在写请求红黑树中查找请求的Start字段等于上一次写请求的End字段加1的请求。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310190301.0A CN103336669B (zh) | 2013-05-21 | 2013-05-21 | 一种基于固态盘内部并行性的i/o调度方法及调度器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310190301.0A CN103336669B (zh) | 2013-05-21 | 2013-05-21 | 一种基于固态盘内部并行性的i/o调度方法及调度器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103336669A CN103336669A (zh) | 2013-10-02 |
CN103336669B true CN103336669B (zh) | 2015-12-02 |
Family
ID=49244849
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310190301.0A Active CN103336669B (zh) | 2013-05-21 | 2013-05-21 | 一种基于固态盘内部并行性的i/o调度方法及调度器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103336669B (zh) |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104778088B (zh) * | 2015-04-17 | 2018-03-27 | 华中科技大学 | 一种基于减少进程间通信开销的并行i/o优化方法与系统 |
CN104881258A (zh) * | 2015-06-10 | 2015-09-02 | 北京金山安全软件有限公司 | 缓冲区并发访问方法及装置 |
CN106469174B (zh) * | 2015-08-19 | 2019-10-29 | 阿里巴巴集团控股有限公司 | 数据读取方法和装置 |
CN105159609A (zh) * | 2015-08-31 | 2015-12-16 | 北京神州云科数据技术有限公司 | 一种基于虚拟磁盘层的io流控制方法及装置 |
CN106527959B (zh) * | 2015-09-10 | 2019-07-26 | 阿里巴巴集团控股有限公司 | 刷新磁盘输入输出请求的处理方法及设备 |
CN105204785B (zh) * | 2015-10-15 | 2018-07-06 | 中国科学技术大学 | 一种基于磁盘i/o队列的磁盘阵列写方式选择方法 |
CN106775438B (zh) * | 2015-11-25 | 2019-08-30 | 华中科技大学 | 一种基于固态盘读写特性的i/o调度方法 |
CN107562654B (zh) * | 2016-07-01 | 2020-10-09 | 北京忆恒创源科技有限公司 | Io命令处理方法与装置 |
CN106293523A (zh) * | 2016-08-04 | 2017-01-04 | 浪潮(北京)电子信息产业有限公司 | 一种对非易失性存储的io请求响应方法及装置 |
CN106371768B (zh) * | 2016-09-05 | 2019-04-12 | 华中科技大学 | 一种固态盘系统中的读写优化调度方法 |
CN106681660B (zh) * | 2016-12-17 | 2020-02-07 | 郑州云海信息技术有限公司 | Io调度方法及io调度装置 |
CN107368263A (zh) * | 2017-07-25 | 2017-11-21 | 郑州云海信息技术有限公司 | 一种固态硬盘中优先权调度的方法和系统 |
CN107589911A (zh) * | 2017-09-05 | 2018-01-16 | 郑州云海信息技术有限公司 | 一种ssd缓存的io处理方法及装置 |
CN109697032B (zh) * | 2018-12-19 | 2022-01-07 | 中国人民解放军国防科技大学 | 物理地址感知的固态盘请求调度方法及装置 |
CN110795371B (zh) * | 2019-10-25 | 2021-06-29 | 浪潮电子信息产业股份有限公司 | 一种i/o请求处理方法、系统、设备及计算机存储介质 |
CN110826099A (zh) * | 2019-10-30 | 2020-02-21 | 上海华元创信软件有限公司 | 适用于嵌入式实时操作系统的安全存储方法及系统 |
CN116893786B (zh) * | 2023-09-05 | 2024-01-09 | 苏州浪潮智能科技有限公司 | 一种数据处理方法、装置、电子设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5446855A (en) * | 1994-02-07 | 1995-08-29 | Buslogic, Inc. | System and method for disk array data transfer |
CN101299181A (zh) * | 2008-07-08 | 2008-11-05 | 杭州华三通信技术有限公司 | 基于磁盘进行i/o请求缓存的方法和装置以及san存储设备 |
CN103064636A (zh) * | 2012-12-24 | 2013-04-24 | 创新科存储技术有限公司 | 一种固态硬盘读写方法以及一种固态硬盘 |
CN103064632A (zh) * | 2012-12-04 | 2013-04-24 | 记忆科技(深圳)有限公司 | 固态硬盘及其虚拟化方法、系统 |
-
2013
- 2013-05-21 CN CN201310190301.0A patent/CN103336669B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5446855A (en) * | 1994-02-07 | 1995-08-29 | Buslogic, Inc. | System and method for disk array data transfer |
CN101299181A (zh) * | 2008-07-08 | 2008-11-05 | 杭州华三通信技术有限公司 | 基于磁盘进行i/o请求缓存的方法和装置以及san存储设备 |
CN103064632A (zh) * | 2012-12-04 | 2013-04-24 | 记忆科技(深圳)有限公司 | 固态硬盘及其虚拟化方法、系统 |
CN103064636A (zh) * | 2012-12-24 | 2013-04-24 | 创新科存储技术有限公司 | 一种固态硬盘读写方法以及一种固态硬盘 |
Also Published As
Publication number | Publication date |
---|---|
CN103336669A (zh) | 2013-10-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103336669B (zh) | 一种基于固态盘内部并行性的i/o调度方法及调度器 | |
US11630609B2 (en) | Scheduling access commands for data storage devices | |
US8959263B2 (en) | Maintaining I/O priority and I/O sorting | |
US8918595B2 (en) | Enforcing system intentions during memory scheduling | |
US9697125B2 (en) | Memory access monitor | |
US10817217B2 (en) | Data storage system with improved time-to-ready | |
US8769190B1 (en) | System and method for reducing contentions in solid-state memory access | |
US20190278523A1 (en) | Managed fetching and execution of commands from submission queues | |
US10642500B2 (en) | Methods, systems and computer readable media for intelligent fetching of data storage device commands from submission queues | |
US8935491B2 (en) | Memory architecture for dynamically allocated manycore processor | |
CN104090847A (zh) | 一种固态存储设备的地址分配方法 | |
CN103809917A (zh) | 用于存储器的工作调度方法及其存储系统 | |
JP2002269023A5 (zh) | ||
CN107273200B (zh) | 一种针对异构存储的任务调度方法 | |
WO2010141225A2 (en) | Control of page access in memory | |
KR20100031132A (ko) | 플래시 메모리 시스템에서 페이징된 가비지 수집과 하우스 키핑 동작 | |
US20220197563A1 (en) | Qos traffic class latency model for just-in-time (jit) schedulers | |
CN108021516B (zh) | 一种并行存储介质存储控制器的命令调度管理系统与方法 | |
US20200409561A1 (en) | Data storage system with i/o determinism latency optimization | |
US11256621B2 (en) | Dual controller cache optimization in a deterministic data storage system | |
CN114521253A (zh) | 用于固态驱动器中的输入输出确定性的双层确定性进程间通信调度器 | |
US9465745B2 (en) | Managing access commands by multiple level caching | |
US7272692B2 (en) | Arbitration scheme for memory command selectors | |
US7293144B2 (en) | Cache management controller and method based on a minimum number of cache slots and priority | |
CN117251275A (zh) | 多应用异步i/o请求的调度方法及系统、设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |