首页> 中国专利> 软件RAID请求处理方法、控制器及RAID存储系统

软件RAID请求处理方法、控制器及RAID存储系统

摘要

本发明公开了一种软件RAID请求处理方法、控制器及RAID存储系统,属于计算机存储技术领域,包括:为每个IO线程分配对应的处理线程和写请求合并队列,并为每个条带分配独占锁类型的条带处理锁;在IO线程TIO发出写请求Rw时,将Rw发送到IO线程TIO对应的处理线程Tp,由处理线程Tp通过如下步骤处理Rw:(S1)若Rw的目标条带的处理锁当前被专用线程所占用,则转入(S2);否则,转入(S3);(S2)若专用线程对应的写请求合并队列Qd允许合并写请求,将则Rw添加到Qd的队尾,等待专用线程将Rw处理完成后返回;否则,转入步骤(S1);(S3)Tp获取目标条带的处理锁而成为专用线程,并处理Rw,处理完成后返回。本发明能够提高RAID系统的IO性能。

著录项

  • 公开/公告号CN114780025A

    专利类型发明专利

  • 公开/公告日2022-07-22

    原文格式PDF

  • 申请/专利权人 华中科技大学;

    申请/专利号CN202210319903.0

  • 发明设计人 曹强;王书成;

    申请日2022-03-29

  • 分类号G06F3/06;G06F9/52;

  • 代理机构华中科技大学专利中心;

  • 代理人夏倩;李智

  • 地址 430074 湖北省武汉市洪山区珞喻路1037号

  • 入库时间 2023-06-19 16:04:54

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-07-22

    公开

    发明专利申请公布

说明书

技术领域

本发明属于计算机存储技术领域,更具体地,涉及一种软件RAID请求处理方法、控制器及RAID存储系统。

背景技术

廉价磁盘冗余阵列(RAID)将多个物理存储器组成一个存储阵列,并虚拟为一个单存储器使用。数据通过“条带分割”机制均匀地分布在每一个存储器上。根据条带的组成和分割方法的不同,RAID可以分为多个不同的模式。例如,RAID-0模式将数据按照固定大小分割,并均匀的存储在所有存储器中。RAID-1模式将数据在两个存储器之间形成镜象。而RAID-4,RAID-5和RAID-6则在条带中引入了额外的校验数据,可以保证阵列中一个磁盘出现故障时不影响系统正常工作。这三者之间的区别在于,使用了不同的校验数据块数量和不同的校验存储位置。

随着计算机存储技术的不断发展,出现了固态硬盘(SSD)和非易失内存(NVM)等多种新型高性能存储设备。这些存储设备具有高达GB每秒的I/O带宽,比传统机械硬盘(HDD)的性能高1-2个数量级,极大地缩小了内存和存储之间的性能差距。RAID系统可以建立在多个这样的高速存储设备上,称为超快RAID,预计将进一步提高系统级的性能和可靠性。高性能、大容量的超快RAID对于具有大数据集的数据密集型应用和服务非常有吸引力,例如高性能计算,大数据分析以及云服务等。超快RAID的实现可分为软件实现方式和硬件实现方式,其中,软件RAID在主机端运行RAID控制软件,利用主机的计算和内存资源提供RAID功能。常见的软件RAID实现有LinuxMDRAID,ZFSRAID-Z,Windows磁盘管理器中的阵列组件等。软件RAID因其成本较低,兼容性强而得到较为广泛的使用。硬件RAID使用独立于主机之外的硬件板卡和控制器来提供RAID功能,常见的硬件RAID产品有LSIMegaRAID系列阵列控制卡,惠普HPH240ARRAID阵列控制卡,Adaptec ASR系列阵列控制卡等。硬件RAID方法性能稍高,但是需要额外成本,且兼容性和可扩展性差于软件RAID。

然而,目前的软件RAID设计,例如应用广泛且成熟的LinuxMDRAID系统和ZFSRAID-Z系统,均存在写性能不足的问题。

LinuxMD写请求处理架构的核心是使用一个处理线程异步地处理所有的条带写请求。具体来说,一个独立的条带处理线程与内核中的异或计算模块和设备I/O模块异步协作来处理用户请求。这种单线程处理架构适合基于慢速机械硬盘的RAID系统。然而,对于基于高速SSD或NVM的软件RAID系统来说,单个处理线程的能力是有限的。例如,实际使用时,基于高速SSD的LinuxRAID-5系统吞吐量较低,只能发挥SSD设备10%-30%的利用率。

