CN113849317B - 一种内存池资源使用方法及相关装置 - Google Patents
一种内存池资源使用方法及相关装置 Download PDFInfo
- Publication number
- CN113849317B CN113849317B CN202111438827.7A CN202111438827A CN113849317B CN 113849317 B CN113849317 B CN 113849317B CN 202111438827 A CN202111438827 A CN 202111438827A CN 113849317 B CN113849317 B CN 113849317B
- Authority
- CN
- China
- Prior art keywords
- memory
- linked list
- task
- resource
- pool
- 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
- 238000000034 method Methods 0.000 title claims abstract description 54
- 238000012545 processing Methods 0.000 claims abstract description 24
- 238000003491 array Methods 0.000 claims abstract description 16
- 238000004590 computer program Methods 0.000 claims description 10
- 230000008569 process Effects 0.000 claims description 9
- 238000011084 recovery Methods 0.000 claims description 8
- 238000013468 resource allocation Methods 0.000 claims description 7
- 230000009286 beneficial effect Effects 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 6
- 238000013461 design Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000015556 catabolic process Effects 0.000 description 2
- 238000006731 degradation reaction Methods 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000008030 elimination Effects 0.000 description 1
- 238000003379 elimination reaction Methods 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0629—Configuration or reconfiguration of storage systems
- G06F3/0631—Configuration or reconfiguration of storage systems by allocating resources to storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0689—Disk arrays, e.g. RAID, JBOD
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种内存池资源使用方法,包括:接收磁盘阵列对应的IO任务;基于磁盘阵列对应的无锁内存池的内存资源链表对IO任务分配无锁内存池的内存节点;其中,无锁内存池与磁盘阵列一一对应;采用内存节点对IO任务进行处理。通过该磁盘阵列对应的无锁内存池分类对应的内存节点,而不需要进行内存资源的是否有锁的判断,实现免锁操作,大大降低了内存池的使用的复杂性,减少了内存泄漏等容易产生的错误,提高了系统的健壮性,保持了内存资源使用的稳定性,同时避免了进行锁判断,提高了对内存池进行操作的效率。本申请还公开了一种内存池资源使用装置、服务器以及计算机可读存储介质,具有以上有益效果。
Description
技术领域
本申请涉及计算机技术领域,特别涉及一种内存池资源使用方法、内存池资源使用装置、服务器以及计算机可读存储介质。
背景技术
随着信息技术的不断发展,出现了越来越多的数据存储技术。其中,独立磁盘冗余阵列(RAID,redundant array of independent disks)是把相同的数据存储在多个硬盘的不同的地方的方法。通过把数据放在多个硬盘上,输入输出操作能以平衡的方式交叠,改良性能。因为多个硬盘增加了平均故障间隔时间,储存冗余数据也增加了容错。
相关技术中,存储系统的磁盘阵列会按照条带进行划分,对磁盘阵列条带再按照各磁盘分块条带划分。磁盘阵列的IO(Input/Output,输入输出)流程的相关内存分配都跟条带相关。为了优化磁盘阵列IO的性能,磁盘阵列IO采用了大量优化设计。但是对于内存池访问仍然会需要锁来保证内存池内存分配、释放、回收等操作有序进行。由于锁的存在导致在进行内存分配时,如果其他任务持有锁,当前IO任务想要进行内存池操作就必须获取锁而进行等待,会导致IO性能下降。从而使内存池的操作更加复杂化。复杂和低效率的内存操作,既影响存储系统的性能,也很容易造成内存泄漏等问题,影响了存储系统的稳定性。
因此,如何提高对内存池进行操作的效率是本领域技术人员关注的重点问题。
发明内容
本申请的目的是提供一种内存池资源使用方法、内存池资源使用装置、服务器以及计算机可读存储介质,以提高内存池进行操作的效率。
为解决上述技术问题,本申请提供一种内存池资源使用方法,包括:
接收磁盘阵列对应的IO任务;
基于所述磁盘阵列对应的无锁内存池的内存资源链表对所述IO任务分配所述无锁内存池的内存节点;其中,所述无锁内存池与所述磁盘阵列一一对应;
采用所述内存节点对所述IO任务进行处理。
可选的,基于所述磁盘阵列对应的无锁内存池的内存资源链表对所述IO任务分配所述无锁内存池的内存节点,包括:
当所述内存资源链表的空闲链表存在内存节点时,从所述空闲链表的头部取出第一个内存节点;
将所述IO任务的条带号和IO请求指针写入所述内存节点,并放入缓存链表中,以实现对所述IO任务分配所述内存节点。
可选的,基于所述磁盘阵列对应的无锁内存池的内存资源链表对所述IO任务分配所述无锁内存池的内存节点,包括:
当所述内存资源链表的空闲链表不存在内存节点时,从所述内存资源链表的后备链表中取出所有内存节点,并将所述所有内存节点放入所述空闲链表中;
从所述空闲链表的头部取出第一个内存节点;
将所述IO任务的条带号和IO请求指针写入所述内存节点,并放入缓存链表中,以实现对所述IO任务分配所述内存节点。
可选的,还包括:
当所述内存资源链表包括多个缓存链表时,从第一个缓存链表取出所有内存节点,并将所述所有内存节点放入所述后备链表中。
可选的,从所述空闲链表的头部取出第一个内存节点,包括:
从所述空闲链表的头部取出第一个内存节点;
判断所述第一个内存节点是否存在正在处理的IO任务;
若是,则将所述内存节点放入缓存链表中,并取出并检查下一个内存节点是否存在正在处理的IO任务,直至取出空闲的内存节点。
可选的,还包括:
在接收IO任务之前,基于所述磁盘阵列或磁盘阵列区域的数量将内存池资源划分为包括多个内存池的内存池组;
对每个所述磁盘阵列或每个所述磁盘阵列区域分配一个所述内存池。
可选的,采用所述内存节点对所述IO任务进行处理,包括:
采用所述磁盘阵列对应的线程和所述内存节点对所述IO任务进行处理。
可选的,所述内存资源链表还包括hash表;
相应的,当接收磁盘阵列对应的IO任务时,还包括:
基于所述hash表确定并使用所述IO任务对应的缓存数据。
本申请还提供一种内存池资源使用装置,包括:
IO任务接收模块,用于接收磁盘阵列对应的IO任务;
内存资源分配模块,用于基于所述磁盘阵列对应的无锁内存池的内存资源链表对所述IO任务分配所述无锁内存池的内存节点;其中,所述无锁内存池与所述磁盘阵列一一对应;
IO任务处理模块,用于采用所述内存节点对所述IO任务进行处理。
本申请还提供一种服务器,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如上所述的内存池资源使用方法的步骤。
本申请还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的内存池资源使用方法的步骤。
本申请所提供的一种内存池资源使用方法,包括:接收磁盘阵列对应的IO任务;基于所述磁盘阵列对应的无锁内存池的内存资源链表对所述IO任务分配所述无锁内存池的内存节点;其中,所述无锁内存池与所述磁盘阵列一一对应;采用所述内存节点对所述IO任务进行处理。
通过接收磁盘阵列对应的IO任务,然后基于该磁盘阵列对应的无锁内存池分类对应的内存节点,而不需要进行内存资源的是否有锁的判断,实现免锁操作,并且由于该内存池是与该磁盘阵列一一对应的,由于一个条带一次分配,且去掉了内存的释放和回收等操作,大大降低了内存池的使用的复杂性,减少了内存泄漏等容易产生的错误,提高了系统的健壮性,保持了内存资源使用的稳定性,同时避免了进行锁判断,提高了对内存池进行操作的效率。
本申请还提供一种内存池资源使用装置、服务器以及计算机可读存储介质,具有以上有益效果,在此不做赘述。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请实施例所提供的一种内存池资源使用方法的流程图;
图2为本申请实施例所提供的一种内存池资源使用方法的内存资源结构示意图;
图3为本申请实施例所提供的一种内存池资源使用方法的内存资源链表结构示意图;
图4为本申请实施例所提供的一种内存池资源使用装置的结构示意图。
具体实施方式
本申请的核心是提供一种内存池资源使用方法、内存池资源使用装置、服务器以及计算机可读存储介质,以提高内存池进行操作的效率。
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
相关技术中,存储系统的磁盘阵列会按照条带进行划分,对磁盘阵列条带再按照各磁盘分块条带划分。磁盘阵列的IO流程的相关内存分配都跟条带相关。为了优化磁盘阵列IO的性能,磁盘阵列IO采用了大量优化设计。但是对于内存池访问仍然会需要锁来保证内存池内存分配、释放、回收等操作有序进行。由于锁的存在导致在进行内存分配时,如果其他任务持有锁,当前IO任务想要进行内存池操作就必须获取锁而进行等待,会导致IO性能下降。从而使内存池的操作更加复杂化。复杂和低效率的内存操作,既影响存储系统的性能,也很容易造成内存泄漏等问题,影响了存储系统的稳定性。
因此,本申请提供一种内存池资源使用方法,通过接收磁盘阵列对应的IO任务,然后基于该磁盘阵列对应的无锁内存池分类对应的内存节点,而不需要进行内存资源的是否有锁的判断,实现免锁操作,并且由于该内存池是与该磁盘阵列一一对应的,由于一个条带一次分配,且去掉了内存的释放和回收等操作,大大降低了内存池的使用的复杂性,减少了内存泄漏等容易产生的错误,提高了系统的健壮性,保持了内存资源使用的稳定性,同时避免了进行锁判断,提高了对内存池进行操作的效率。
以下通过一个实施例,对本申请提供的一种内存池资源使用方法进行说明。
请参考图1,图1为本申请实施例所提供的一种内存池资源使用方法的流程图。
本实施例中,该方法可以包括:
S101,接收磁盘阵列对应的IO任务;
本步骤旨在接收磁盘阵列对应的IO任务。其中,该磁盘阵列是指RAID磁盘阵列。
其中,IO任务就是该磁盘阵列需要处理并执行的IO任务。在磁盘阵列的使用场景中,除了读写的IO任务,还有重构、恢复、慢盘等各种类型的内部IO任务。
可见,在实际的操作场景中需要操作的IO任务数量和类型复杂。而在现有技术中,对于内存池访问需要锁来保证内存池内存分配、释放、回收等操作。并且,在同一个流程里内存存在一次分配,多次释放;多次分配、一次释放;多次分配、多次释放等复杂流程。导致内存池的操作复杂化,影响存储系统的性能,也很容易造成内存泄漏等问题,影响了存储系统的稳定性。
因此,本实施例中基于无锁的内存池进行对应的内存资源的分配操作,具体参考以下的操作说明。
进一步的,本实施例中为了在不使用锁机制的情况下实现IO任务的分配,本实施例还可以包括:
步骤1,在接收IO任务之前,基于磁盘阵列或磁盘阵列区域的数量将内存池资源划分为包括多个内存池的内存池组;
步骤2,对每个磁盘阵列或每个磁盘阵列区域分配一个内存池。
可见,本可选方案中主要是说明在执行本实施例的步骤之前需要执行的设置操作。本可选方案中,在接收IO任务之前,基于磁盘阵列或磁盘阵列区域的数量将内存池资源划分为包括多个内存池的内存池组,对每个磁盘阵列或每个磁盘阵列区域分配一个内存池。也就是,在对每个磁盘阵列的IO任务进行处理之前,就对每个磁盘阵列单独设置对应的一个内存池,该内存池仅可以被对应的磁盘阵列使用,无法被其他磁盘阵列使用,同样也不对其他磁盘阵列发送的IO任务进行处理。因此,也就不存在多个IO任务下发后需要从一块内存池中获取资源的问题,进而也就不需要锁机制进行流程控制。
相应的,该内存池即为无锁内存池,由于不需要锁机制保持多IO任务的操作,因此,对于该内存池也就不需要使用锁机制。
S102,基于磁盘阵列对应的无锁内存池的内存资源链表对IO任务分配无锁内存池的内存节点;其中,无锁内存池与磁盘阵列一一对应;
在S101的基础上,本步骤旨在基于磁盘阵列对应的无锁内存池的内存资源链表对IO任务分配无锁内存池的内存节点;其中,无锁内存池与磁盘阵列一一对应。也就是说,该无锁内存池资源只能被该磁盘阵列使用,以保持对IO任务进行有效的内存池资源的分配。
其中,内存资源链表是指记录有该无锁内存池的资源信息的链表。例如,记录有哪些内存节点为可用使用的内存节点,哪些内存节点为正在使用的内存节点。相应的,该内存资源链表可以包括:空闲链表、后备链表、缓存链表组及hash表。其中,空闲链表主要是用于记录空闲的内存节点的链表,后备链表用于记录后备的空闲内存节点的链表,缓存链表组中设置有多个缓存链表,该缓存链表用于记录已被分配的内存节点。其中,该已被分配的内存节点可以是正在被使用的内存节点,也可以是使用结束的内存节点,在此不做具体限定。
进一步的,为了提高对IO任务分配内存节点的效率,以及提高分配时的准确性,避免出现分配到正在使用的内存节点,本步骤可以包括:
步骤1,当内存资源链表的空闲链表存在内存节点时,从空闲链表的头部取出第一个内存节点;
步骤2,将IO任务的条带号和IO请求指针写入内存节点,并放入缓存链表中,以实现对IO任务分配内存节点。
可见,本可选方案中主要是说明如何进行内存节点的分配。本可选方案中,当内存资源链表的空闲链表存在内存节点时,从空闲链表的头部取出第一个内存节点,将IO任务的条带号和IO请求指针写入内存节点,并放入缓存链表中,以实现对IO任务分配内存节点。也就是,该空闲链表中存在可以使用的内存节点,通过本可选方案中将该内存节点直接进行匹配并使用,实现快速匹配对应的内存节点,省去了上锁和内存释放等步骤。
进一步的,为了提高对IO任务分配内存节点的效率,以及提高分配时的准确性,避免出现分配到正在使用的内存节点,并且提高内存节点的使用效率,本步骤可以包括:
步骤1,当内存资源链表的空闲链表不存在内存节点时,从内存资源链表的后备链表中取出所有内存节点,并将所有内存节点放入空闲链表中;
步骤2,从空闲链表的头部取出第一个内存节点;
步骤3,将IO任务的条带号和IO请求指针写入内存节点,并放入缓存链表中,以实现对IO任务分配内存节点。
可见,本可选方案中同样是主要说明如何对IP任务分配对应的内存节点。本可选方案中,当内存资源链表的空闲链表不存在内存节点时,从内存资源链表的后备链表中取出所有内存节点,并将所有内存节点放入空闲链表中,从空闲链表的头部取出第一个内存节点,将IO任务的条带号和IO请求指针写入内存节点,并放入缓存链表中,以实现对IO任务分配内存节点。也就是,当空闲链表中不存在内存节点时,无法从该空闲链表中匹配到对应的内存节点,因此,将后备链表中内存节点翻入空闲链表中,使得继续从该空闲链表中获取内存节点。提高了匹配内存节点的可靠性,避免因内存节点使用完导致的分配出错的问题。
此外,为了使得内存节点可以循环使用,提高内存节点的使用效率,避免出现没有内存节点用于匹配的情况,上一可选方案还可以包括:
当内存资源链表包括多个缓存链表时,从第一个缓存链表取出所有内存节点,并将所有内存节点放入后备链表中。
可见,本可选方案中主要是说明如何将内存节点进行循环使用。本可选方案中可以当预设条件触发时,从第一个缓存链表取出所有内存节点,并将所有内存节点放入后备链表中。其中,预设条件可以是后备链表的内存节点被全部使用时,也可以是该第一缓存链表的后续N个缓存链表均被记录内存节点记录满,还可以是第一缓存链表中记录的最后一个内存节点的使用时间是否大于预设时间。可见,本可选方案中进行操作的条件并不唯一,在此不做具体限定,可以选择合适的条件进行操作。
进一步的,为了避免获取到还在使用的内存节点,避免IO处理过程出现问题,上一可选方案中“步骤2,从空闲链表的头部取出第一个内存节点”的步骤,可以包括:
步骤1,从空闲链表的头部取出第一个内存节点;
步骤2,判断第一个内存节点是否存在正在处理的IO任务;
步骤3,若是,则将内存节点放入缓存链表中,并取出并检查下一个内存节点是否存在正在处理的IO任务,直至取出空闲的内存节点。
可见,本可选方案中主要是说明如何从空闲链表中取出可以使用的内存节点。本可选方案中,从空闲链表的头部取出第一个内存节点,判断第一个内存节点是否存在正在处理的IO任务,若是,则将内存节点放入缓存链表中,并取出并检查下一个内存节点是否存在正在处理的IO任务,直至取出空闲的内存节点。也就是,在获取内存节点的时候,判断内存节点是否被正在使用,虽然该问题发生的概率较低,但是还需要通过本可选方案的判断操作避免出现操作问题,提高系统运行的稳定性。
此外,本步骤为了提高IO任务的处理效率,提高内存中资源的使用率,保持高效实用已经缓存的数据,本步骤中的内存资源链表还包括hash表。相应的,当接收磁盘阵列对应的IO任务时,还包括:
基于hash表确定并使用IO任务对应的缓存数据。
可见,本可选方案中主要是说明如何确定内存节点中的缓存数据。本可选方案中的内存资源链表还包括hash表,并基于该hash表确定并使用IO任务对应的缓存数据。也就是,IO请求内存时可能该条带对应的内存已经被缓存在缓存链表组内,因此先按照条带号查找hash链表,如果查找到,直接使用该内存。如果没有查找到,再从空闲链表中分配新的内存。实现了可以直接利用现有的内存节点的内容,而不用再下发数据,提高了处理过程的效率。
S103,采用内存节点对IO任务进行处理。
在S102的基础上,本步骤旨在采用内存节点对IO任务进行处理。也就是,在对该IO任务分配了内存池的资源的基础上,就可以对该IO任务进行对应的处理操作。
其中,进行处理操作的过程可以是进行IO读写,也可以是执行重构、恢复、慢盘等各种类型的内部IO任务,还可以是采用现有技术提供的任意一种IO任务处理操作,在此不做具体限定。
进一步的,为了提高对IO任务进行处理的效率,保持单一任务只有对应的线程进行处理,避免出现没有线程可用的情况,本步骤可以包括:
采用磁盘阵列对应的线程和内存节点对IO任务进行处理。
可见,本可选方案中主要是说明如何对IO任务进行处理。本可选方案中,采用磁盘阵列对应的线程和内存节点对IO任务进行处理。其中,采用了专一的线程对IO任务进行处理,保持了IO任务处理的效率。
综上,本实施例通过接收磁盘阵列对应的IO任务,然后基于该磁盘阵列对应的无锁内存池分类对应的内存节点,而不需要进行内存资源的是否有锁的判断,实现免锁操作,并且由于该内存池是与该磁盘阵列一一对应的,由于一个条带一次分配,且去掉了内存的释放和回收等操作,大大降低了内存池的使用的复杂性,减少了内存泄漏等容易产生的错误,提高了系统的健壮性,保持了内存资源使用的稳定性,同时避免了进行锁判断,提高了对内存池进行操作的效率。
以下通过另一具体的实施例,对本申请提供的一种内存池资源使用方法做进一步说明。
请参考图2,图2为本申请实施例所提供的一种内存池资源使用方法的内存资源结构示意图。
如图2所示,本实施例中,建立一套基于raid条带的内存池组,某一个raid或者raid区域的IO流程的内存分配均由该内存池组的一个内存池分配,且此内存池只分配该raid或者raid区域的内存请求;且该raid或者raid区域对应的IO流程及内存只由某一个线程来进行访问。
请参考图3,图3为本申请实施例所提供的一种内存池资源使用方法的内存资源链表结构示意图。
内存池内建立内存资源链表,分别是空闲链表、后备链表、缓存链表组及hash表;缓存链表组根据需要可以设定2个或者更多;此外还需要配置一个Hash表。
其中,空闲链表、后备链表初始化一定数量的内存节点,其单个内存节点大小为固定大小。例如可为整个条带大小加上IO条带管理结构所需内存大小。缓存链表组及hash表初始化为空表;后备链表与缓存链表组中的某个链表中的内存节点最大个数为N个。而空闲链表初始化资源为M*N个,其中M为缓存链表组的链表个数。
如果有IO访问某个条带,并进行内存分配请求,则从空闲链表头部获取一个内存节点,并在该内存中保存其条带号及使用该内存的IO请求结构的指针,放入缓存链表组中。同时将其按照条带号进行hash后放入hash表中。
可见,由于内存池只有分配操作,没有释放和回收操作。因此IO请求内存分配后,无需再对其进行释放操作。将相比较于现有技术,减少了进行内存释放的操作,提高操作的效率。
随着IO请求的进行,空闲链表中的内存逐渐减少,缓存链表组内的缓存逐渐增多,当缓存链表组内第一个缓存链表的资源个数达到其最大值N后,后续分配的内存节点放入下一个缓存链表中,依次类推。
当空闲链表中的内存分配完后,缓存链表组内的链表均达到最大值N。此时当新的内存请求到来时,取出后备链表中的所有内存节点,放入空闲链表。然后取出缓存链表组的第一个链表内的所有内存节点,放入后备链表中;该链表变成缓存链表组的最后一个链表,存放新分配的内存;缓存链表组的第二个链表变成第一个链表,第三个链表变成第二个链表,依次类推。如果空闲链表中内存节点再次用完时,再次重复此操作。
绝大多数情况下,从内存节点分配后进入缓存链表,再到进入后备链表、再到进入空闲链表,间隔时间很长。其当初请求该内存的IO已经结束,内存已经不再被使用。但是可能存在某种场景,其内存被缓存命中多次使用,甚至可能一直到其进入空闲链表仍然被使用的情况。
因此,当IO请求分配内存时,需检查空闲链表中的头部内存节点中保存的IO管理结构,以判断是否仍有IO使用该内存。如果没有IO使用,那么可以将该内存分配给该IO请求,并删除hash中的旧的条带号为hash值保存的节点。如果仍有IO使用,那么将其从空闲链表中取出,放入缓存链表中;然后再检查下一个内存节点,直到找到空闲的内存节点为止。
IO请求内存时可能该条带对应的内存已经被缓存在缓存链表组内,因此先按照条带号查找hash链表,如果查找到,直接使用该内存。如果没有查找到,再从空闲链表中分配新的内存。
可见,本实施例通过接收磁盘阵列对应的IO任务,然后基于该磁盘阵列对应的无锁内存池分类对应的内存节点,而不需要进行内存资源的是否有锁的判断,实现免锁操作,并且由于该内存池是与该磁盘阵列一一对应的,由于一个条带一次分配,且去掉了内存的释放和回收等操作,大大降低了内存池的使用的复杂性,减少了内存泄漏等容易产生的错误,提高了系统的健壮性,保持了内存资源使用的稳定性,同时避免了进行锁判断,提高了对内存池进行操作的效率。
下面对本申请实施例提供的内存池资源使用装置进行介绍,下文描述的内存池资源使用装置与上文描述的内存池资源使用方法可相互对应参照。
请参考图4,图4为本申请实施例所提供的一种内存池资源使用装置的结构示意图。
本实施例中,该装置可以包括:
IO任务接收模块100,用于接收磁盘阵列对应的IO任务;
内存资源分配模块200,用于基于磁盘阵列对应的无锁内存池的内存资源链表对IO任务分配无锁内存池的内存节点;其中,无锁内存池与磁盘阵列一一对应;
IO任务处理模块300,用于采用内存节点对IO任务进行处理。
可选的,该内存资源分配模块200,具体用于当内存资源链表的空闲链表存在内存节点时,从空闲链表的头部取出第一个内存节点;将IO任务的条带号和IO请求指针写入内存节点,并放入缓存链表中,以实现对IO任务分配内存节点。
可选的,该内存资源分配模块200,具体用于当内存资源链表的空闲链表不存在内存节点时,从内存资源链表的后备链表中取出所有内存节点,并将所有内存节点放入空闲链表中;从空闲链表的头部取出第一个内存节点;将IO任务的条带号和IO请求指针写入内存节点,并放入缓存链表中,以实现对IO任务分配内存节点。
可选的,该内存资源分配模块200,还包括:
内存节点迁移单元,用于当内存资源链表包括多个缓存链表时,从第一个缓存链表取出所有内存节点,并将所有内存节点放入后备链表中。
可选的,该内存资源分配模块200中“从空闲链表的头部取出第一个内存节点”的步骤,可以包括:从空闲链表的头部取出第一个内存节点;判断第一个内存节点是否存在正在处理的IO任务;若是,则将内存节点放入缓存链表中,并取出并检查下一个内存节点是否存在正在处理的IO任务,直至取出空闲的内存节点。
可选的,该装置还可以包括:
内存池分配模块,用于在接收IO任务之前,基于磁盘阵列或磁盘阵列区域的数量将内存池资源划分为包括多个内存池的内存池组;对每个磁盘阵列或每个磁盘阵列区域分配一个内存池。
可选的,该IO任务处理模块300,具体用于采用磁盘阵列对应的线程和内存节点对IO任务进行处理。
可选的,该装置还可以包括:
缓存数据查找模块,用于基于hash表确定并使用IO任务对应的缓存数据。
本申请实施例还提供一种服务器,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如以上实施例所述的内存池资源使用方法的步骤。
本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如以上实施例所述的内存池资源使用方法的步骤。
说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上对本申请所提供的一种内存池资源使用方法、内存池资源使用装置、服务器以及计算机可读存储介质进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。
Claims (9)
1.一种内存池资源使用方法,其特征在于,包括:
接收磁盘阵列对应的IO任务;其中,所述IO任务为所述磁盘阵列中待处理并执行的IO任务,包括读写IO任务以及重构、恢复、慢盘的内部IO任务;
基于所述磁盘阵列对应的无锁内存池的内存资源链表对所述IO任务分配所述无锁内存池的内存节点;其中,所述无锁内存池与所述磁盘阵列一一对应;
采用所述内存节点对所述IO任务进行处理;
其中,基于所述磁盘阵列对应的无锁内存池的内存资源链表对所述IO任务分配所述无锁内存池的内存节点,包括:
当所述内存资源链表的空闲链表存在内存节点时,从所述空闲链表的头部取出第一个内存节点;将所述IO任务的条带号和IO请求指针写入所述内存节点,并放入缓存链表中,以实现对所述IO任务分配所述内存节点;
当所述内存资源链表的空闲链表不存在内存节点时,从所述内存资源链表的后备链表中取出所有内存节点,并将所述所有内存节点放入所述空闲链表中;从所述空闲链表的头部取出第一个内存节点;将所述IO任务的条带号和IO请求指针写入所述内存节点,并放入缓存链表中,以实现对所述IO任务分配所述内存节点。
2.根据权利要求1所述的内存池资源使用方法,其特征在于,还包括:
当所述内存资源链表包括多个缓存链表时,从第一个缓存链表取出所有内存节点,并将所述所有内存节点放入所述后备链表中。
3.根据权利要求1所述的内存池资源使用方法,其特征在于,从所述空闲链表的头部取出第一个内存节点,包括:
从所述空闲链表的头部取出第一个内存节点;
判断所述第一个内存节点是否存在正在处理的IO任务;
若是,则将所述内存节点放入缓存链表中,并取出并检查下一个内存节点是否存在正在处理的IO任务,直至取出空闲的内存节点。
4.根据权利要求1所述的内存池资源使用方法,其特征在于,还包括:
在接收IO任务之前,基于所述磁盘阵列或磁盘阵列区域的数量将内存池资源划分为包括多个内存池的内存池组;
对每个所述磁盘阵列或每个所述磁盘阵列区域分配一个所述内存池。
5.根据权利要求1所述的内存池资源使用方法,其特征在于,采用所述内存节点对所述IO任务进行处理,包括:
采用所述磁盘阵列对应的线程和所述内存节点对所述IO任务进行处理。
6.根据权利要求1所述的内存池资源使用方法,其特征在于,所述内存资源链表还包括hash表;
相应的,当接收磁盘阵列对应的IO任务时,还包括:
基于所述hash表确定并使用所述IO任务对应的缓存数据。
7.一种内存池资源使用装置,其特征在于,包括:
IO任务接收模块,用于接收磁盘阵列对应的IO任务;其中,所述IO任务为所述磁盘阵列中待处理并执行的IO任务,包括读写IO任务以及重构、恢复、慢盘的内部IO任务;
内存资源分配模块,用于基于所述磁盘阵列对应的无锁内存池的内存资源链表对所述IO任务分配所述无锁内存池的内存节点;其中,所述无锁内存池与所述磁盘阵列一一对应;
IO任务处理模块,用于采用所述内存节点对所述IO任务进行处理;
其中,基于所述磁盘阵列对应的无锁内存池的内存资源链表对所述IO任务分配所述无锁内存池的内存节点的过程,包括:
当所述内存资源链表的空闲链表存在内存节点时,从所述空闲链表的头部取出第一个内存节点;将所述IO任务的条带号和IO请求指针写入所述内存节点,并放入缓存链表中,以实现对所述IO任务分配所述内存节点;
当所述内存资源链表的空闲链表不存在内存节点时,从所述内存资源链表的后备链表中取出所有内存节点,并将所述所有内存节点放入所述空闲链表中;从所述空闲链表的头部取出第一个内存节点;将所述IO任务的条带号和IO请求指针写入所述内存节点,并放入缓存链表中,以实现对所述IO任务分配所述内存节点。
8.一种服务器,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如权利要求1至6任一项所述的内存池资源使用方法的步骤。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述的内存池资源使用方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111438827.7A CN113849317B (zh) | 2021-11-29 | 2021-11-29 | 一种内存池资源使用方法及相关装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111438827.7A CN113849317B (zh) | 2021-11-29 | 2021-11-29 | 一种内存池资源使用方法及相关装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113849317A CN113849317A (zh) | 2021-12-28 |
CN113849317B true CN113849317B (zh) | 2022-03-22 |
Family
ID=78982498
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111438827.7A Active CN113849317B (zh) | 2021-11-29 | 2021-11-29 | 一种内存池资源使用方法及相关装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113849317B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117519988B (zh) * | 2023-12-28 | 2024-03-19 | 苏州元脑智能科技有限公司 | 一种基于raid的内存池动态调配方法、装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111679795A (zh) * | 2016-08-08 | 2020-09-18 | 北京忆恒创源科技有限公司 | 无锁并发io处理方法及其装置 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7254813B2 (en) * | 2002-03-21 | 2007-08-07 | Network Appliance, Inc. | Method and apparatus for resource allocation in a raid system |
CN105700826A (zh) * | 2015-12-31 | 2016-06-22 | 华为技术有限公司 | 虚拟化方法和装置 |
CN107688514A (zh) * | 2017-08-31 | 2018-02-13 | 郑州云海信息技术有限公司 | 一种多活raid读写系统 |
CN112241320B (zh) * | 2019-07-17 | 2023-11-10 | 华为技术有限公司 | 资源分配方法、存储设备和存储系统 |
CN111290711A (zh) * | 2020-01-21 | 2020-06-16 | 苏州浪潮智能科技有限公司 | 一种raid系统的io处理方法及相关装置 |
-
2021
- 2021-11-29 CN CN202111438827.7A patent/CN113849317B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111679795A (zh) * | 2016-08-08 | 2020-09-18 | 北京忆恒创源科技有限公司 | 无锁并发io处理方法及其装置 |
Also Published As
Publication number | Publication date |
---|---|
CN113849317A (zh) | 2021-12-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7293145B1 (en) | System and method for data transfer using a recoverable data pipe | |
US10860494B2 (en) | Flushing pages from solid-state storage device | |
US20060288159A1 (en) | Method of controlling cache allocation | |
US20160291881A1 (en) | Method and apparatus for improving disk array performance | |
US9513829B1 (en) | Transaction logging using round-robin block allocation and I/O size based partitions | |
US11449402B2 (en) | Handling of offline storage disk | |
US20240143188A1 (en) | Data processing method and apparatus, device, and readable storage medium | |
US20190347165A1 (en) | Apparatus and method for recovering distributed file system | |
CN111666046B (zh) | 一种数据存储方法、装置及设备 | |
CN113849317B (zh) | 一种内存池资源使用方法及相关装置 | |
CN115756955A (zh) | 一种数据备份、数据恢复的方法、装置及计算机设备 | |
CN111190537A (zh) | 一种追加写场景下顺序存储磁盘管理的方法及系统 | |
US11474938B2 (en) | Data storage system with multiple-size object allocator for disk cache | |
CN115904795A (zh) | 存储系统中的数据存储方法及装置 | |
CN115793957A (zh) | 写数据的方法、装置及计算机存储介质 | |
US11210236B2 (en) | Managing global counters using local delta counters | |
CN111611223B (zh) | 非易失性数据的访问方法、系统、电子设备和介质 | |
US11055184B2 (en) | In-place garbage collection of a sharded, replicated distributed state machine based on supersedable operations | |
CN107102898B (zh) | 一种基于numa架构的内存管理、构建数据结构的方法及装置 | |
US10877881B2 (en) | In-place garbage collection of a sharded, replicated distributed state machine based on mergeable operations | |
US9471409B2 (en) | Processing of PDSE extended sharing violations among sysplexes with a shared DASD | |
CN114564456B (zh) | 分布式存储文件的恢复方法及装置 | |
US20170235646A1 (en) | Cache-accelerated replication of snapshots between storage devices | |
US20210191851A1 (en) | System and method for facilitating reduction of latency and mitigation of write amplification in a multi-tenancy storage drive | |
CN117056363B (zh) | 数据缓存方法、系统、设备以及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |