CN114595043A - 一种io调度方法和装置 - Google Patents
一种io调度方法和装置 Download PDFInfo
- Publication number
- CN114595043A CN114595043A CN202210141875.8A CN202210141875A CN114595043A CN 114595043 A CN114595043 A CN 114595043A CN 202210141875 A CN202210141875 A CN 202210141875A CN 114595043 A CN114595043 A CN 114595043A
- Authority
- CN
- China
- Prior art keywords
- data
- cpu
- memory
- node
- thread
- 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.)
- Pending
Links
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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
-
- 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/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/505—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
Abstract
本发明公开了一种IO调度方法和装置,涉及计算机系统结构领域。该方法的一具体实施方式包括:接收传输的输入输出IO请求;其中,IO请求为读数据请求或写数据请求;当IO请求为读数据请求时,确定与读数据请求对应的目标CPU,以调度IO进程或线程到目标CPU的核上进行数据读取操作,返回读取到的数据;当IO请求为写数据请求时,确定与写数据请求对应的目标节点,以调度IO进程或线程将数据写入目标节点的CPU内存中。该实施方式综合考虑读写模式、IO大小、各节点/CPU的性能特点和使用情况,确定调度IO进程/线程的方式,避免调度错误,降低IO进程/线程在CPU核上来回调度的开销,以此提高系统的IO访问性能。
Description
技术领域
本发明涉及计算机系统结构领域,尤其涉及一种IO调度方法和装置。
背景技术
分布式持久性内存系统中包含丰富的计算、网络和存储资源,这些资源本身存在一些性能差异。在实现本发明过程中,发明人发现现有技术中至少存在如下问题:系统通常无法感知不同资源的性能特点等差异,也无法从全局角度最优地为执行IO(Input/Output,输入/输出)操作的进程/线程分配合适的资源,若配错将会严重影响业务的访问性能。
发明内容
有鉴于此,本发明实施例提供一种IO调度方法和装置,至少能够解决现有技术无法感知资源性能特点差异,导致调度IO进程/线程不合理的现象。
为实现上述目的,根据本发明实施例的一个方面,提供了一种IO调度方法,包括:
接收传输的输入输出IO请求;其中,所述IO请求为读数据请求或写数据请求;
当所述IO请求为读数据请求时,确定与所述读数据请求对应的目标CPU,以调度IO进程或线程到所述目标CPU的核上进行数据读取操作,返回读取到的数据;或
当所述IO请求为写数据请求时,确定与所述写数据请求对应的目标节点,以调度IO进程或线程将数据写入所述目标节点的CPU内存中;其中,所述写数据请求包括待写入的数据。
可选的,所述读数据请求包括CPU内存逻辑访问地址;
所述确定与所述读数据请求对应的目标CPU,以调度IO进程或线程到所述目标CPU的核上进行数据读取操作,包括:
根据所述CPU内存逻辑访问地址定位到所述目标CPU,判断所述目标CPU的负载利用率是否大于或等于预设负载利用率阈值;
根据判断结果,调度IO进程或线程到相应CPU的核上进行数据读取操作。
可选的,所述根据判断结果,调度IO进程或线程到相应CPU的核上进行数据读取操作,包括:
若小于,则调度IO进程或线程到所述目标CPU的核上进行数据读取操作;或
若大于或等于,则调度IO进程或线程到其他任一空闲CPU的核上,以通过所述任一空闲CPU远端访问所述目标CPU内存空间进行数据读取操作;其中,所述目标CPU和其他任一空闲CPU位于同一节点下。
可选的,所述根据所述CPU内存逻辑访问地址定位到所述目标CPU,包括:
使用一致性哈希算法处理所述CPU内存逻辑访问地址,得到哈希值,在预设哈希环上查询与所述哈希值对应的节点;
确定与所述CPU内存逻辑访问地址对应的实际内存访问地址,以在所述节点中根据所述实际内存访问地址定位到所述目标CPU。
可选的,所述在所述节点中根据所述实际内存访问地址定位到所述目标CPU,包括:
响应于单一节点存储所有待读取的数据,在所述单一节点中根据所述实际内存访问地址定位到目标CPU;或
响应于跨节点存储所有待读取的数据,统计每个节点下待读取的数据量或数据大小,以筛选出数据量或数据大小最大的第一节点,在所述第一节点中根据相应实际内存访问地址定位到目标CPU;
在从所述第一节点读取数据完毕后,筛选出数据量或数据大小排序第二的第二节点,重复上述目标CPU定位、负载利用率判断以及调度IO进程或线程操作,以进行数据读取操作,直至轮询得到所有待读取的数据。
可选的,所述读数据请求还包括IO大小,IO大小为待读取数据的总大小;
当单一节点存储所有待读取的数据时,所述判断所述目标CPU的负载利用率是否大于或等于预设负载利用率阈值,包括:
判断所述IO大小是否大于或等于预设大小阈值,若小于,则调度IO进程或线程到所述目标CPU的核上进行数据读取操作;或
若大于或等于,则判断所述目标CPU的负载利用率是否大于或等于预设负载利用率阈值。
可选的,所述方法还包括:
获取当前IO进程或线程在CPU的核上的分布情况;
若当前IO进程或线程位于所述目标CPU的核上,则调度IO进程或线程到所述目标CPU的核上进行数据读取操作,否则,调度IO进程或线程到其他任一空闲CPU的核上进行远端数据读取操作。
可选的,所述写入数据请求包括IO大小、目标节点的标识、待写入的数据;其中,IO大小为待写入数据的总大小;
所述调度IO进程或线程将数据写入所述目标节点的CPU内存中,包括:
根据所述目标节点的标识,获取所述目标节点当前的内存可用空间,判断所述内存可用空间是否大于或等于所述IO大小;
根据判断结果,调度IO进程或线程将数据写入相应节点的CPU内存中。
可选的,所述根据判断结果,调度IO进程或线程将数据写入相应节点的CPU内存中,包括:
若大于或等于,则调度IO进程或线程将数据写入所述目标节点的CPU内存中;其中,一个节点下包括多个CPU;或
若小于,则确定所述目标节点下具有最大内存可用空间的目标CPU,调度IO进程或线程将所述最大内存可用空间的数据,写入所述目标CPU的内存中,以及将剩余数据写入其他节点的CPU内存中。
可选的,所述将剩余数据写入其他节点的CPU内存中,包括:
从其他节点中筛选出当前内存可用空间最大的一个节点,判断当前内存可用空间是否大于或等于剩余数据的IO大小;
若大于或等于,则调度IO进程或线程将剩余数据均写入所述一个节点的CPU内存中;或
若小于,则将当前内存可用空间的数据写入所述一个节点,重复上述节点筛选以及比对空间大小操作,以将剩余数据写入多个节点的CPU内存中。
可选的,节点包括持久性内存;
在所述根据判断结果,调度IO进程或线程将数据写入相应节点的CPU内存中之后,所述方法还包括:
从数据的属性中,获取位于标志位上的持久化数值;
若所述持久化数值为预设值,则获取数据所在节点的持久性内存的当前可用空间,判断当前可用空间是否大于或等于数据的IO大小;
若大于或等于,则使用异步的方式,将节点CPU内存中的数据写入所述持久性内存中;或
若小于,则将节点CPU内存中所述当前可用空间的数据写入所述持久性内存中,将剩余数据写入其他节点的持久性内存中。
为实现上述目的,根据本发明实施例的另一方面,提供了一种IO调度装置,包括:
接收模块,用于接收传输的输入输出IO请求;其中,所述IO请求为读数据请求或写数据请求;
IO进程或线程调度子模块,用于当所述IO请求为读数据请求时,确定与所述读数据请求对应的目标CPU,以调度IO进程或线程到所述目标CPU的核上进行数据读取操作,返回读取到的数据;或
当所述IO请求为写数据请求时,确定与所述写数据请求对应的目标节点,以调度IO进程或线程将数据写入所述目标节点的CPU内存中;其中,所述写数据请求包括待写入的数据。
可选的,所述读数据请求包括CPU内存逻辑访问地址;
所述装置还包括定位模块,用于根据所述CPU内存逻辑访问地址定位到所述目标CPU;
CPU负载统计子模块,用于获取所述目标CPU的负载利用率;
所述IO进程或线程调度子模块,用于判断所述目标CPU的负载利用率是否大于或等于预设负载利用率阈值;
若小于,则调度IO进程或线程到所述目标CPU的核上进行数据读取操作;或
若大于或等于,则调度IO进程或线程到其他任一空闲CPU的核上,以通过所述任一空闲CPU远端访问所述目标CPU内存空间进行数据读取操作;其中,所述目标CPU和其他任一空闲CPU位于同一节点下。
可选的,所述定位模块,用于:
使用一致性哈希算法处理所述CPU内存逻辑访问地址,得到哈希值,在预设哈希环上查询与所述哈希值对应的节点;
确定与所述CPU内存逻辑访问地址对应的实际内存访问地址,以在所述节点中根据所述实际内存访问地址定位到所述目标CPU。
可选的,所述定位模块,用于:
响应于单一节点存储所有待读取的数据,在所述单一节点中根据所述实际内存访问地址定位到目标CPU;或
响应于跨节点存储所有待读取的数据,统计每个节点下待读取的数据量或数据大小,以筛选出数据量或数据大小最大的第一节点,在所述第一节点中根据相应实际内存访问地址定位到目标CPU;
在从所述第一节点读取数据完毕后,筛选出数据量或数据大小排序第二的第二节点,重复上述目标CPU定位、负载利用率判断以及调度IO进程或线程操作,以进行数据读取操作,直至轮询得到所有待读取的数据。
可选的,所述读数据请求还包括IO大小,IO大小为待读取数据的总大小;
当单一节点存储所有待读取的数据时,所述IO进程或线程调度子模块,用于:
判断所述IO大小是否大于或等于预设大小阈值,若小于,则调度IO进程或线程到所述目标CPU的核上进行数据读取操作;或
若大于或等于,则判断所述目标CPU的负载利用率是否大于或等于预设负载利用率阈值。
可选的,所述IO进程或线程调度子模块,还用于:
获取当前IO进程或线程在CPU的核上的分布情况;
若当前IO进程或线程位于所述目标CPU的核上,则调度IO进程或线程到所述目标CPU的核上进行数据读取操作,否则,调度IO进程或线程到其他任一空闲CPU的核上进行远端数据读取操作。
可选的,所述写入数据请求包括IO大小、目标节点的标识、待写入的数据;其中,IO大小为待写入数据的总大小;
所述装置还包括DRAM空间统计子模块,用于根据所述目标节点的标识,获取所述目标节点当前的内存可用空间;
所述IO进程或线程调度子模块,用于:
判断所述内存可用空间是否大于或等于所述IO大小;
若大于或等于,则调度IO进程或线程将数据写入所述目标节点的CPU内存中;其中,一个节点下包括多个CPU;或
若小于,则确定所述目标节点下具有最大内存可用空间的目标CPU,调度IO进程或线程将所述最大内存可用空间的数据,写入所述目标CPU的内存中,以及将剩余数据写入其他节点的CPU内存中。
可选的,所述IO进程或线程调度子模块,用于:
从其他节点中筛选出当前内存可用空间最大的一个节点,判断当前内存可用空间是否大于或等于剩余数据的IO大小;
若大于或等于,则调度IO进程或线程将剩余数据均写入所述一个节点的CPU内存中;或
若小于,则将当前内存可用空间的数据写入所述一个节点,重复上述节点筛选以及比对空间大小操作,以将剩余数据写入多个节点的CPU内存中。
可选的,节点包括持久性内存PM;
所述装置还包括PM空间统计子模块,用于:
从数据的属性中,获取位于标志位上的持久化数值;
若所述持久化数值为预设值,则获取数据所在节点的持久性内存的当前可用空间;
所述IO进程或线程调度子模块,用于:
判断当前可用空间是否大于或等于数据的IO大小;
若大于或等于,则使用异步的方式,将节点CPU内存中的数据写入所述持久性内存中;或
若小于,则将节点CPU内存中所述当前可用空间的数据写入所述持久性内存中,将剩余数据写入其他节点的持久性内存中。
为实现上述目的,根据本发明实施例的再一方面,提供了一种IO调度电子设备。
本发明实施例的电子设备包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现上述任一所述的IO调度方法。
为实现上述目的,根据本发明实施例的再一方面,提供了一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现上述任一所述的IO调度方法。
为实现上述目的,根据本发明实施例的又一个方面,提供了一种计算程序产品。本发明实施例的一种计算程序产品,包括计算机程序,所述程序被处理器执行时实现本发明实施例提供的IO调度方法。
根据本发明所述提供的方案,上述发明中的一个实施例具有如下优点或有益效果:根据读写模式和各硬件资源的性能特点,为IO进程/线程分配合适的计算、存储和网络资源,以减少在不同CPU核上的来回调动开销,提升系统的整体访问性能。同时针对PM写性能较差的缺点,优先将数据写入节点内存,之后再以异步持久化的方式写入PM,减少写时延。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是NUMA结构中一个节点的示意图;
图2(a)是存储节点node的结构示意图;
图2(b)是分布式持久性内存系统设置的结构示意图;
图3根据本发明实施例的一种IO调度方法的主要流程示意图;
图4是根据本发明实施例的一种的读数据IO调度方法的流程示意图;
图5是根据本发明实施例的一种的写数据IO调度方法的流程示意图;
图6是根据本发明实施例的一种可选的写数据IO调度方法的流程示意图;
图7是根据本发明实施例的一种IO调度装置的主要模块示意图;
图8是本发明实施例可以应用于其中的示例性系统架构图;
图9是适于用来实现本发明实施例的移动设备或服务器的计算机系统的结构示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
需要指出的是,在不冲突的情况下,本发明中的实施例以及实施例中的特征可以互相组合。本申请技术方案中对数据的获取、存储、使用、处理等均符合国家法律法规的相关规定。
分布式持久性内存系统中包含丰富的计算、网络和存储资源,这些资源本身存在一些性能差异,此处对现有技术进行详细描述:
1)NUMA(Non-Uniform Memory Access,非均匀内存访问架构)结构中的CPU,访问本地内存相比访问远端内存具有更低的时延
现有处理器通常采用NUMA结构,主板上通常安装多个CPU,每个CPU在物理层面都有自己的DRAM(Dynamic Random Access Memory,动态随机存取存储器)内存,共同组成一个NUMA Node(节点),每个NUMA Node通过IC(Interconnect Network,互连网络)访问其他CPU的DRAM内存。
同一节点下,CPU访问自己的DRAM内存通常被称为访问本地内存,访问其他CPU的内存被称为访问远端内存,每个CPU访问本地DRAM的时延比访问远端DRAM的时延要低很多。参见图1所示,NUMA结构中包含多个Node,每个CPU包含4个核且有独立的LLC(Logical LinkControl,逻辑链路控制)、本地DRAM内存和IO接口等,图中MC为Memory Controller(内存控制器)。每个Node通过IC访问其他Node的DRAM内存时的速度,相比访问本地DRAM内存要低很多。
2)相比普通以太网,RDMA(Remote Direct Memory Access,远程直接数据存取)网络具有更低的节点间访问时延和更高的传输带宽、且具有降低CPU开销的功能。
3)PM(Persistent Memory,持久性内存)作为新型存储器,目前已应用在分布式系统中。与DRAM内存相比,PM访问时延比DRAM高、带宽比DRAM低,但是掉电数据不丢失。持久性内存的读时延比写时延低,读带宽比写带宽高,即其本身读写操作存在不对称特性。
需要说明的是,掉电数据不丢失与掉电数据丢失相对,是一种通俗描述。存储分为易失性存储和非易失性存储,如通常用的磁盘、固态盘属于非易失性存储设备,可以长期保存数据,即使系统关机也不受影响。而DRAM内存属于易失性存储设备,系统关机后存储在DRAM内存上的数据就会丢失。此处的掉电数据是否丢失主要是指存储设备在保存数据时是否需要额外电源支持,比如DRAM内存在系统没有持续通电时数据会丢失,而磁盘、固态盘和持久性内存这类设备则不会丢失。
目前的分布式系统在为IO进程/线程分配计算、存储和网络资源时,存在一定的局限性。1)节点内部在调度IO进程/线程时,通常采用时间片轮转、先入先出等策略,因此IO进程/线程通常会不断在各个CPU上迁移,导致IO进程/线程无法利用CPU的共享数据提升访问性能,也可能会导致运行在本地CPU上的IO进程/线程访问远端CPU的内存数据而影响性能。2)在节点之间,现有分布式系统通常为易失性DRAM内存设计,导致无法感知持久性内存的性能特点,从而无法最优地分配计算、存储和网络资源给IO进程/线程。
参见图2(a)所示,为本方案提供的存储节点Node的结构示意图,包含存储器、处理器、内存、接口,内存分为易失性内存和非易失性内存,接口分为网络接口、用户接口和外部设备接口:
1)存储器,用于存储系统数据、应用程序和用户数据等,是整个存储节点的主存储设备,具有容量大,性能低等特点。
2)处理器,采用NUMA结构设计,通常安装多个CPU,在存储节点上执行主要的计算功能,通过调度IO进程/线程,以在不同处理器或处理器核心之间自由迁移。
3)内存
①易失性内存:程序运行的主要存储器,具有性能高、容量小,掉电数据易丢失等特性。
②非易失性内存:性能接近易失性内存且掉电数据不丢失,容量比非易失性内存大,既可以作为内存使用也可以作为持久性存储设备使用,但存在读写性能不对称等缺点,具体地读时延比写时延低、读带宽比写带宽高。
需要说明的是,本方案中的节点相对现有节点使用了非易失性内存(持久性内存PM,NVM(non-volatile memory,非易失性存储器)都是一类设备),相比现有大量使用的磁盘和固态硬盘具有良好的访问性能。由于非易失内存连接在内存总线上,因此不同节点之间的CPU可以通过RDMA高速网络,互相直接访问彼此的非易失内存数据。
4)接口
①网络接口:用以连接RDMA等高速通信网络,具有高带宽、低延迟等特点。
②用户接口:用户和存储系统进行交互和信息交换的媒介,如鼠标、键盘、显示器。
③外部设备接口:用以连接外部设备,减少处理器开销、额外提供辅助功能等。
本发明针对分布式持久性内存系统设置的结构如图2(b)所示:
1)用户通过网络访问分布式持久性内存系统;
2)分布式持久性内存系统由多个存储节点构成,不同存储节点之间使用高性能RDMA网络互联且采用高可用架构部署,即单个网络交换机故障不影响节点之间的正常网络通信访问。节点内部通常指不同的CPU之间互相访问,使用QPI(Quick Path Interconnect,一种可以实现芯片间直接互联的架构)总线连接。
参见图3,示出的是本发明实施例提供的一种IO调度方法的主要流程图,包括如下步骤:
S301:接收传输的输入输出IO请求;其中,所述IO请求为读数据请求或写数据请求;
S302:当所述IO请求为读数据请求时,确定与所述读数据请求对应的目标CPU,以调度IO进程或线程到所述目标CPU的核上进行数据读取操作,返回读取到的数据;
S303:当所述IO请求为写数据请求时,确定与所述写数据请求对应的目标节点,以调度IO进程或线程将数据写入所述目标节点的CPU内存中;其中,所述写数据请求包括待写入的数据。
上述实施方式中,对于步骤S301~S303,本方案主要应用于分布式持久性内存系统,分为读数据场景和写数据场景,因而收到的IO请求分为读数据请求和写数据请求。
实施例一,为读数据场景,具体参见图4所示:
S401:接收传输的读数据请求;其中,读数据请求包括CPU内存逻辑访问地址、IO大小,IO大小为待读取数据的总大小;
S402:使用一致性哈希算法处理所述CPU内存逻辑访问地址,得到哈希值,在预设哈希环上查询与所述哈希值对应的节点;
S403:确定与所述CPU内存逻辑访问地址对应的实际内存访问地址;
S404:响应于单一节点存储所有待读取的数据,在所述单一节点中根据所述实际内存访问地址定位到目标CPU,判断所述IO大小是否大于或等于预设大小阈值;
S405:若小于,则调度IO进程或线程到目标CPU的核上进行数据读取操作;
S406:若大于或等于,则判断目标CPU的负载利用率是否大于或等于预设负载利用率阈值;
S407:响应于跨节点存储所有待读取的数据,统计每个节点下待读取的数据量或数据大小,以筛选出数据量或数据大小最大的第一节点,在所述第一节点中根据相应实际内存访问地址定位到目标CPU;
S408:判断目标CPU的负载利用率是否大于或等于预设负载利用率阈值;
S409:若小于,则调度IO进程或线程到目标CPU的核上进行数据读取操作;或
S410:若大于或等于,则调度IO进程或线程到其他任一空闲CPU的核上,以通过所述任一空闲CPU远端访问所述目标CPU内存空间进行数据读取操作;其中,所述目标CPU和其他任一空闲CPU位于同一节点下;
S411:在从所述第一节点读取数据完毕后,筛选出数据量或数据大小排序第二的第二节点,重复上述目标CPU定位、负载利用率判断以及调度IO进程或线程操作,以进行数据读取操作,直至轮询得到所有待读取的数据。
本实施例中,对于步骤S401,不同应用程序所请求的数据大小不同,如打开一个很少内容的文本文档与打开一个大小很大的数据库文档,应用程序所请求的IO大小是不同的。
对于步骤S402,考虑到分布式系统中的有些节点可能会失效,并且新的节点可能会动态增加进来,因此在分布式系统中通常使用一致性Hash算法确定数据存储在哪个节点。一致性哈算法将整个哈希值空间组织成一个虚拟的圆环,即预设Hash环,算法定位数据访问到相应节点:将数据key(本方案为CPU内存逻辑访问地址)使用相同的函数Hash计算出哈希值,以确定此数据在圆环上的位置,从此位置沿环顺时针“行走”,第一个遇到的节点就是其应该定位到的节点。
对于步骤S403,节点内部设有CPU内存的实际访问地址,CPU内存逻辑访问地址与实际内存访问地址具有对应关系。通过该实际内存访问地址即可定位到具体CPU上,如定位到CPU1。
本方案仅设置一个IO进程/线程。可以考虑当前IO进程/线程的分布情况,获取其在节点中CPU的核上的分布情况,若位于目标CPU的核上,则后续可以直接调度IO进程或线程到目标CPU的核上进行数据读取操作,否则,需调度IO进程或线程到其他任一空闲CPU的核上进行远端数据读取操作。例如,文本文档存储在CPU1的内存上,而IO进程/线程当前被调度到了CPU0的核上执行,因为文本文档本身IO很小,尽管CPU0上的IO进程/线程在访问CPU1上的内存数据性能较差,但是相比将IO进程/线程调度到CPU1上执行的调度开销而言,这点性能损失是可以忽略的。但若IO进程/线程当前被调度到了CPU1的核上执行,则直接进行读数操作即可。
对于步骤S404~S406,现在处理器原理相同,使用命令即可看到相关信息,比如Linux下使用numactl-s命令。整个系统中的内存都是有统一编码地址的,根据编码地址即可判断出数据存储在哪个NUMA CPU的内存中,即目标CPU。当待读取的数据完全存放在单一节点时,首先定位单一节点下存储这些数据的CPU,然后根据数据IO大小选择下一步操作。判断IO大小是否大于或等于预设大小阈值,如64K;
1、当IO大小大于或等于预设大小阈值时,调度IO进程/线程到数据所在NUMA CPU的核上,以触发IO进程/线程进行数据读取操作;
2、当IO大小小于预设大小阈值时,判断数据所在NUMA CPU的利用率是否大于或等于预设利用率阈值,此处的预设利用率阈值可以设置为80%。
对于步骤S407和S408、S411,数据之所以会分散存放,是因为写入时目标节点存储资源不足,需寻找其他节点的可用空间存放,对应到数据读取则为跨节点存放。首先统计每个节点下待读取的数据量或数据大小,以筛选出数据量或数据大小最大的第一节点,在第一节点下确定目标CPU,判断目标CPU的负载利用率是否大于或等于预设负载利用率阈值。
例如,Node0-数据量为100、数据大小为1G,Node1-数据量为50、数据大小为2G,Node2-数据量为50、数据大小为500M,若根据数据量排序得到Node0-Node1-Node2,数据量相同时按照数据大小排序;但若根据数据大小排序,则得到Node1-Node0-Node2,同样若数据大小相同则按照数据量排序。依据不同方式所得NODE的排列方式不同。在从第一节点读取数据完毕后,需继续从剩余节点读取数据,直至读取到所有数据为止。
对于步骤S409和S410,若数据所在NUMA CPU的利用率没有大于或等于预设负载利用率阈值,则同样调度IO进程/线程到数据所在NUMA CPU的核上,以触发IO进程/线程进行数据读取操作;否则调度IO进程/线程到其他任一空闲NUMA CPU的核上面运行,以通过其他任一空闲NUMA CPU访问数据所在NUMA CPU进行远端读数操作。
例如,数据存储在CPU0的内存中,当数据较小且CPU0负载较高时,IO进程/线程在CPU0上可能长时间得不到运行,而CPU1、CPU2访问CPU0的数据时延是一样的,所以调度IO进程/线程到其他任一空闲CPU即可。另外,CPU只是进程/线程具体运行的地方,且IO进程/线程已经记录了数据的存储地址,此处仅仅是更换一个CPU读取而已,数据的地址不会发生改变。
实施例一所提供的方法,根据数据所在NUMA CPU利用率的使用情况,采用不同方式调度IO进程/线程,无论NUMA CPU的利用率是否超限,IO进程/线程均能快速完成读取操作,当数据较大、IO进程/线程当前位于其他CPU的核上,也可以保证IO进程/线程在同一个CPU上连续读取数据的方式开销最小,避免IO进程/线程频繁迁移。
实施例二,为写数据场景,具体参见图5所示
S501:接收传输的写数据请求;其中,所述写入数据请求包括IO大小、目标节点的标识、待写入的数据,IO大小为待写入数据的总大小;
S502:根据所述目标节点的标识,获取所述目标节点当前的内存可用空间,判断所述内存可用空间是否大于或等于所述IO大小;
S503:若大于或等于,则调度IO进程或线程将数据写入所述目标节点的CPU内存中;其中,一个节点下包括多个CPU;
S504:若小于,则确定所述目标节点下具有最大内存可用空间的目标CPU,调度IO进程或线程将所述最大内存可用空间的数据,写入所述目标CPU的内存中,并确定剩余数据的IO大小;
S505:从其他节点中筛选出当前内存可用空间最大的一个节点,判断当前内存可用空间是否大于或等于剩余数据的IO大小;
S506:若大于或等于,则调度IO进程或线程将剩余数据均写入所述一个节点的CPU内存中;
S507:若小于,则将当前内存可用空间的数据写入所述一个节点,重复上述节点筛选以及比对空间大小操作,以将剩余数据写入多个节点的CPU内存中。
本实施例中,对于步骤S501~S503,分布式持久性内存系统接收应用程序传输的写入数据请求,写入数据请求中包含IO大小、目标节点的标识、待写入的数据。根据目标节点的标识,获取目标节点的内存可用空间,判断内存可用空间是否大于或等于IO大小。
例如,node0、node1、node2的内存用空间分别为2G、15G和21G,应用程序传输的目标节点标识为node2,由于node2的21G>IO大小20G,则表示可以调度IO进程/线程,将这些数据全部写入node2的CPU内存中,但若node2的可用空间为18G,则表示需对本次写入的数据进行切片存储,即跨节点存储。
对于步骤S504,如果单节点内存不足,对于需要切片存储的情况,可以尽可能存入该节点,之后将剩余数据存入其他节点,如上例中,将18G个数据写入node2,使用RDMA网络将剩余2G个数据写入其他节点node0、node1。
该方式中,node2在存储完数据后,若后续仍有数据写入,由于不具备可用空间,因此会直接存储到其他节点上,本方案优选仅考虑node2下具有最大内存可用空间的目标CPU,如CPU0-5G、CPU1-6G、CPU2-7G,将7G个数据写入CPU2,剩余13G个数据写入其他节点node0、node1。每个NUMA CPU都有自己的本地内存,且本地内存可用空间都是有记录的。
对于步骤S505~S507,系统中的节点较多,确定其他节点的方式也较多,比如随机选取,如前述随机选择node0,将2G数据写入node0,11G个数据写入node1。或者对其他节点按照当前内存可用空间大小排序,确定当前内存可用空间最大的一个节点,如node1的15G>node0的2G,若node1的15G大于或等于剩余数据的IO大小,则表示剩余这些数据可全部写入node1。
但若node1当前内存可用空间为11G小于剩余数据的IO大小,则可以将11G数据写入node1,仍有2G数据剩余,则继续从剩余节点中筛选出当前内存可用空间最大的一个节点,以将2G数据写入。实际操作中,可能存在其他节点存储不足的情况,如node0、node1、node2的内存用空间分别为2G、5G和18G,node2下的CPU0-5G、CPU1-6G、CPU2-7G,在将7G数据写入CPU2后,剩余有13G数据,仅可以在node0、node1存入7G数据,此时可以继续考虑node2,以实现数据全部写入的目的。
实施例二所提供的方法,数据是否跨节点存放主要指写操作,当写入时一个节点的存储资源不足以完全存放要写入的所有数据时,需要跨节点存放,相应读数据也需跨节点读取。
本发明实施例所提供的方法,主要应用于分布式持久性内存系统的读写模式,以处理业务访问性能为主要目标,综合考虑IO大小、各节点/CPU的性能特点和使用情况,确定调度IO进程/线程的方式,避免调度错误,并降低IO进程/线程在CPU核上来回调动的开销,以此提高系统的处理性能。
参见图6,示出了根据本发明实施例的一种可选的IO调度方法流程示意图,包括如下步骤:
S601:从数据的属性中,获取位于标志位上的持久化数值;
S602:若所述持久化数值为预设值,则获取数据所在节点的持久性内存的当前可用空间,判断当前可用空间是否大于或等于数据的IO大小;
S603:若大于或等于,则使用异步的方式,将节点CPU内存中的数据写入所述持久性内存中;
S604:若小于,则将节点CPU内存中所述当前可用空间的数据写入所述持久性内存中,将剩余数据写入其他节点的持久性内存中。
上述实施方式中,对于步骤S601~S604,由于PM写时延较高、写带宽较低,直接将数据写入PM会导致较差的写性能,影响业务的整体性能,因此优先将数据写入节点CPU内存中,之后再将CPU内存中的数据写入PM。
数据在写入时会在其属性的标注位进行设置是否需要持久化。若需要持久化,则确定数据所在节点的持久化内存PM的当前可用空间大小,是否大于或等于要持久化的数据的IO大小:
1)若大于或等于,则当IO进程/线程所属NUMA CPU本地PM空间足够时,使用异步的方式,直接将内存中的数据写入本地PM,以完成持久化操作。
2)若小于,则在将节点CPU内存中可用空间大小的数据,写入本地持久性内存PM中后,使用RDMA网络传输剩余数据到其他节点PM中进行持久化存储。
分布式系统具有整合全局资源的能力,单个节点存储空间不足但是整个分布式系统空间足够即可。整个分布式系统中有专门负责统计各个资源使用情况的模块。另外,PM跟DRAM不同,DRAM数据如果需要持久化需写入PM,删除PM中的数据类似删除磁盘或者固态盘上面的数据一样。
上述实施例所提供的方法,当IO数据需要持久化时,优先利用DRAM较高的性能,将数据写入节点CPU内存完成写操作,然后再异步写入PM,以此有效避免PM的写瓶颈。
参见图7,示出了本发明实施例提供的一种IO调度装置700的主要模块示意图,包括:
接收模块701,用于接收传输的输入输出IO请求;其中,所述IO请求为读数据请求或写数据请求;
IO进程或线程调度子模块702,用于当所述IO请求为读数据请求时,确定与所述读数据请求对应的目标CPU,以调度IO进程或线程到所述目标CPU的核上进行数据读取操作,返回读取到的数据;或
当所述IO请求为写数据请求时,确定与所述写数据请求对应的目标节点,以调度IO进程或线程将数据写入所述目标节点的CPU内存中;其中,所述写数据请求包括待写入的数据。
本发明实施装置中,所述读数据请求包括CPU内存逻辑访问地址;
所述装置还包括定位模块,用于根据所述CPU内存逻辑访问地址定位到所述目标CPU;
CPU负载统计子模块,用于获取所述目标CPU的负载利用率;
所述IO进程或线程调度子模块702,用于判断所述目标CPU的负载利用率是否大于或等于预设负载利用率阈值;
根据判断结果,调度IO进程或线程到相应CPU的核上进行数据读取操作。
本发明实施装置中,所述IO进程或线程调度子模块702,用于:
若小于,则调度IO进程或线程到所述目标CPU的核上进行数据读取操作;或
若大于或等于,则调度IO进程或线程到其他任一空闲CPU的核上,以通过所述任一空闲CPU远端访问所述目标CPU内存空间进行数据读取操作;其中,所述目标CPU和其他任一空闲CPU位于同一节点下。
本发明实施装置中,所述定位模块,用于:
处理所述CPU内存逻辑访问地址,得到哈希值,在预设哈希环上查询与所述哈希值对应的节点;
确定与所述CPU内存逻辑访问地址对应的实际内存访问地址,以在所述节点中根据所述实际内存访问地址定位到所述目标CPU。
本发明实施装置中,所述定位模块,用于:
响应于单一节点存储所有待读取的数据,在所述单一节点中根据所述实际内存访问地址定位到目标CPU;或
响应于跨节点存储所有待读取的数据,统计每个节点下待读取的数据量或数据大小,以筛选出数据量或数据大小最大的第一节点,在所述第一节点中根据相应实际内存访问地址定位到目标CPU;
在从所述第一节点读取数据完毕后,筛选出数据量或数据大小排序第二的第二节点,重复上述目标CPU定位、负载利用率判断以及调度IO进程或线程操作,以进行数据读取操作,直至轮询得到所有待读取的数据。
本发明实施装置中,所述读数据请求还包括IO大小,IO大小为待读取数据的总大小;
当单一节点存储所有待读取的数据时,所述IO进程或线程调度子模块702,用于:
判断所述IO大小是否大于或等于预设大小阈值,若小于,则调度IO进程或线程到所述目标CPU的核上进行数据读取操作;或
若大于或等于,则判断所述目标CPU的负载利用率是否大于或等于预设负载利用率阈值。
本发明实施装置中,所述IO进程或线程调度子模块702,还用于:
获取当前IO进程或线程在CPU的核上的分布情况;
若当前IO进程或线程位于所述目标CPU的核上,则调度IO进程或线程到所述目标CPU的核上进行数据读取操作,否则,调度IO进程或线程到其他任一空闲CPU的核上进行远端数据读取操作。
本发明实施装置中,所述写入数据请求包括IO大小、目标节点的标识、待写入的数据;其中,IO大小为待写入数据的总大小;
所述装置还包括DRAM空间统计子模块,用于根据所述目标节点的标识,获取所述目标节点当前的内存可用空间;
所述IO进程或线程调度子模块702,用于:
判断所述内存可用空间是否大于或等于所述IO大小;
根据判断结果,调度IO进程或线程将数据写入相应节点的CPU内存中。
本发明实施装置中,所述IO进程或线程调度子模块702,用于:
若大于或等于,则调度IO进程或线程将数据写入所述目标节点的CPU内存中;其中,一个节点下包括多个CPU;或
若小于,则确定所述目标节点下具有最大内存可用空间的目标CPU,调度IO进程或线程将所述最大内存可用空间的数据,写入所述目标CPU的内存中,以及将剩余数据写入其他节点的CPU内存中。
本发明实施装置中,所述IO进程或线程调度子模块702,用于:
从其他节点中筛选出当前内存可用空间最大的一个节点,判断当前内存可用空间是否大于或等于剩余数据的IO大小;
若大于或等于,则调度IO进程或线程将剩余数据均写入所述一个节点的CPU内存中;或
若小于,则将当前内存可用空间的数据写入所述一个节点,重复上述节点筛选以及比对空间大小操作,以将剩余数据写入多个节点的CPU内存中。
本发明实施装置中,节点包括持久性内存PM;
所述装置还包括PM空间统计子模块,用于:
从数据的属性中,获取位于标志位上的持久化数值;
若所述持久化数值为预设值,则获取数据所在节点的持久性内存的当前可用空间;
所述IO进程或线程调度子模块702,用于:
判断当前可用空间是否大于或等于数据的IO大小;
若大于或等于,则使用异步的方式,将节点CPU内存中的数据写入所述持久性内存中;或
若小于,则将节点CPU内存中所述当前可用空间的数据写入所述持久性内存中,将剩余数据写入其他节点的持久性内存中。
本方案可以设置有RDMA网络管理子模块:负责在节点间建立高性能RDMA通信链路,实现对远端节点的读、写操作。
另外,在本发明实施例中所述装置的具体实施内容,在上面所述方法中已经详细说明了,故在此重复内容不再说明。
图8示出了可以应用本发明实施例的示例性系统架构800,包括终端设备801、802、803,网络804和服务器805(仅仅是示例)。
终端设备801、802、803可以是具有显示屏并且支持网页浏览的各种电子设备,安装有各种通讯客户端应用,用户可以使用终端设备801、802、803通过网络804与服务器805交互,以接收或发送消息等。
网络804用以在终端设备801、802、803和服务器805之间提供通信链路的介质。网络804可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
服务器805可以是提供各种服务的服务器,需要说明的是,本发明实施例所提供的方法一般由服务器805执行,相应地,装置一般设置于服务器805中。
应该理解,图8中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
下面参考图9,其示出了适于用来实现本发明实施例的终端设备的计算机系统900的结构示意图。图9示出的终端设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图9所示,计算机系统900包括中央处理单元(CPU)901,其可以根据存储在只读存储器(ROM)902中的程序或者从存储部分908加载到随机访问存储器(RAM)903中的程序而执行各种适当的动作和处理。在RAM 903中,还存储有系统900操作所需的各种程序和数据。CPU 901、ROM 902以及RAM 903通过总线904彼此相连。输入/输出(I/O)接口905也连接至总线904。
以下部件连接至I/O接口905:包括键盘、鼠标等的输入部分906;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分907;包括硬盘等的存储部分908;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分909。通信部分909经由诸如因特网的网络执行通信处理。驱动器910也根据需要连接至I/O接口905。可拆卸介质911,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器910上,以便于从其上读出的计算机程序根据需要被安装入存储部分908。
特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分909从网络上被下载和安装,和/或从可拆卸介质911被安装。在该计算机程序被中央处理单元(CPU)901执行时,执行本发明的系统中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括接收模块、IO进程或线程调度子模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,接收模块还可以被描述为“IO请求接收模块”。
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备执行上述IO调度方法。
本发明的计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现本发明实施例中的IO调度方法。
根据本发明实施例的技术方案,综合考虑读写模式、IO大小、各节点/CPU的性能特点和使用情况,确定调度IO进程/线程的方式,避免调度错误,并降低IO进程/线程在CPU核上来回调动的开销,以此提高系统的处理性能。同时针对PM写性能较差的缺点,优先将IO数据写入DRAM内存,之后以异步持久化的方式写入PM,减少写时延。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
Claims (25)
1.一种IO调度方法,其特征在于,包括:
接收传输的输入输出IO请求;其中,所述IO请求为读数据请求或写数据请求;
当所述IO请求为读数据请求时,确定与所述读数据请求对应的目标CPU,以调度IO进程或线程到所述目标CPU的核上进行数据读取操作,返回读取到的数据;或
当所述IO请求为写数据请求时,确定与所述写数据请求对应的目标节点,以调度IO进程或线程将数据写入所述目标节点的CPU内存中;其中,所述写数据请求包括待写入的数据。
2.根据权利要求1所述的方法,其特征在于,所述读数据请求包括CPU内存逻辑访问地址;
所述确定与所述读数据请求对应的目标CPU,以调度IO进程或线程到所述目标CPU的核上进行数据读取操作,包括:
根据所述CPU内存逻辑访问地址定位到所述目标CPU,判断所述目标CPU的负载利用率是否大于或等于预设负载利用率阈值;
根据判断结果,调度IO进程或线程到相应CPU的核上进行数据读取操作。
3.根据权利要求2所述的方法,其特征在于,所述根据判断结果,调度IO进程或线程到相应CPU的核上进行数据读取操作,包括:
若小于,则调度IO进程或线程到所述目标CPU的核上进行数据读取操作;或
若大于或等于,则调度IO进程或线程到其他任一空闲CPU的核上,以通过所述任一空闲CPU远端访问所述目标CPU内存空间进行数据读取操作;其中,所述目标CPU和其他任一空闲CPU位于同一节点下。
4.根据权利要求2所述的方法,其特征在于,所述根据所述CPU内存逻辑访问地址定位到所述目标CPU,包括:
处理所述CPU内存逻辑访问地址,得到哈希值,在预设哈希环上查询与所述哈希值对应的节点;
确定与所述CPU内存逻辑访问地址对应的实际内存访问地址,以在所述节点中根据所述实际内存访问地址定位到所述目标CPU。
5.根据权利要求4所述的方法,其特征在于,所述在所述节点中根据所述实际内存访问地址定位到所述目标CPU,包括:
响应于单一节点存储所有待读取的数据,在所述单一节点中根据所述实际内存访问地址定位到目标CPU;或
响应于跨节点存储所有待读取的数据,统计每个节点下待读取的数据量或数据大小,以筛选出数据量或数据大小最大的第一节点,在所述第一节点中根据相应实际内存访问地址定位到目标CPU;
在从所述第一节点读取数据完毕后,筛选出数据量或数据大小排序第二的第二节点,重复上述目标CPU定位、负载利用率判断以及调度IO进程或线程操作,以进行数据读取操作,直至轮询得到所有待读取的数据。
6.根据权利要求5所述的方法,其特征在于,所述读数据请求还包括IO大小,IO大小为待读取数据的总大小;
当单一节点存储所有待读取的数据时,所述判断所述目标CPU的负载利用率是否大于或等于预设负载利用率阈值,包括:
判断所述IO大小是否大于或等于预设大小阈值,若小于,则调度IO进程或线程到所述目标CPU的核上进行数据读取操作;或
若大于或等于,则判断所述目标CPU的负载利用率是否大于或等于预设负载利用率阈值。
7.根据权利要求2-6中任一项所述的方法,其特征在于,所述方法还包括:
获取当前IO进程或线程在CPU的核上的分布情况;
若当前IO进程或线程位于所述目标CPU的核上,则调度IO进程或线程到所述目标CPU的核上进行数据读取操作,否则,调度IO进程或线程到其他任一空闲CPU的核上进行远端数据读取操作。
8.根据权利要求1所述的方法,其特征在于,所述写入数据请求包括IO大小、目标节点的标识、待写入的数据;其中,IO大小为待写入数据的总大小;
所述调度IO进程或线程将数据写入所述目标节点的CPU内存中,包括:
根据所述目标节点的标识,获取所述目标节点当前的内存可用空间,判断所述内存可用空间是否大于或等于所述IO大小;
根据判断结果,调度IO进程或线程将数据写入相应节点的CPU内存中。
9.根据权利要求8所述的方法,其特征在于,所述根据判断结果,调度IO进程或线程将数据写入相应节点的CPU内存中,包括:
若大于或等于,则调度IO进程或线程将数据写入所述目标节点的CPU内存中;其中,一个节点下包括多个CPU;或
若小于,则确定所述目标节点下具有最大内存可用空间的目标CPU,调度IO进程或线程将所述最大内存可用空间的数据,写入所述目标CPU的内存中,以及将剩余数据写入其他节点的CPU内存中。
10.根据权利要求9所述的方法,其特征在于,所述将剩余数据写入其他节点的CPU内存中,包括:
从其他节点中筛选出当前内存可用空间最大的一个节点,判断当前内存可用空间是否大于或等于剩余数据的IO大小;
若大于或等于,则调度IO进程或线程将剩余数据均写入所述一个节点的CPU内存中;或
若小于,则将当前内存可用空间的数据写入所述一个节点,重复上述节点筛选以及比对空间大小操作,以将剩余数据写入多个节点的CPU内存中。
11.根据权利要求8-10中任一项所述的方法,其特征在于,节点包括持久性内存;
在所述根据判断结果,调度IO进程或线程将数据写入相应节点的CPU内存中之后,所述方法还包括:
从数据的属性中,获取位于标志位上的持久化数值;
若所述持久化数值为预设值,则获取数据所在节点的持久性内存的当前可用空间,判断当前可用空间是否大于或等于数据的IO大小;
若大于或等于,则使用异步的方式,将节点CPU内存中的数据写入所述持久性内存中;或
若小于,则将节点CPU内存中所述当前可用空间的数据写入所述持久性内存中,将剩余数据写入其他节点的持久性内存中。
12.一种IO调度装置,其特征在于,包括:
接收模块,用于接收传输的输入输出IO请求;其中,所述IO请求为读数据请求或写数据请求;
IO进程或线程调度子模块,用于当所述IO请求为读数据请求时,确定与所述读数据请求对应的目标CPU,以调度IO进程或线程到所述目标CPU的核上进行数据读取操作,返回读取到的数据;或
当所述IO请求为写数据请求时,确定与所述写数据请求对应的目标节点,以调度IO进程或线程将数据写入所述目标节点的CPU内存中;其中,所述写数据请求包括待写入的数据。
13.根据权利要求12所述的装置,其特征在于,所述读数据请求包括CPU内存逻辑访问地址;
所述装置还包括定位模块,用于根据所述CPU内存逻辑访问地址定位到所述目标CPU;
CPU负载统计子模块,用于获取所述目标CPU的负载利用率;
所述IO进程或线程调度子模块,用于判断所述目标CPU的负载利用率是否大于或等于预设负载利用率阈值;
根据判断结果,调度IO进程或线程到相应CPU的核上进行数据读取操作。
14.根据权利要求13所述的装置,其特征在于,所述IO进程或线程调度子模块,用于:
若小于,则调度IO进程或线程到所述目标CPU的核上进行数据读取操作;或
若大于或等于,则调度IO进程或线程到其他任一空闲CPU的核上,以通过所述任一空闲CPU远端访问所述目标CPU内存空间进行数据读取操作;其中,所述目标CPU和其他任一空闲CPU位于同一节点下。
15.根据权利要求13所述的装置,其特征在于,所述定位模块,用于:
处理所述CPU内存逻辑访问地址,得到哈希值,在预设哈希环上查询与所述哈希值对应的节点;
确定与所述CPU内存逻辑访问地址对应的实际内存访问地址,以在所述节点中根据所述实际内存访问地址定位到所述目标CPU。
16.根据权利要求15所述的装置,其特征在于,所述定位模块,用于:
响应于单一节点存储所有待读取的数据,在所述单一节点中根据所述实际内存访问地址定位到目标CPU;或
响应于跨节点存储所有待读取的数据,统计每个节点下待读取的数据量或数据大小,以筛选出数据量或数据大小最大的第一节点,在所述第一节点中根据相应实际内存访问地址定位到目标CPU;
在从所述第一节点读取数据完毕后,筛选出数据量或数据大小排序第二的第二节点,重复上述目标CPU定位、负载利用率判断以及调度IO进程或线程操作,以进行数据读取操作,直至轮询得到所有待读取的数据。
17.根据权利要求16所述的装置,其特征在于,所述读数据请求还包括IO大小,IO大小为待读取数据的总大小;
当单一节点存储所有待读取的数据时,所述IO进程或线程调度子模块,用于:
判断所述IO大小是否大于或等于预设大小阈值,若小于,则调度IO进程或线程到所述目标CPU的核上进行数据读取操作;或
若大于或等于,则判断所述目标CPU的负载利用率是否大于或等于预设负载利用率阈值。
18.根据权利要求13-17中任一项所述的装置,其特征在于,所述IO进程或线程调度子模块,还用于:
获取当前IO进程或线程在CPU的核上的分布情况;
若当前IO进程或线程位于所述目标CPU的核上,则调度IO进程或线程到所述目标CPU的核上进行数据读取操作,否则,调度IO进程或线程到其他任一空闲CPU的核上进行远端数据读取操作。
19.根据权利要求12所述的装置,其特征在于,所述写入数据请求包括IO大小、目标节点的标识、待写入的数据;其中,IO大小为待写入数据的总大小;
所述装置还包括动态随机存取存储DRAM空间统计子模块,用于根据所述目标节点的标识,获取所述目标节点当前的内存可用空间;
所述IO进程或线程调度子模块,用于:
判断所述内存可用空间是否大于或等于所述IO大小;
根据判断结果,调度IO进程或线程将数据写入相应节点的CPU内存中。
20.根据权利要求19所述的装置,其特征在于,所述IO进程或线程调度子模块,用于:
若大于或等于,则调度IO进程或线程将数据写入所述目标节点的CPU内存中;其中,一个节点下包括多个CPU;或
若小于,则确定所述目标节点下具有最大内存可用空间的目标CPU,调度IO进程或线程将所述最大内存可用空间的数据,写入所述目标CPU的内存中,以及将剩余数据写入其他节点的CPU内存中。
21.根据权利要求20所述的装置,其特征在于,所述IO进程或线程调度子模块,用于:
从其他节点中筛选出当前内存可用空间最大的一个节点,判断当前内存可用空间是否大于或等于剩余数据的IO大小;
若大于或等于,则调度IO进程或线程将剩余数据均写入所述一个节点的CPU内存中;或
若小于,则将当前内存可用空间的数据写入所述一个节点,重复上述节点筛选以及比对空间大小操作,以将剩余数据写入多个节点的CPU内存中。
22.根据权利要求19-21中任一项所述的装置,其特征在于,节点包括持久性内存PM;
所述装置还包括PM空间统计子模块,用于:
从数据的属性中,获取位于标志位上的持久化数值;
若所述持久化数值为预设值,则获取数据所在节点的持久性内存的当前可用空间;
所述IO进程或线程调度子模块,用于:
判断当前可用空间是否大于或等于数据的IO大小;
若大于或等于,则使用异步的方式,将节点CPU内存中的数据写入所述持久性内存中;或
若小于,则将节点CPU内存中所述当前可用空间的数据写入所述持久性内存中,将剩余数据写入其他节点的持久性内存中。
23.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-11中任一所述的方法。
24.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-11中任一所述的方法。
25.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-11中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210141875.8A CN114595043A (zh) | 2022-02-16 | 2022-02-16 | 一种io调度方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210141875.8A CN114595043A (zh) | 2022-02-16 | 2022-02-16 | 一种io调度方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114595043A true CN114595043A (zh) | 2022-06-07 |
Family
ID=81805563
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210141875.8A Pending CN114595043A (zh) | 2022-02-16 | 2022-02-16 | 一种io调度方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114595043A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116010047A (zh) * | 2022-12-12 | 2023-04-25 | 爱芯元智半导体(上海)有限公司 | 线程调度方法、硬件电路及电子设备 |
WO2024027395A1 (zh) * | 2022-07-30 | 2024-02-08 | 华为技术有限公司 | 一种数据处理方法及装置 |
CN117590923A (zh) * | 2024-01-19 | 2024-02-23 | 北京卡普拉科技有限公司 | 基于i/o访问降低功耗的方法、装置及设备 |
-
2022
- 2022-02-16 CN CN202210141875.8A patent/CN114595043A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024027395A1 (zh) * | 2022-07-30 | 2024-02-08 | 华为技术有限公司 | 一种数据处理方法及装置 |
CN116010047A (zh) * | 2022-12-12 | 2023-04-25 | 爱芯元智半导体(上海)有限公司 | 线程调度方法、硬件电路及电子设备 |
CN116010047B (zh) * | 2022-12-12 | 2023-12-15 | 爱芯元智半导体(宁波)有限公司 | 线程调度方法、硬件电路及电子设备 |
CN117590923A (zh) * | 2024-01-19 | 2024-02-23 | 北京卡普拉科技有限公司 | 基于i/o访问降低功耗的方法、装置及设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11157457B2 (en) | File management in thin provisioning storage environments | |
CN114595043A (zh) | 一种io调度方法和装置 | |
US9246840B2 (en) | Dynamically move heterogeneous cloud resources based on workload analysis | |
US20160269313A1 (en) | Opportunistic resource migration to optimize resource placement | |
US9998531B2 (en) | Computer-based, balanced provisioning and optimization of data transfer resources for products and services | |
US10678437B2 (en) | Method and device for managing input/output (I/O) of storage device | |
US10908940B1 (en) | Dynamically managed virtual server system | |
US10013264B2 (en) | Affinity of virtual processor dispatching | |
CN110389905B (zh) | 资源释放方法、资源分配方法、设备和计算机程序产品 | |
US10616134B1 (en) | Prioritizing resource hosts for resource placement | |
US9645747B2 (en) | Management of allocation for alias devices | |
KR20180089273A (ko) | 비순차적 리소스 할당을 구현하는 방법 및 장치 | |
US20140068165A1 (en) | Splitting a real-time thread between the user and kernel space | |
CN107070709B (zh) | 一种基于底层numa感知的nfv实现方法 | |
CN112148430A (zh) | 一种虚拟网络功能的虚拟机在线安全迁移的方法 | |
CN115639947A (zh) | 数据写入方法、数据读取方法、装置、设备、系统及介质 | |
CN116248699B (zh) | 多副本场景下的数据读取方法、装置、设备及存储介质 | |
CN112099728B (zh) | 一种执行写操作、读操作的方法及装置 | |
US10824640B1 (en) | Framework for scheduling concurrent replication cycles | |
US10673937B2 (en) | Dynamic record-level sharing (RLS) provisioning inside a data-sharing subsystem | |
CN115878309A (zh) | 资源分配方法、装置、处理核、设备和计算机可读介质 | |
US9176910B2 (en) | Sending a next request to a resource before a completion interrupt for a previous request | |
CN110704163A (zh) | 一种服务器及其虚拟化存储方法和装置 | |
CN109376014B (zh) | 一种分布式锁管理器实现方法和系统 | |
US11972148B2 (en) | Proactive storage operation management using thermal states |
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 |