LinuxMD在最近的更新中支持同时开启多个处理线程,但是最高只能发挥高性能SSD设备40%-50%的利用率。LinuxMD使用集中式的数据结构,称为条带缓存,管理所有的条带及其写入请求。条带缓存包含多个条带链表,分别管理处于不同运行状态的条带。例如,Inactivelist保存当前没有写请求的条带;而handlelist保存当前正在进行处理的条带。在处理过程中,条带随着自身运行时状态的改变,在不同条带链表间移动。

LinuxMD将一个条带的处理流程大致分为了5个主要的步骤:请求插入,读取原始条带,计算校验信息,写入更新条带,清理条带。上述步骤被分开依次处理。条带中设置了多个状态位(多达27个条带状态和28个设备状态),以标明条带当前位于的具体步骤和运行时状态。在条带处理时,LinuxMD的处理线程首先从条带链表中取出一个条带,然后遍历查询条带当前的状态,以此确定该条带是否已经完成上一个处理步骤,并已经准备好继续下一个处理步骤;若没有准备完成,处理线程将条带重新放回条带链表;若已经准备完成,处理线程将联合内核中的异或计算模块或设备I/O模块,异步执行下一个条带处理步骤。在一个步骤完成后,线程将更新条带状态,并将条带放置到对应的条带列表中。条带将被不同处理线程多次取出链表-处理-放回链表,直到5个步骤都执行完成。

在上述LinuxMD处理条带的过程中,处理线程与条带处理任务之间不是唯一对应的,导致多个处理线程频繁且并行地从条带链表中取出条带,或是将条带放回条带链表。为了保护条带链表的并发一致性,LinuxMD使用锁机制来串行化并发的条带链表访问操作。这造成了多个并发处理线程之间严重的锁竞争,大幅降低条带并行处理效率。仅优化条带链表,而不改进LinuxMD的条带处理结构和处理流程,获得的性能提升极为有限。另外,由于处理线程与条带处理任务之间不是一一对应的,导致处理线程在每次获取到条带时,都要遍历检查大量条带状态以确认能否继续处理。这会产生频繁的无效条带状态查询,增加了条带处理延迟,且浪费有限的CPU资源。

总体而言,在部署有高速存储设备,需要提供高性能和高可靠的服务器中,现有RAID系统写入吞吐量低,并行可扩展性差,无法完全发挥高性能存储设备的I/O性能。

发明内容

针对现有技术的缺陷和改进需求,本发明提供了一种软件RAID请求处理方法、控制器及RAID存储系统,其目的在于,提高RAID系统的IO性能。

为实现上述目的,按照本发明的一个方面,提供了一种软件RAID请求处理方法,包括:

为每个IO线程分配对应的处理线程和写请求合并队列,并为每个条带分配条带处理锁,条带处理锁为独占锁;

在IO线程T

(S1)获得写请求R

(S2)判断专用线程对应的写请求合并队列Q

(S3)处理线程T

进一步地,步骤(S3)中,处理线程T

处理线程T

等待预设时间窗口T之后,设置写请求合并队列Q

进一步地,本发明提供的软件RAID请求处理方法,将请求写入的数据写入目标条带,包括:

计算并比较条带重建时需要从目标条带中读取的原始数据块数量和原始校验块数量,若需从目标条带中读取的原始数据块的数量较少,则使用“读-重建-写”的方式重建条带,并从目标条带中读取原始数据块;若需从目标条带中读取的原始校验块的数量较少,则使用“读-修改-写”方式重建条带,并从缓存和目标条带中读取原始校验块。

进一步地,本发明提供的软件RAID请求处理方法,还包括:

为每一个条带建立一个处理状态条目;所述处理状态条目记录的信息包括:条带号、条带处理锁状态、专用线程ID和停止合并标记位;

其中,停止合并标记位用于指示专用线程的写请求合并队列是否允许合并写请求。

进一步地,本发明提供的软件RAID请求处理方法,步骤(S3)中,在写请求处理完成R

进一步地,本发明提供的软件RAID请求处理方法,还包括:在IO线程发出读请求时,直接将读请求发送到对应的条带。

按照本发明的另一个方面,提供了一种软件RAID控制器,包括:处理器和计算机可读存储介质;

计算机可读存储介质中存储有计算机程序;

处理器用于读取计算机程序,执行本发明提供的软件RAID请求处理方法。

按照本发明的又一个方面,提供了一种RAID存储系统,包括:用于组成RAID的多个物理存储器,和本发明提供的软件RAID控制器。

总体而言,通过本发明所构思的以上技术方案,能够取得以下有益效果:

(1)本发明为每个IO线程分配专用的处理资源,包括处理线程和写请求合并队列,并且对于单个条带,对其执行写请求的处理线程中,获得条带处理锁的处理线程会成为专用线程,独立且完整的处理针对该条带的写请求,由于处理线程仅与单个条带存在对应关系,多个条带的处理线程可以并行执行,由此能够充分利用处理器和高性能存储设备固有的高并行性,并发挥条带之间天然的数据无关性,有效提升RAID系统的并发处理能力和IO性能。

(2)本发明为每个条带分配独占锁,访问同一个条带的处理线程获得独占锁之后才能成为专用线程,对条带请求进行处理,由此能够有效避免多个处理线程之间的资源和状态管理竞争,最大程度上提升软件RAID系统的IO性能。

(3)本发明中,并且,获取到锁的处理线程成为专用线程之后,并不立即开始处理写请求,而是等待一个时间窗口在处理,在该时间窗口内,未获取到条带处理锁的处理线程可将写请求添加至专用线程的写请求合并队列中,这使得专用线程在处理写请求时,能够通过请求聚合和校验缓存的方法,加速RAID部分条带更新操作。

附图说明

图1为本发明实施例提供的软件RAID请求处理方法流程图;

图2为本发明实施例提供的软件RAID请求处理方法架构图;

图3为本发明实施例提供的条带的处理状态条目示意图;

图4为本发明实施例提供的专用处理线程独立完整处理写请求的方法流程图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。

在本发明中,本发明及附图中的术语“第一”、“第二”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。

为了解决现有的软件RAID无法充分发挥SSD、NVM等高性能存储设备的高并行性,导致系统写性能不足的技术问题,本发明提供了一种软件RAID请求处理方法、软件RAID控制器及RAID存储系统,其整体思路在于:为每个条带IO线程分配一个专用处理线程和写请求合并队列,由专用线程独立且完整地处理条带写请求,以充分利用处理器和高性能存储设备固有的高并行性,并发挥条带之间天然的数据无关性,以提升RAID系统的并发处理能力,同时尽量避免多个处理线程之间的资源和状态管理竞争,最大程度上提升软件RAID系统的IO性能。

在详细解释本发明的技术方案之前,先结合图1对本发明所涉及的线程概念进行简要介绍:

IO线程,表示上层应用对RAID的访问线程,由IO线程发出读、写请求,其中,发出写请求的IO线程又称为“写线程”;

处理线程:控制器内部用于接收和处理读、写请求的线程,与IO线程存在一一对应的关系;

专用线程:获得了条带处理锁的处理线程;针对同一条带的多个写请求处理线程,只有成为专用线程之后,才能执行写请求。

以下为实施例。

实施例1:

一种软件RAID请求处理方法,如图1和图2所示,包括:

为每个IO线程分配对应的处理线程和写请求合并队列,并为每个条带分配条带处理锁,条带处理锁为独占锁;

在IO线程T

(S1)获得写请求R

(S2)判断专用线程对应的写请求合并队列Q

为了节省计算资源,可选地,本实施例中,步骤(S2)中,当目标条带对应的写请求合并队列不允许合并写请求时,未获取到条带处理锁的处理线程会先休眠指定时间,之后再转入步骤(S1);

(S3)处理线程T

本实施例为每一个条带分配一个独占锁类型的条带处理锁,并且只有获取到该条带处理锁的处理线程成为可对条带执行写请求的专用线程,能够有效避免多个处理线程对条带状态并发访问时产生的竞争问题,即多个处理线程同时访问同一条带的全局状态时,可能出现的由于并发修改使得条带状态混乱和不一致的问题,以及使用传统顺序化方法,例如使用互斥锁保证状态修改顺序时,产生的锁竞争与等待问题。

为了维护条带的状态,以便于条带状态的更新和查询,作为一种可选的实施方式,参阅图3,本实施例为每一个条带建立一个处理状态条目;处理状态条目记录的信息包括:条带号、条带处理锁状态、专用线程ID和停止合并标记位;

其中,停止合并标记位用于指示专用线程的写请求合并队列是否允许合并写请求;

处理线程根据条带号,查询并匹配到对应的处理状态条目;处理线程根据目标条带处理锁的状态,来决定是否可以更改条带的其他状态;若处理锁处于上锁(即图3中的“Lock”)的状态,则处理线程只能读取条带状态;若处理锁处于解锁(即图3中的“Unlock”)的状态,则处理线程将尝试获取处理锁;若没有获取到处理锁,则处理线程只能读取条带状态;若获取到处理锁,则该处理线程将变成专用条带,可以更改该条带状态;

所有条带的处理状态条目按照条带号排序,顺序地放置在内存特定位置。

RAID系统以条带为单位更新数据,而部分条带更新则是写请求的更新内容没有完全覆盖条带,从而导致条带更新时需要先读取硬盘上的原始数据块和校验块,然后重新计算校验数据以重建条带,最后将条带写回硬盘的过程;部分条带更新产生额外的硬盘读写操作以及校验计算,降低RAID系统的条带处理性能。考虑到RAID系统中部分更新对条带处理性能的影响,为了加速RAID部分条带更新操作,本实施例的步骤(S3)中,专用线程处理写请求时,采用了请求聚合和校验缓存机制,参阅图4,具体包括:

处理线程T

等待预设时间窗口T之后,设置写请求合并队列Q

通过时间窗口T的设置,使得在该时间窗口内,未获取到条带处理锁的处理线程可以将其写请求添加到专用线程的写请求合并队列中,最终由专用线程进行合并处理,由此能够有效对写请求进行聚合,降低条带的部分更新对IO性能的影响;时间窗口T的具体长度,可根据RAID系统的负载特性相应处理,以避免因时间窗口设置过短而无法合并写请求或只能合并较少的写请求,同时需要避免因时间窗口设置过长而导致专用线程等待时间过长,条带处理效率低;可选地,本实施例中,时间窗口T=100μs。

为了进一步提高写请求处理性能,本实施例中,专用线程将写请求合并队列中的写请求合并后,将请求写入的数据写入目标条带,包括:

根据合并后的写请求内容,查询重建条带需要的原始校验块是否已经缓存;

计算并比较条带重建时需要从目标条带中读取的原始数据块数量和原始校验块数量,若需从目标条带中读取的原始数据块的数量较少,则使用“读-重建-写”(RCW)的方式重建条带,并从目标条带中读取原始数据块;若需从目标条带中读取的原始校验块的数量较少,则使用“读-修改-写”(RMW)方式重建条带,并从缓存和目标条带中读取原始校验块;

确定条带重建方式之后,根据写请求内容,使用异或计算公式更新原始校验块。将更新后的校验块放入缓存,并同时将校验块和数据块写回硬盘即可。

步骤(S3)中,在写请求处理完成R

本实施例在清空目标条带的处理状态条目时,所采用的清空顺序能够防止其他处理线程在查询或竞争条带处理状态时,出现状态不一致的情况。

参阅图1,本实施例还包括:在IO线程发出读请求时,直接将读请求发送到对应的条带。

总的来说,本实施例针对现有软件RAID系统应用于高性能存储设备时,存在的条带处理能力低,多线程并发处理可扩展性差,不能充分发挥存储设备性能的问题,通过设计高效的多线程条带并发处理方法,结合避免竞争的条带状态控制方法和优化部分更新操作的校验缓存方法,有效提升了软件RAID系统的整体处理性能;在存储服务器需要处理负载密集且高并发情况下的RAID写请求时,使用本发明第一方面提供的存储方法,能够充分发挥现代处理器和存储器的高并发、低延迟、高带宽性能优势,有效提升存储服务器的整体I/O吞吐量性能。

实施例2:

一种软件RAID控制器,包括:处理器和计算机可读存储介质;

计算机可读存储介质中存储有计算机程序;

处理器用于读取计算机程序,执行上述实施例1提供的软件RAID请求处理方法。

实施例3:

一种RAID存储系统,包括:用于组成RAID的多个物理存储器,和上述实施例2提供的软件RAID控制器。

本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号