CN112306927B - 一种io请求的处理方法、装置及系统 - Google Patents
一种io请求的处理方法、装置及系统 Download PDFInfo
- Publication number
- CN112306927B CN112306927B CN201910703789.XA CN201910703789A CN112306927B CN 112306927 B CN112306927 B CN 112306927B CN 201910703789 A CN201910703789 A CN 201910703789A CN 112306927 B CN112306927 B CN 112306927B
- Authority
- CN
- China
- Prior art keywords
- request
- priority
- thread
- file page
- value
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/22—Handling requests for interconnection or transfer for access to input/output bus using successive scanning, e.g. polling
- G06F13/225—Handling requests for interconnection or transfer for access to input/output bus using successive scanning, e.g. polling with priority control
-
- 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/0638—Organizing or formatting or addressing of data
- G06F3/0644—Management of space entities, e.g. partitions, extents, pools
-
- 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/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
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)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例公开了一种输入输出IO请求的处理方法、装置及系统,涉及电子设备领域,解决了需要同一文件页的IO请求等待时间过长的问题。具体方案为:处理器接收第一线程的第一数据处理请求并确定第一数据处理请求指示的文件页的第一标示位被设置为第一值。确定第一IO请求,第一IO请求为当前占用文件页的IO请求。根据第一线程将发起的IO请求的优先级,以及第一IO请求的优先级,设置文件页的至少一个第二标示位。处理器根据至少一个第二标示位,调整第一IO请求在软件队列中的位置以便根据第一IO请求在软件队列中调整后的位置,向存储器件发送第一IO请求对应的IO命令,以便存储器件根据IO命名执行第一数据处理请求对应的数据处理操作。
Description
技术领域
本申请实施例涉及电子设备领域,尤其涉及一种输入输出(Input Output,IO)请求的处理方法、装置及系统。
背景技术
在计算机系统(如Linux系统)中,程序运行过程中需要对可执行程序代码段以及资源文件执行一系列的操作。例如,将数据从存储器件读入内存中(如可称为读入操作),将需要持久化的数据回写到存储器件中(如可称为回写操作)等。这些操作在系统内部会以不同的IO请求来实现。具体的,Linux系统以页为单位管理内存,不同的操作(如上述读入操作或回写操作)可以通过不同的线程(Thread)发起不同的IO请求来实现。
Linux系统为了应对超出存储器件并发处理能力的IO请求,会在尽量提高IO吞吐量的同时,提供块设备限流机制、多优先级软件队列、以及多种输入输出调度器(IOScheduler,IO调度器)等方法,以便优先处理实时性要求高的IO请求,改善用户体验。例如,当出现的大量IO请求以至于超出存储器件的并发处理能力时,系统会将不能及时处理的IO请求按照不同的优先级缓存在IO调度器的软件队列中,以便存储器件中的控制器能够按照软件队列中IO请求的顺序,将具有较高优先级的IO请求优先提取到存储器件,并执行。其中,IO请求的优先级由其所对应的线程所要执行的操作的操作类型(如包括同步操作,异步操作)和线程优先级决定。且在IO请求被执行的过程中,操作类型和线程优先级无法变更,因此,IO请求的优先级是无法变更的。
另外,由于一个内存页同时只能被一个线程对应的IO请求所占用,因此,当出现多个并发线程需要使用同一个内存页时,就需要等待当前占用该内存页的线程完成后释放该内存页,才能继续按照顺序执行。那么,就可能会出现高优先级的IO请求需要等待低优先级的IO请求处理完成之后才能执行的情况,导致高优先级的IO请求等待时间过长。
发明内容
本申请实施例提供一种IO请求的处理方法、装置及系统,解决了当出现多个并发线程需要使用同一个内存页时,高优先级的IO请求等待时间过长的问题。
为达到所述目的,本申请实施例采用如下技术方案:
本申请实施例的第一方面,提供一种IO请求的处理方法,该方法可以应用于电子设备,电子设备包括处理器和存储器件,该方法可以包括:处理器接收第一线程的第一数据处理请求;处理器确定第一数据处理请求指示的文件页的第一标示位被设置为第一值,第一标示位被设置为第一值用于指示文件页已被IO请求占用;处理器确定第一IO请求,第一IO请求为当前占用文件页的IO请求;处理器根据第一线程将发起的IO请求的优先级,以及第一IO请求的优先级,设置文件页的至少一个第二标示位,第一线程将发起的IO请求的优先级高于第一IO请求的优先级,至少一个第二标示位用于指示存在线程等待释放文件页;处理器根据至少一个第二标示位,调整第一IO请求在软件队列中的位置;处理器根据第一IO请求在软件队列中调整后的位置,向存储器件发送第一IO请求对应的IO命令;其中,根据第一IO请求调整后的位置发送IO命令的时间早于根据第一IO请求调整前的位置发送IO命令的时间;存储器件根据IO命名执行第一数据处理请求对应的数据处理操作。
这样,处理器根据等待释放文件页的具有较高优先级的线程以及该线程的数据处理请求的操作类型,设置文件页的至少一个第二标示位,进而根据设置后的至少一个第二标示位调整占用文件页的优先级相对较低的第一IO请求在软件队列中的位置,以便第一IO请求可以被较快的执行,由此缩短了第一IO请求占用文件页的时间,也就达到了缩短具有较高优先级的线程等待的时间的目的,进而也就缩短了该线程将要发起的IO请求的等待时间。
结合第一方面,在一种可能的实现方式中,在处理器根据第一线程将发起的IO请求的优先级,以及第一IO请求的优先级,设置文件页的至少一个第二标示位之前,还包括:处理器根据第一线程的优先级和第一数据处理请求的操作类型,确定第一线程将发起的IO请求的优先级;处理器根据第二线程的优先级和第二数据处理请求的操作类型,确定第一IO请求的优先级,第二线程是发起第一IO请求的线程,第二数据处理请求是第二线程的数据处理请求;其中,线程的优先级由高到低依次包括:高优先级,中优先级和低优先级;数据处理请求的操作类型包括:同步操作和异步操作,IO请求的优先级由高到低依次包括:高优先级同步,中优先级同步,低优先级同步和异步。这样,处理器根据线程的优先级和数据处理请求的操作类型,就能够知晓不同线程将要或已经发起的IO请求的优先级情况。本申请实施例中,异步请求为优先级最低的IO请求,也就是说异步请求并不急于被执行,因此可以不需要区分发起异步请求的线程的优先级。也就是说,具有较高优先级的线程发起的IO请求的优先级也较高,具有较低优先级的线程发起的IO请求的优先级相对的优先级就较低,异步操作的线程发起的IO请求的优先级最低。因此,本申请所述方案要解决高优先级IO请求的长等待时间的问题也可以表述为解决具有较高优先级的线程将要发起的IO请求的等待时间过长的问题。
结合第一方面或上述可能的实现方式,在另一种可能的实现方式中,处理器确定第三线程,第三线程的数据处理请求指示的文件页与第一数据处理请求指示的文件页相同,第一线程将发起的IO请求的优先级高于第三线程将发起的IO请求的优先级,第三线程发起数据处理请求的时间早于第一线程发起第一数据处理请求的时间;处理器根据至少一个第二标示位,设置第三线程将发起的IO请求的同步标示和优先级标示;其中,同步标示和优先级标示用于指示第三线程将发起的IO请求的优先级;设置后第三线程将发起的IO请求的优先级高于设置前第三线程将发起的IO请求的优先级。这样,处理器就能够缩短等待释放文件页的处于较高优先级线程之前的低优先级线程的处理时间,进一步的缩短了高优先级线程的等待耗时。
结合第一方面或上述可能的实现方式,在另一种可能的实现方式中,文件页的第二标示位包括:PG_iosync标示位,PG_ioprio标示位和PG_iovip标示位;其中,PG_iosync标示位用于指示是否存在低优先级线程同步等待释放文件页,设置为第一值的PG_iosync标示位用于指示存在低优先级线程同步等待释放文件页,设置为第二值的PG_iosync标示位用于指示不存在低优先级线程同步等待释放文件页;PG_ioprio标示位用于指示是否存在中优先级线程同步等待释放文件页,设置为第一值的PG_ioprio标示位用于指示存在中优先级线程同步等待释放文件页,设置为第二值的PG_ioprio标示位用于指示不存在中优先级线程同步等待释放文件页;PG_iovip标示位用于指示是否存在高优先级线程同步等待释放文件页,设置为第一值的PG_iovip标示位用于指示存在高优先级线程同步等待释放文件页,设置为第二值的PG_iovip标示位用于指示不存在高优先级线程同步等待释放文件页。这样,利用不同的标示位的第一值或第二值的设置,就可以明确是否存在有较高优先级的线程正在等待该文件页被释放。
结合第一方面或上述可能的实现方式,在另一种可能的实现方式中,处理器根据第一线程将发起的IO请求的优先级,以及第一IO请求的优先级,设置文件页的至少一个第二标示位,包括:如果第一线程将发起的IO请求的优先级为高优先级同步,处理器设置PG_iovip标示位为第一值;如果第一线程将发起的IO请求的优先级为中优先级同步,处理器设置PG_ioprio标示位为第一值;如果第一线程将发起的IO请求的优先级为低优先级同步,处理器调整PG_iosync标示位为第一值。这样,根据正在等待释放文件页的线程将要发起的IO请求的优先级设置至少一个标示位,就可以准确的用第二标示位来体现正在等待释放文件页的线程将要发起的IO请求的优先级情况。
结合第一方面或上述可能的实现方式,在另一种可能的实现方式中,软件队列包括:高优先级同步队列和普通优先级同步队列;处理器根据至少一个第二标示位,调整第一IO请求在软件队列中的位置,包括:如果PG_iovip标示位为第一值,处理器将第一IO请求调整到高优先级同步队列的头部;如果PG_iovip标示位为第二值,且PG_ioprio标示位为第一值,处理器将第一IO请求调整到高优先级软件队列的尾部;如果PG_iovip标示位为第二值,且PG_ioprio标示位为第二值,且文件页的PG_iosync标示位为第一值,处理器将第一IO请求调整到普通先级软件队列的尾部。这样,根据至少一个第二标示位的设置情况,对应的调整占用文件页的IO请求在软件队列中的位置,就能够根据正在等待释放文件页的线程将要发起的IO请求的优先级,合理的提高占用文件页的IO请求在软件队列中的位置。
结合第一方面或上述可能的实现方式,在另一种可能的实现方式中,在处理器确定第一IO请求之后,该方法还包括:处理器确定第一IO请求在软件队列中。这样,处理器在确定了占用文件页的IO请求正处于软件队列中后,就可以对该IO请求在软件队列中的位置进行调整。
结合第一方面或上述可能的实现方式,在另一种可能的实现方式中,文件页还包括PG_ioqueued标示位和PG_ioissued标示位,其中,PG_ioqueued标示位用于指示占用文件页的IO请求是否已经进入软件队列,设置为第一值的PG_ioqueued标示位用于指示占用文件页的IO请求已经进入软件队列,设置为第二值的PG_ioqueued标示位用于指示占用文件页的IO请求没有进入软件队列;PG_ioissued标示位用于指示占用文件页的IO请求是否已经提交存储器件,设置为第一值的PG_ioissued标示位用于指示占用文件页的IO请求已经提交存储器件,设置为第二值的PG_ioissued标示位用于指示占用文件页的IO请求没有提交存储器件;处理器确定第一IO请求在软件队列中,包括:处理器确定文件页的PG_ioqueued标示位为第一值,且PG_ioissued标示位为第二值。这样,通过PG_ioqueued和PG_ioissued两个标示位的设置,处理器就可以明确的知晓正在占用该文件页的IO请求正在处理过程中的哪一部分,以便对IO请求进行对应的调整,最终缩短等待释放文件页的高优先级线程的等待时间。
第二方面,本申请实施例提供一种输入输出IO请求处理装置,该装置可以应用于电子设备,电子设备包括IO请求处理装置和存储器件,IO请求处理装置包括通信单元、确定单元和设置单元,其中,通信单元用于接收第一线程的第一数据处理请求;确定单元用于确定第一数据处理请求指示的文件页的第一标示位被设置为第一值,第一标示位被设置为第一值用于指示文件页已被IO请求占用;确定单元还用于确定第一IO请求,第一IO请求为当前占用文件页的IO请求;设置单元用于根据第一线程将发起的IO请求的优先级,以及第一IO请求的优先级,设置文件页的至少一个第二标示位,第一线程将发起的IO请求的优先级高于第一IO请求的优先级,至少一个第二标示位用于指示存在线程等待释放文件页;设置单元还用于根据至少一个第二标示位,调整第一IO请求在软件队列中的位置;通信单元还用于根据第一IO请求在软件队列中调整后的位置,向存储器件发送第一IO请求对应的IO命令,以便所述存储器件根据所述IO命名执行所述第一数据处理请求对应的数据处理操作;其中,根据第一IO请求调整后的位置发送IO命令的时间早于根据第一IO请求调整前的位置发送IO命令的时间。
结合第二方面,在一种可能的实现方式中,在设置单元用于根据第一线程将发起的IO请求的优先级,以及第一IO请求的优先级,设置文件页的至少一个第二标示位之前,确定单元还用于根据第一线程的优先级和第一数据处理请求的操作类型,确定第一线程将发起的IO请求的优先级;确定单元还用于根据第二线程的优先级和第二数据处理请求的操作类型,确定第一IO请求的优先级,第二线程是发起第一IO请求的线程,第二数据处理请求是第二线程的数据处理请求;其中,线程的优先级由高到低依次包括:高优先级,中优先级和低优先级;数据处理请求的操作类型包括:同步操作和异步操作,IO请求的优先级由高到低依次包括:高优先级同步,中优先级同步,低优先级同步和异步。
结合第二方面或上述可能的实现方式,在另一种可能的实现方式中,确定单元还用于确定第三线程,第三线程的数据处理请求指示的文件页与第一数据处理请求指示的文件页相同,第一线程将发起的IO请求的优先级高于第三线程将发起的IO请求的优先级,第三线程发起数据处理请求的时间早于第一线程发起第一数据处理请求的时间;设置单元还用于根据至少一个第二标示位,设置第三线程将发起的IO请求的同步标示和优先级标示;其中,同步标示和优先级标示用于指示第三线程将发起的IO请求的优先级;设置后第三线程将发起的IO请求的优先级高于设置前第三线程将发起的IO请求的优先级。
结合第二方面或上述可能的实现方式,在另一种可能的实现方式中,文件页的第二标示位包括:PG_iosync标示位,PG_ioprio标示位和PG_iovip标示位;其中,PG_iosync标示位用于指示是否存在低优先级线程同步等待释放文件页,设置为第一值的PG_iosync标示位用于指示存在低优先级线程同步等待释放文件页,设置为第二值的PG_iosync标示位用于指示不存在低优先级线程同步等待释放文件页;PG_ioprio标示位用于指示是否存在中优先级线程同步等待释放文件页,设置为第一值的PG_ioprio标示位用于指示存在中优先级线程同步等待释放文件页,设置为第二值的PG_ioprio标示位用于指示不存在中优先级线程同步等待释放文件页;PG_iovip标示位用于指示是否存在高优先级线程同步等待释放文件页,设置为第一值的PG_iovip标示位用于指示存在高优先级线程同步等待释放文件页,设置为第二值的PG_iovip标示位用于指示不存在高优先级线程同步等待释放文件页。
结合第二方面或上述可能的实现方式,在另一种可能的实现方式中,设置单元用于根据第一线程将发起的IO请求的优先级,以及第一IO请求的优先级,设置文件页的至少一个第二标示位,包括:如果第一线程将发起的IO请求的优先级为高优先级同步,设置单元设置PG_iovip标示位为第一值;如果第一线程将发起的IO请求的优先级为中优先级同步,设置单元设置PG_ioprio标示位为第一值;如果第一线程将发起的IO请求的优先级为低优先级同步,设置单元设置PG_iosync标示位为第一值。
结合第二方面或上述可能的实现方式,在另一种可能的实现方式中,软件队列包括:高优先级同步队列和普通优先级同步队列;设置单元根据至少一个第二标示位,调整第一IO请求在软件队列中的位置,包括:如果PG_iovip标示位为第一值,设置单元将第一IO请求调整到高优先级同步队列的头部;如果PG_iovip标示位为第二值,且PG_ioprio标示位为第一值,设置单元将第一IO请求调整到高优先级软件队列的尾部;如果PG_iovip标示位为第二值,且PG_ioprio标示位为第二值,且文件页的PG_iosync标示位为第一值,设置单元将第一IO请求调整到普通先级软件队列的尾部。
结合第二方面或上述可能的实现方式,在另一种可能的实现方式中,在确定单元用于确定第一IO请求之后,确定单元还用于确定第一IO请求在软件队列中。
结合第二方面或上述可能的实现方式,在另一种可能的实现方式中,文件页还包括PG_ioqueued标示位和PG_ioissued标示位,其中,PG_ioqueued标示位用于指示占用文件页的IO请求是否已经进入软件队列,设置为第一值的PG_ioqueued标示位用于指示占用文件页的IO请求已经进入软件队列,设置为第二值的PG_ioqueued标示位用于指示占用文件页的IO请求没有进入软件队列;PG_ioissued标示位用于指示占用文件页的IO请求是否已经提交存储器件,设置为第一值的PG_ioissued标示位用于指示占用文件页的IO请求已经提交存储器件,设置为第二值的PG_ioissued标示位用于指示占用文件页的IO请求没有提交存储器件;确定单元用于确定第一IO请求在软件队列中,包括:确定单元用于确定文件页的PG_ioqueued标示位为第一值,且PG_ioissued标示位为第二值。
第三方面,本申请实施例提供一种IO请求处理系统,该处理系统可以包括以上第二方面或第二方面的可能的实现方式中任一项所述的IO请求的IO请求处理装置。
第四方面,本申请实施例提供一种计算机存储介质,该计算机存储介质可以包括计算机指令,当该计算机指令在电子设备上运行时,使得电子设备执行如第一方面或第一方面的可能的实现方式中任一所述的IO请求的处理方法。
第五方面,本申请实施例提供一种计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机执行如第一方面或第一方面的可能的实现方式中任一所述的IO请求的处理方法。
应当理解的是,本申请中对技术特征、技术方案、有益效果或类似语言的描述并不是暗示在任意的单个实施例中可以实现所有的特点和优点。相反,可以理解的是对于特征或有益效果的描述意味着在至少一个实施例中包括特定的技术特征、技术方案或有益效果。因此,本说明书中对于技术特征、技术方案或有益效果的描述并不一定是指相同的实施例。进而,还可以任何适当的方式组合本实施例中所描述的技术特征、技术方案和有益效果。本领域技术人员将会理解,无需特定实施例的一个或多个特定的技术特征、技术方案或有益效果即可实现实施例。在其他实施例中,还可在没有体现所有实施例的特定实施例中识别出额外的技术特征和有益效果。
附图说明
图1为本申请实施例提供的一种电子设备的组成示意图;
图2为本申请实施例提供的另一种电子设备的组成示意图;
图3为现有技术提供的一种读入操作对应IO请求的处理流程示意图;
图4为本申请实施例提供的一种IO请求的处理方法的流程示意图;
图5为本申请实施例提供的一种读入操作对应IO请求的处理流程示意图;
图6为本申请实施例提供的一种处理装置的组成示意图。
具体实施方式
在设置有计算机系统(如Linux系统)的电子设备中,一般会通过IO请求来实现内部操作。为了应对大量的多线程并发IO请求,电子设备的处理器会按照一定的策略来对IO请求进行排序并依次处理。但是,按照现有的策略进行执行,可能会出现高优先级的IO请求需要等待低优先级的IO请求处理完成之后才能执行的问题。例如,可能产生以下问题:
(1)、当低优先级的同步IO请求进入较低优先级队列时,依赖该同步IO请求(即需要使用该同步IO请求占用的文件页)的较高优先级线程,只能等待其处理完成。其中,较高优先级线程发起的同步IO请求具有较高的优先级。也就是说,高优先级的同步IO请求需要等待低优先级的同步IO请求处理完成之后才能执行。
(2)、当系统内核发起定期回写脏页(即内存中被用户修改的数据页)的异步IO请求时,在系统处理该异步IO请求的过程中,针对该脏页发起同步写请求的线程,将很可能长时间等待。即出现同步IO请求需要等待异步IO请求处理完成后才能执行的情况。其中,同步IO请求的优先级高于异步IO请求的优先级。
图1为本申请实施例提供的一种电子设备100的组成示意图。如图1所示,在电子设备100中包括有处理器101和存储器件102。
其中,处理器101可以包括一个或多个处理单元,处理器101中还可以设置存储器,用于存储指令和参数。在一些实施例中,处理器101中的存储器为高速缓冲存储器。该存储器可以保存处理器101刚用过或循环使用的指令或参数。如果处理器101需要再次使用该指令或参数,可从所述存储器中直接调用。避免了重复存取,减少了处理器101的等待时间,因而提高了系统的效率。
存储器件102可以为外部存储器,电子设备100的处理器101可以通过外部存储器接口与外部存储器通信,实现参数存储功能。例如将存储器件102中的数据读入处理器中,或将处理器中的脏页回写到存储器件102中。外部存储器可以为非易失性存储器,例如多媒体卡(Multi-Media Card,mmc)、软盘、硬盘、固态硬盘(solid state disk,SSD)、光盘等各种可以存储程序代码的机器可读写介质。存储器件102能够实现扩展电子设备100的存储能力。
图2为本申请实施例提供的另一种电子设备100的组成示意图。该电子设备100可以划分为多个功能部件。如图2所示,电子设备100可以包括文件系统(filesystem)、文件缓存(filecache)、块核心(blk-core)、输入输出(IO)调度器、块设备驱动(driver)以及块设备主机(host)。
其中,文件系统(filesystem)、文件缓存(filecache)、块核心(blk-core)、输入输出(IO)调度器、块设备驱动(driver)的功能可与图1中的处理器101实现类似的功能。块设备主机(host)可与图1中的存储器件102实现类似的功能。
示例性的,filesystem以及filecache用于对缓存文件页进行管理,并临时存储文件数据。
blk-core可以提供多种接口,用于处理IO请求,如blk-core可以将IO请求进行合并、去重以及分发IO调度器等。
IO调度器中包括有不同的软件队列,每接到一个IO请求,IO调度器就可以根据该IO请求的优先级将该IO请求插入到对应软件队列的相应位置。IO调度器还可以响应块设备驱动的请求,将软件队列中的下一个IO请求传递给块设备驱动。
块设备驱动可以在获取IO请求之后,将IO请求对应的IO命令提交给块设备host。
块设备host中的块设备控制器按照接收IO命令的顺序形成硬件队列,并逐个执行IO命令所对应的数据处理请求。
示例性的,结合上述图1及图2,在处理器101处理多线程并发读取同一文件页数据时,假设所述多线程包括线程A和线程B,其中线程B先于线程A被处理器101提起。
如图3所示,线程B发起读入操作后,会请求filesystem为该读入操作分配内存页,以便filesystem向filecache发送分配内存页的命令。filecache根据该命令为线程B发起的读入操作分配对应的内存页,并设置该文件页中的PG_locked标示位。之后线程B会发起IO请求,IO调度器在接收到该IO请求后,会按照该IO请求的优先级的不同,将其放入软件队列中对应的位置。在线程B发起IO请求之后,如果线程A开始执行读入的操作,那么线程A也会向filesystem请求分配文件页,但此时该文件页正在被占用,因此,文件系统会告知线程A该文件页正在被占用,等待文件页被释放之后再执行。
对于进入软件队列中的IO请求,可按照以下过程完成IO请求的处理过程:如图3所示,块驱动设备会向IO调度器获取IO请求,以便IO调度器将软件队列中的下一个IO请求发送给块驱动设备。块驱动设备将该IO请求(如线程B发起的读入操作对应的IO请求)对应的IO命令发送给块设备主机,块设备主机就可以执行该读入操作,读取对应的数据,并将读取到的数据返回给块驱动设备,块驱动设备就可以指示IO调度器以及filecache完成回调。其中,filecache在回调的过程中,会将PG_locked标识位清除,以便唤醒等待中的线程(如线程A)执行对应的数据操作。
可以看到,虽然线程A的优先级高于线程B的优先级,但依然需要等待线程B执行完毕,将文件页释放出来之后才能执行。也就是说,高优先级的线程可能会排在低优先级的线程之后才执行,这就会导致高优先级的线程需要等待较长的时间才能够被执行。但是对于系统而言,高优先级的线程是希望被优先执行并获取结果的,因此,现有的执行方法显然不够合理。
类似的,若处理器101在处理多线程并发回写同一文件页数据,而有同步回写线程需要等待异步回写线程完成时,就会出现同步IO请求等待异步IO请求处理完成之后再执行的问题。
为了解决上述问题,本申请实施例提供一种IO请求的处理方法,能够有效的缩短具有较高优先级的线程的IO请求等待(IOwait)耗时,以提高系统资源使用效率。下面将结合附图对本申请实施例的实施方式进行详细描述。
示例性的,本申请实施例中的电子设备100可以是手机、平板电脑、桌面型、膝上型、手持计算机、笔记本电脑、超级移动个人计算机(ultra-mobile personal computer,UMPC)、上网本,以及蜂窝电话、个人数字助理(personal digital assistant,PDA)、增强现实(augmented reality,AR)\虚拟现实(virtual reality,VR)设备,可穿戴设备等设置有计算机系统的设备,本申请实施例对该设备的具体形态不作特殊限制。其中,电子设备100中的操作系统可以是Linux、Windows或其他计算机系统。
本申请实施例提供一种IO请求的处理方法,通过在文件页中新增标示位,并根据需要使用该文件页的IO请求的优先级对新增标示位进行修正。以便有需要使用同一文件页的具有更高优先级的IO请求将要被发起时,能够快速处理当前占用该文件页的IO请求,以减小高优先级IO请求等待耗时,进而使得具有更高优先级的IO请求能够被尽快执行,提高系统资源使用效率。
本申请实施例中,不同的IO请求具有不同的优先级。IO请求的优先级可以用IO请求中包括的同步标示和优先级标示来标示。其中,同步标示可以根据数据处理请求的操作类型(如同步操作或异步操作)来确定,优先级标示可以根据对应线程的优先级(如高优先级、中优先级或低优先级)确定。示例性的,IO请求按照优先级由高到低排序可以为高优先级同步请求、中优先级同步请求、低优先级同步请求以及异步请求。
例如,处理器可以根据第一线程的优先级(如线程A的优先级)和第一数据处理请求的操作类型(如线程A的数据处理请求的操作类型)确定第一线程将发起的IO请求的优先级(如线程A即将发起的IO请求的优先级)。
又如,处理器可以根据第二线程的优先级(如线程B的优先级)和第二数据处理请求的操作类型(如线程B的数据处理请求的操作类型)确定第一IO请求的优先级(如线程B发起的IO请求的优先级)。
另外,每个文件页都设置有多个标示位,用于标示该文件页当前所处状态。例如,文件页使用的多个标示位可以定义在Page-flags.h头文件的enum pageflags中,其中,多个标示位中的某些标示位可以用于标示该文件页当前所处的状态(如locked状态或writeback状态等)。
其中,多个enum pageflags标示位中包括有PG_locked标示位。当该文件页正在被IO请求使用进行读入操作时,PG_locked位会被设置为第一值(如第一值为1,或者说真),表示该文件页正在被使用。当前读入操作完成,PG_locked位会被清除(如设置为第二值,第二值可以为0),表示该文件页未被使用。当其他IO请求需要使用该文件页时,若PG_locked为1,那么就需要等待PG_locked位会清除之后再执行相关操作。
多个enum pageflags标示位中还可以包括有PG_writeback位。当该文件页正在被IO请求使用进行回写操作时,PG_writeback位会被设置第一值(如第一值为1,或者说真),表示该文件页正在被回写。当前回写操作完成,PG_writeback位会被设置为第二值(如第二值为0,或者说假),表示该文件页未被回写。当其他IO请求需要使用该文件页进行回写或其他操作时,若PG_writeback为第一值,那么就需要等待PG_writeback位会清除之后再执行。
在本申请实施例中,通过在文件页中新增标志位,用于对使用该文件页的IO请求的优先级进行修改。如,在文件页中新增的标示位可以包括PG_ioqueued标示位、PG_ioissued标示位、PG_iosync标示位,PG_ioprio标示位以及PG_iovip标示位。其中,PG_iosync标示位,PG_ioprio标示位以及PG_iovip标示位可以被称为第二标示位。这些标示位可以被设置为第一值(如1,表示“真”)或第二值(如0,表示“假”),当标示位未被电子设备的处理器设置时,默认为第二值。
示例性的,PG_ioqueued标示位可以用于指示占用文件页的IO请求是否已经进入软件队列。设置为第一值的PG_ioqueued标示位可以用于指示占用文件页的IO请求已经进入软件队列,设置为第二值的PG_ioqueued标示位可以用于指示占用文件页的IO请求没有进入软件队列。
PG_ioissued标示位可以用于指示占用文件页的IO请求是否已经提交存储器件。设置为第一值的PG_ioissued标示位可以用于指示占用文件页的IO请求已经提交存储器件,设置为第二值的PG_ioissued标示位可以用于指示占用文件页的IO请求没有提交存储器件。
PG_iosync标示位可以用于指示是否存在低优先级线程同步等待释放文件页。设置为第一值的PG_iosync标示位可以用于指示存在低优先级线程同步等待释放文件页,设置为第二值的PG_iosync标示位可以用于指示不存在低优先级线程同步等待释放文件页。
PG_ioprio标示位可以用于指示是否存在中优先级线程同步等待释放文件页。设置为第一值的PG_ioprio标示位可以用于指示存在中优先级线程同步等待释放文件页,设置为第二值的PG_ioprio标示位可以用于指示不存在中优先级线程同步等待释放文件页。
PG_iovip标示位可以用于指示是否存在高优先级线程同步等待释放文件页。设置为第一值的PG_iovip标示位可以用于指示存在高优先级线程同步等待释放文件页,设置为第二值的PG_iovip标示位可以用于指示不存在高优先级线程同步等待释放文件页。
需要说明的是,本申请实施例提供的IO请求的处理方法,可以用于处理多种不同的数据处理请求,如从存储器件读入的数据处理请求(可简称为读入请求)、将filecache中的文件页(如脏页)回写到存储器件的数据处理请求(可简称为回写请求)或其他请求。
以下以数据处理请求为读入请求,多个需要使用同一文件页的线程包括较低优先级的线程B以及较高优先级的线程A,且线程B的数据处理请求早于线程A的数据处理请求被处理器接收进行详细说明。该方法可以包括如图4所示的S401-S407。
S401、处理器接收第一线程的第一数据处理请求。
示例性的,该第一线程可以为线程A,第一数据处理请求可以为线程A发起的读入请求。正如前面的示例所说,在线程A发起读入请求之前,有第二线程(如线程B)已发起读入请求,且线程A发起的读入请求所要使用的文件页,与线程B发起的读入请求所要使用的文件页相同。
例如,以下结合图5,说明线程B发起读入请求后,后续的处理流程。如图5所示,线程B发起读入请求,该读入请求中可以包括文件描述符(fd)和该读入请求所要读取的文件的大小(size)。线程B向文件系统请求分配内存页,以将文件描述符fd和文件的大小size提供给文件系统(filesystem)。filesystem可以使用(mapping,index)的方法在文件缓存(filecache)中查询是否已经为该线程B分配了对应的文件页。如果查询结果为已经分配了文件页,那么线程B就可以直接发起IO请求,如果查询结果为还未分配文件页,那么filesystem就会在filecache中为线程B分配文件页,以便线程B能够发起IO请求。
S402、处理器确定第一数据处理请求指示的文件页的第一标示位被设置为第一值,第一标示位被设置为第一值用于指示文件页已被IO请求占用。
在将文件页分配给线程B时,filecache就会设置该文件页的PG_locked位,以确保同一文件页不会同时被多个线程所使用。如,可将PG_locked位设置为第一值(如1,表示“真”),以指示该文件页已被IO请求占用。
之后,当处理器接收到第一线程(如线程A)的第一数据处理请求(如需要使用该文件页的读入请求)时,如图5所示,类似于S401中的方法,线程A同样会将文件描述符fd和文件的大小size提供给文件系统(filesystem),以供filesystem在文件缓存(filecache)中查询文件页是否被分配。由于线程B优先于线程A发起使用该文件页的数据请求处理,也就是说,该文件页以便被线程B的IO请求所占用,此时filesystem根据该文件页的PG_locked位就会确定文件页已经被分配(即PG_locked位被设置),这样线程A就会等待PG_locked位被清除之后再发起IO请求。
S403、处理器确定第一IO请求,第一IO请求为当前占用文件页的IO请求。
如图5所示,在线程B发起IO请求(如第一IO请求)之后,块设备核心(blk-core)会将接收到的第一IO请求分发给对应的IO调度器。IO调度器会根据第一IO请求的优先级,将该第一IO请求插入到软件队列中的相应位置。同时,处理器可以设置该文件页的PG_ioqueued标示位,以指示占用该文件页的第一IO请求已经进入软件队列。
示例性的,IO调度器中的软件队列可以包括高优先级队列,普通优先级队列以及异步队列。如果IO请求对应的线程优先级为高优先级,其所要执行的数据操作类型为同步,那么,IO调度器就可以将该IO请求插入到高优先级队列的头部。如果IO请求对应的线程优先级为中优先级,其所要执行的数据操作类型为同步,那么,IO调度器就可以将该IO请求插入到高优先级队列的尾部。如果IO请求对应的线程优先级为低优先级,其所要执行的数据操作类型为同步,那么,IO调度器就可以将该IO请求插入到普通优先级队列的尾部。如果IO请求所要执行的数据操作类型为异步,那么,IO调度器就可以将该IO请求插入到异步队列的尾部。例如,线程B发起的第一IO请求为低优先级同步IO请求,那么IO调度器在接收到线程B发起的该IO请求之后,就可以将第一IO请求插入到普通优先级同步队列的尾部。
其中,高优先级队列中的IO请求会以最快的速度被处理,普通优先级队列中的IO请求被处理的速度次之,处于异步队列中的IO请求的被处理速度最慢。
处理器在接收到线程A之后,可以根据线程A所需要使用的文件页,确定该正在占用该文件页的IO请求(如第一IO请求)。同时,处理器根据该文件页的PG_ioqueued标示位,确定第一IO请求已经软件队列,而由于该文件页的PG_ioissued标示位并未被设置,因此处理器可以确定第一IO请求还未被提交给存储器件。也就是说,由于文件页的PG_ioqueued标示位为第一值,PG_ioissued标示位为第二值,因此,处理器可以确定第一IO请求正在处于软件队列中。
S404、处理器根据第一线程将发起的IO请求的优先级,以及第一IO请求的优先级,设置文件页的至少一个第二标示位,第一线程将发起的IO请求的优先级高于第一IO请求的优先级,至少一个第二标示位用于指示存在线程等待释放文件页。
其中,IO请求的优先级可以根据发起该IO请求的线程的优先级以及该线程所要执行的数据处理请求的操作类型决定。其中,线程的优先级按照高低顺序可以包括高优先级、中优先级以及低优先级。数据处理请求的操作类型可以包括同步操作和异步操作。其中,同步操作是希望被立即执行的操作,异步操作是可以等待系统空闲后再执行的操作。因此,IO请求的优先级由高到低可以为高优先级同步、中优先级同步、低优先级同步以及异步。
在本申请实施例中,由于异步操作是可以等待一段时间后再被执行的操作,因此,仅对同步操作的线程优先级进行区分。当然,也可以对异步操作的线程优先级也可以进行高低的区分,方法类似于同步操作,此处不再赘述。
示例性的,如果线程A将发起的IO请求的优先级为高优先级同步,处理器设置PG_iovip标示位为1。如果第一线程将发起的IO请求的优先级为中优先级同步,处理器设置PG_ioprio标示位为1。如果第一线程将发起的IO请求的优先级为低优先级同步,处理器调整PG_iosync标示位为1。
S405、处理器根据至少一个第二标示位,调整第一IO请求在软件队列中的位置。
示例性的,处理器可以根据如表1所示的对应关系调整第一IO请求在软件队列中的位置。
表1
表1中,X指示该标示位可以为1也可以为0。如表1所示,如果PG_iovip标示位为1,处理器将第一IO请求调整到高优先级同步队列的头部。如果PG_iovip标示位为0,且PG_ioprio标示位为1,处理器将第一IO请求调整到高优先级软件队列的尾部。如果PG_iovip标示位为0,且PG_ioprio标示位为0,且文件页的PG_iosync标示位为第一值,处理器将第一IO请求调整到普通先级软件队列的尾部。例如,结合S403中的示例,假设线程A将要发起的IO请求的优先级为高优先级同步,即文件页的PG_iovip标示位被标示为1,那么,处理器就可以将线程B发起的第一IO请求从普通优先级同步队列的尾部调整到高优先级同步队列的头部。
S406、处理器根据第一IO请求在软件队列中调整后的位置,向存储器件发送第一IO请求对应的IO命令。其中,根据第一IO请求调整后的位置发送IO命令的时间早于根据第一IO请求调整前的位置发送IO命令的时间。
如图5所示,块设备驱动(如mmcDriver)会向IO调度器请求IO请求,用于发送给存储器件(如块设备主机)进行处理。在IO调度器收到请求之后,可以根据一定的策略,将软件队列中的IO请求依次发送给块设备驱动。以便块设备驱动将IO请求对应的IO命令发送给块设备主机。同时,处理器可以设置该文件页中的PG_ioissued标示位,以标示占用该文件页的IO请求已经离开软件队列提交给了块设备主机。
示例性的,在单位时间内,被IO调度器传递给mmcDriver的处于高优先级同步队列的IO请求数量最多,处于普通优先级同步队列的IO请求数量次之,处于异步队列的IO请求数量最少。其中,在单位时间内被传递的IO请求的数量由块设备主机的并行处理能力决定,而单位时间内具体传递各个队列中的IO请求的最大数量可以由预置的策略确定。例如,假设块设备主机的最大并行处理数量为20个,那么,根据预置的策略,在单位时间内,IO调度器可以将最多10个高优先级同步队列中的IO请求传递给mmcDriver,IO调度器可以将最多7个普通先级同步队列中的IO请求传递给mmcDriver,IO调度器还可以将最多3个异步队列中的IO请求传递给mmcDriver。当某一队列中的IO请求少于该队列的最大传递数量时,可以视情况增加其他队列的最大传递数量。
可以理解的是,处理器根据第二标示位调整第一IO请求在软件队列中的位置之后,第一IO请求会被更快的传递给块设备驱动。例如,假设第一IO请求被调整之前处于普通优先级队列的尾部,处理器根据第一IO请求将第二标示位中的PG_iovip标示位设置为第一值,那么处理器就会将第一IO请求调整到高优先级队列的头部。这样,当块驱动设备向IO调度器获取IO请求时,IO调度器就会将第一IO请求发送给块驱动设备,进而缩短了第一IO请求在软件队列中的等待时间,从而能够使得等待该第一IO请求释放文件页的其他高优先级线程(如线程A)能够被快速的处理。
S407、存储器件根据IO命令执行第一数据处理请求对应的数据处理操作。
如图5所示,存储器件(如块设备主机)在接收到IO命令之后,会按照接收到IO命令的顺序,在块设备主机中生成硬件队列,并按照硬件队列中IO命令的顺序依次进行对应的数据处理。例如对读入操作对应的IO命令执行在对应的位置进行数据的读取,并将该数据返回给块设备驱动。又如对回写操作对应的IO命令执行将文件页中的数据写入对应的块设备主机中的位置。
进一步的,在完成了IO命令对应的数据操作之后,存储器件可以返回信息或者数据给块设备驱动,以便块设备驱动指示IO调度器和filecache进行回调,如将上述已经完成的IO命令对应的IO请求的相关内容进行初始化,以释放资源给其他的IO请求使用。同时,IO调度器可以清除文件页中的所有新增标示位,如PG_ioqueued标示位、PG_ioissued标示位、PG_iosync标示位,PG_ioprio标示位以及PG_iovip标示位。而filecache可以清除该文件页中的PG_locked位或PG_writeback标示位,以标识该文件页已经被释放,可以被其他线程使用。这样,filecache就可以唤醒正在等待中的线程A,并将该文件页分配给线程A用于执行后续的操作。
可以看到,本申请上述实施例提供的方案中,在线程B发起的第一IO请求已经进入软件队列之后,参考线程A即将发起的IO请求的优先级对第一IO请求在软件队列中的位置进行调整。
在另一些实施例中,该方法也可以是,在线程B的数据处理请求已经被处理器接收,但尚未发起IO请求时,处理器可以参考线程A的优先级以及数据处理请求的操作类型,直接调整线程B即将发起的IO请求的优先级,以使得线程B即将发起的IO请求的优先级不低于线程A即将发起的IO请求的优先级,具体执行方法可以参考如图4所示的S401-S407的方法,以便线程B即将发起的IO请求可以被IO调度器插入到优先级比较高的软件队列中,也就可以缩短线程B即将发起的IO请求被执行的时间,从而缩短线程A的等待时间。
在另一些实施例中,该方法也可以是,在线程B的数据处理请求已经被处理器接收,同时也发起了IO请求,但该IO请求尚未进入软件队列时,处理器可以参考线程A即将发起的IO请求的优先级,参考上述S401-S407调整线程B已经发起的IO请求的同步标示以及优先级标示,其中,同步标示和优先级标示可以用于指示该IO请求的优先级,从而调整线程B发起的IO请求在软件队列中的位置,以便该IO请求可以被较快的处理,从而缩短线程A的等待时间。
在另一些实施例中,在处理器接收到具有较高优先级的第一线程(如线程A)的处理处理请求时,如果该第一线程所需要使用的文件页已经被较低优先级的线程(第二线程,如线程B)占用,可通过加快对线程B的处理速度,使得线程A的等待时间缩短。另外,当线程A的数据处理请求被处理器接收时,如果在线程B正在占用该文件页之外,还存在第三线程正在等待该文件页被释放,并且该第三线程也是一个较低优先级的线程,那么,处理器在对该文件页执行上述S401-S407以便缩短线程B的执行时间的同时,还可以根据至少一个第二标志位设置第三线程将要发起的IO请求的同步标示和优先级标示。示例性的,结合上述S405中的示例,假设第三线程为线程C,该线程C将要发起的IO请求的优先级为中优先级同步,那么,为了进一步缩短线程A的等待时间,处理器可以根据文件页的至少一个第二标示位调整线程C将要发起的IO请求的优先级标示和同步标示,例如PG_iovip标示位为1,将线程C将要发起的IO请求的优先级标示由中优先级调整为高优先级。需要说明的是,由于线程C的具有优先级差异,因此其同步标示为同步,因此此处不需要对同步标示进行调整。可以理解的是,当线程C为一个异步操作时,可以根据至少一个第二标示为调整线程C将要发起的IO请求的优先级为高优先级,同时调整其同步标识为同步。由于第三线程的优先级低于线程A,因此,设置后的第三线程将要发起的IO请求的同步标示和优先级标示所指示的优先级要高于设置前的IO请求的优先级。这样,当第三线程将要发起的IO请求被提交给IO调度器后,就能够被IO调度器更快的提交给块设备驱动,也就缩短了第三线程的执行时间,这样就能够进一步的缩短线程A的等待时间。可以理解的是,上述第三线程可以是一个,也可以是多个,本申请实施例在此不做限制。
需要说明的是,本申请提供的IO请求的处理方法中,每个线程所需要使用的文件页可以为一个,也可以为多个。例如,假设一个文件页的容量为4KB,而某个操作需要读入8KB的数据时,那么该操作对应的线程就需要使用至少两个文件页。对于这种情况,本申请实施例提供了多种解决方法。
在一些实施例中,数据处理请求所要使用的文件页可以包括多个,那么,处理器就可以针对每个文件页执行上述S401-S407的方法。示例性的,线程A需要使用多个文件页(如文件页1、文件页2和文件页3),而目前文件页1正在被线程B占用,文件页2正在被线程C占用,文件页3正在被线程D占用,并且线程A即将发起的IO请求的优先级高于线程B、线程C或线程D对应的优先级。处理器可以针对多个文件页中的一个文件页(如文件页1)按照上述S401-S407的方法进行执行,使得该文件页对应的IO请求(如线程B对应的IO请求)尽快被处理。当线程B处理完成,文件页1被释放之后,处理器可以将该文件页1分配给线程A,并继续对多个文件页中的其他一个文件页(如文件页2)按照上述S401-S407的方法进行执行,使得线程C对应的IO请求尽快被处理。当线程C处理完成,文件页2被释放后,处理器将该文件页2分配给线程A,并继续对剩余的文件页按照上述S401-S407的方法进行执行。如此反复,就可以加快占用线程A需要使用的每一个文件页的IO请求的处理速度,以达到缩短线程A等待的时间的目的。
在另一些实施例中,数据处理请求所要使用的文件页可以包括多个,那么,处理器可以同时对以上多个IO请求执行S401-S407的方法。示例性的,线程A需要使用多个文件页(如文件页1、文件页2和文件页3),而目前文件页1正在被线程B占用,文件页2正在被线程C占用,文件页3正在被线程D占用,并且线程A即将发起的IO请求的优先级高于线程B、线程C或线程D对应的优先级。处理器可以根据线程A即将发起的IO请求的优先级,将线程B、线程C以及线程D各自对应的IO请求的优先级进行调整,以使得线程B、线程C以及线程D各自对应的IO请求在软件队列中的位置不低于线程A即将发起的IO请求在软件队列中的位置,以便加快占用文件页的IO请求的处理速度,缩短线程A等待的时间。
本申请实施例提供的IO请求的处理方法,通过在文件页中设置新增标示位,根据具有较高优先级的线程的优先级以及数据处理请求的操作类型,对新增标示位进行设置,进而根据新增标示位调整占用该文件页的IO请求在软件队列中的位置,使得IO调度器能够更快的将占用该文件页的IO请求发送给块设备驱动,以便缩短该IO请求的执行时间,也就是缩短较低优先级的IO请求对文件页的占用时间,以达到缩短高优先级的IO请求等待文件页释放的耗时的目的。
进一步的,如果存在低优先级线程先于高优先级线程的数据处理请求被处理器接收,但低优先级线程的IO请求并未进入软件队列,那么为了缩短高优先级线程的等待时间,无论该低优先级线程是否已经发起IO请求,本申请实施例提供的IO请求的处理方法,可以通过设置低优先级线程发起的IO请求的优先级或者低优先级线程将要发起的IO请求的同步标示和优先级标示,缩短低优先级线程发起的IO请求的执行时间,以达到进一步缩短高优先级的IO请求的等待耗时。
上述主要从电子设备的角度对本申请实施例提供的方案进行了介绍。可以理解的是,电子设备为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
本申请实施例可以根据上述方法示例对电子设备中的处理器进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
在采用对应各个功能划分各个功能模块的情况下,图6示出了本申请实施例提供的一种IO请求处理装置的组成示意图,如图6所示,该IO请求处理装置包括:通信单元601,确定单元602和设置单元603。
其中,通信单元601用于接收第一线程的第一数据处理请求。示例性的,通信单元601可以用于执行上述图4所示IO请求的处理方法的S401。
确定单元602用于确定第一数据处理请求指示的文件页的第一标示位被设置为第一值,第一标示位被设置为第一值用于指示文件页已被IO请求占用。示例性的,确定单元602可以用于执行上述图4所示IO请求的处理方法的S402。
确定单元602还用于确定第一IO请求,第一IO请求为当前占用文件页的IO请求。示例性的,确定单元602还可以用于执行上述图4所示IO请求的处理方法的S403。
设置单元603用于根据第一线程将发起的IO请求的优先级,以及第一IO请求的优先级,设置文件页的至少一个第二标示位,第一线程将发起的IO请求的优先级高于第一IO请求的优先级,至少一个第二标示位用于指示存在线程等待释放文件页。示例性的,设置单元603可以用于执行上述图4所示IO请求的处理方法的S404。
设置单元603还用于根据至少一个第二标示位,调整第一IO请求在软件队列中的位置。示例性的,设置单元603还可以用于执行上述图4所示IO请求的处理方法的S405。
通信单元601还用于根据第一IO请求在软件队列中调整后的位置,向存储器件发送第一IO请求对应的IO命令,以便所述存储器件根据所述IO命名执行所述第一数据处理请求对应的数据处理操作。其中,根据第一IO请求调整后的位置发送IO命令的时间早于根据第一IO请求调整前的位置发送IO命令的时间。示例性的,通信单元601还可以用于执行上述图4所示IO请求的处理方法的S406。
需要说明的是,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。本申请实施例提供的IO请求处理装置,用于执行上述数据处理方法,因此可以达到与上述数据处理方法相同的效果。
在采用集成的单元的情况下,上述实施例中所涉及的IO请求处理装置的另一种可能的组成中可以包括:处理模块和通信模块。
处理模块用于对IO请求处理装置的动作进行控制管理,例如,处理模块用于支持IO请求处理装置执行图4中的S401-S406和/或用于本文所描述的技术的其它过程。通信模块用于支持IO请求处理装置与其他网络实体的通信,例如与电子设备的其他功能模块或网络实体之间的通信。IO请求处理装置还可以包括存储模块,用于存储IO请求处理装置的程序代码和数据。
本申请实施例提供的IO请求处理装置,用于执行上述IO请求的处理方法,因此可以达到与上述数据处理方法相同的效果。
本申请实施例还提供一种输入输出IO请求的处理系统,该系统包括上述实施例提供的任意一种IO请求处理装置。
本申请实施例提供一种计算机存储介质,该计算机存储介质可以包括计算机指令,当该计算机指令在电子设备上运行时,使得电子设备执行如第一方面或第一方面的可能的实现方式中任一所述的IO请求的处理方法。
本申请实施例提供一种计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机执行如第一方面或第一方面的可能的实现方式中任一所述的IO请求的处理方法。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是一个物理单元或多个物理单元,即可以位于一个地方,或者也可以分布到多个不同地方。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何在本申请揭露的技术范围内的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。
Claims (17)
1.一种输入输出IO请求的处理方法,其特征在于,应用于电子设备,所述电子设备包括处理器和存储器件,所述方法包括:
所述处理器接收第一线程的第一数据处理请求;
所述处理器确定所述第一数据处理请求指示的文件页的第一标示位被设置为第一值,所述第一标示位被设置为第一值用于指示所述文件页已被IO请求占用;
所述处理器确定第一IO请求,所述第一IO请求为当前占用所述文件页的IO请求;
所述处理器根据所述第一线程将发起的IO请求的优先级,以及所述第一IO请求的优先级,设置所述文件页的至少一个第二标示位,所述第一线程将发起的IO请求的优先级高于所述第一IO请求的优先级,所述至少一个第二标示位用于指示存在线程等待释放所述文件页;
所述处理器根据所述至少一个第二标示位,调整所述第一IO请求在软件队列中的位置;
所述处理器根据所述第一IO请求在所述软件队列中调整后的位置,向所述存储器件发送所述第一IO请求对应的IO命令;其中,根据所述第一IO请求调整后的位置发送IO命令的时间早于根据所述第一IO请求调整前的位置发送IO命令的时间;
所述存储器件根据所述IO命令执行所述第一IO请求对应的数据处理操作;
在所述第一IO请求执行完成后,所述处理器清除所述文件页的第一标示位的值,并将所述文件页分配给所述第一线程的第一数据处理请求使用。
2.根据权利要求1所述的方法,其特征在于,在所述处理器根据所述第一线程将发起的IO请求的优先级,以及所述第一IO请求的优先级,设置所述文件页的至少一个第二标示位之前,还包括:
所述处理器根据所述第一线程的优先级和所述第一数据处理请求的操作类型,确定所述第一线程将发起的IO请求的优先级;
所述处理器根据第二线程的优先级和第二数据处理请求的操作类型,确定所述第一IO请求的优先级,所述第二线程是发起所述第一IO请求的线程,所述第二数据处理请求是所述第二线程的数据处理请求;
其中,线程的优先级由高到低依次包括:高优先级,中优先级和低优先级;数据处理请求的操作类型包括:同步操作和异步操作,IO请求的优先级由高到低依次包括:高优先级同步,中优先级同步,低优先级同步和异步。
3.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
所述处理器确定第三线程,所述第三线程的数据处理请求指示的文件页与所述第一数据处理请求指示的文件页相同,所述第一线程将发起的IO请求的优先级高于所述第三线程将发起的IO请求的优先级,所述第三线程发起数据处理请求的时间早于所述第一线程发起所述第一数据处理请求的时间;
所述处理器根据所述至少一个第二标示位,设置所述第三线程将发起的IO请求的同步标示和优先级标示;其中,所述同步标示和优先级标示用于指示所述第三线程将发起的IO请求的优先级;设置后所述第三线程将发起的IO请求的优先级高于设置前所述第三线程将发起的IO请求的优先级。
4.根据权利要求1或2所述的方法,其特征在于,所述文件页的第二标示位包括:PG_iosync标示位,PG_ioprio标示位和PG_iovip标示位;
其中,所述PG_iosync标示位用于指示是否存在低优先级线程同步等待释放所述文件页,设置为第一值的所述PG_iosync标示位用于指示存在低优先级线程同步等待释放所述文件页,设置为第二值的所述PG_iosync标示位用于指示不存在低优先级线程同步等待释放所述文件页;
所述PG_ioprio标示位用于指示是否存在中优先级线程同步等待释放所述文件页,设置为第一值的所述PG_ioprio标示位用于指示存在中优先级线程同步等待释放所述文件页,设置为第二值的所述PG_ioprio标示位用于指示不存在中优先级线程同步等待释放所述文件页;
所述PG_iovip标示位用于指示是否存在高优先级线程同步等待释放所述文件页,设置为第一值的所述PG_iovip标示位用于指示存在高优先级线程同步等待释放所述文件页,设置为第二值的所述PG_iovip标示位用于指示不存在高优先级线程同步等待释放所述文件页。
5.根据权利要求4所述的方法,其特征在于,所述处理器根据所述第一线程将发起的IO请求的优先级,以及所述第一IO请求的优先级,设置所述文件页的至少一个第二标示位,包括:
如果所述第一线程将发起的IO请求的优先级为高优先级同步,所述处理器设置所述PG_iovip标示位为第一值;
如果所述第一线程将发起的IO请求的优先级为中优先级同步,所述处理器设置所述PG_ioprio标示位为第一值;
如果所述第一线程将发起的IO请求的优先级为低优先级同步,所述处理器调整所述PG_iosync标示位为第一值。
6.根据权利要求5所述的方法,其特征在于,所述软件队列包括:高优先级同步队列和普通优先级同步队列;
所述处理器根据所述至少一个第二标示位,调整所述第一IO请求在软件队列中的位置,包括:
如果所述PG_iovip标示位为第一值,所述处理器将所述第一IO请求调整到所述高优先级同步队列的头部;
如果所述PG_iovip标示位为第二值,且所述PG_ioprio标示位为第一值,所述处理器将所述第一IO请求调整到所述高优先级同步队列的尾部;
如果所述PG_iovip标示位为第二值,且所述PG_ioprio标示位为第二值,且所述文件页的所述PG_iosync标示位为第一值,所述处理器将所述第一IO请求调整到所述普通优先级同步队列的尾部。
7.根据权利要求1或2或5或6所述的方法,其特征在于,在所述处理器确定第一IO请求之后,所述方法还包括:
所述处理器确定所述第一IO请求在所述软件队列中。
8.根据权利要求7所述的方法,其特征在于,所述文件页还包括PG_ioqueued标示位和PG_ioissued标示位,
其中,所述PG_ioqueued标示位用于指示占用所述文件页的IO请求是否已经进入所述软件队列,设置为第一值的所述PG_ioqueued标示位用于指示占用所述文件页的IO请求已经进入所述软件队列,设置为第二值的所述PG_ioqueued标示位用于指示占用所述文件页的IO请求没有进入所述软件队列;
所述PG_ioissued标示位用于指示占用所述文件页的IO请求是否已经提交所述存储器件,设置为第一值的所述PG_ioissued标示位用于指示占用所述文件页的IO请求已经提交所述存储器件,设置为第二值的所述PG_ioissued标示位用于指示占用所述文件页的IO请求没有提交所述存储器件;
所述处理器确定所述第一IO请求在所述软件队列中,包括:所述处理器确定所述文件页的所述PG_ioqueued标示位为第一值,且所述PG_ioissued标示位为第二值。
9.一种输入输出IO请求处理装置,其特征在于,应用于电子设备,所述电子设备包括所述IO请求处理装置和存储器件,所述IO请求处理装置包括通信单元、确定单元和设置单元,其中,
所述通信单元用于接收第一线程的第一数据处理请求;
所述确定单元用于确定所述第一数据处理请求指示的文件页的第一标示位被设置为第一值,所述第一标示位被设置为第一值用于指示所述文件页已被IO请求占用;
所述确定单元还用于确定第一IO请求,所述第一IO请求为当前占用所述文件页的IO请求;
所述设置单元用于根据所述第一线程将发起的IO请求的优先级,以及所述第一IO请求的优先级,设置所述文件页的至少一个第二标示位,所述第一线程将发起的IO请求的优先级高于所述第一IO请求的优先级,所述至少一个第二标示位用于指示存在线程等待释放所述文件页;
所述设置单元还用于根据所述至少一个第二标示位,调整所述第一IO请求在软件队列中的位置;
所述通信单元还用于根据所述第一IO请求在所述软件队列中调整后的位置,向所述存储器件发送所述第一IO请求对应的IO命令,以便所述存储器件执行所述第一IO请求对应的数据处理操作;其中,根据所述第一IO请求调整后的位置发送IO命令的时间早于根据所述第一IO请求调整前的位置发送IO命令的时间;
所述设置单元还用于在所述第一IO请求执行完成后,清除所述文件页的第一标示位的值,以便将所述文件页分配给所述第一线程的第一数据处理请求使用。
10.根据权利要求9所述的装置,其特征在于,
所述确定单元还用于根据所述第一线程的优先级和所述第一数据处理请求的操作类型,确定所述第一线程将发起的IO请求的优先级;
所述确定单元还用于根据第二线程的优先级和第二数据处理请求的操作类型,确定所述第一IO请求的优先级,所述第二线程是发起所述第一IO请求的线程,所述第二数据处理请求是所述第二线程的数据处理请求;
其中,线程的优先级由高到低依次包括:高优先级,中优先级和低优先级;数据处理请求的操作类型包括:同步操作和异步操作,IO请求的优先级由高到低依次包括:高优先级同步,中优先级同步,低优先级同步和异步。
11.根据权利要求9或10所述的装置,其特征在于,
所述确定单元还用于确定第三线程,所述第三线程的数据处理请求指示的文件页与所述第一数据处理请求指示的文件页相同,所述第一线程将发起的IO请求的优先级高于所述第三线程将发起的IO请求的优先级,所述第三线程发起数据处理请求的时间早于所述第一线程发起所述第一数据处理请求的时间;
所述设置单元还用于根据所述至少一个第二标示位,设置所述第三线程将发起的IO请求的同步标示和优先级标示;其中,所述同步标示和优先级标示用于指示所述第三线程将发起的IO请求的优先级;设置后所述第三线程将发起的IO请求的优先级高于设置前所述第三线程将发起的IO请求的优先级。
12.根据权利要求9或10所述的装置,其特征在于,所述文件页的第二标示位包括:PG_iosync标示位,PG_ioprio标示位和PG_iovip标示位;
其中,所述PG_iosync标示位用于指示是否存在低优先级线程同步等待释放所述文件页,设置为第一值的所述PG_iosync标示位用于指示存在低优先级线程同步等待释放所述文件页,设置为第二值的所述PG_iosync标示位用于指示不存在低优先级线程同步等待释放所述文件页;
所述PG_ioprio标示位用于指示是否存在中优先级线程同步等待释放所述文件页,设置为第一值的所述PG_ioprio标示位用于指示存在中优先级线程同步等待释放所述文件页,设置为第二值的所述PG_ioprio标示位用于指示不存在中优先级线程同步等待释放所述文件页;
所述PG_iovip标示位用于指示是否存在高优先级线程同步等待释放所述文件页,设置为第一值的所述PG_iovip标示位用于指示存在高优先级线程同步等待释放所述文件页,设置为第二值的所述PG_iovip标示位用于指示不存在高优先级线程同步等待释放所述文件页。
13.根据权利要求12所述的装置,其特征在于,所述设置单元用于根据所述第一线程将发起的IO请求的优先级,以及所述第一IO请求的优先级,设置所述文件页的至少一个第二标示位,包括:
如果所述第一线程将发起的IO请求的优先级为高优先级同步,所述设置单元设置所述PG_iovip标示位为第一值;
如果所述第一线程将发起的IO请求的优先级为中优先级同步,所述设置单元设置所述PG_ioprio标示位为第一值;
如果所述第一线程将发起的IO请求的优先级为低优先级同步,所述设置单元设置所述PG_iosync标示位为第一值。
14.根据权利要求13所述的装置,其特征在于,所述软件队列包括:高优先级同步队列和普通优先级同步队列;
所述设置单元根据所述至少一个第二标示位,调整所述第一IO请求在软件队列中的位置,包括:
如果所述PG_iovip标示位为第一值,所述设置单元将所述第一IO请求调整到所述高优先级同步队列的头部;
如果所述PG_iovip标示位为第二值,且所述PG_ioprio标示位为第一值,所述设置单元将所述第一IO请求调整到所述高优先级同步队列的尾部;
如果所述PG_iovip标示位为第二值,且所述PG_ioprio标示位为第二值,且所述文件页的所述PG_iosync标示位为第一值,所述设置单元将所述第一IO请求调整到所述普通优先级同步队列的尾部。
15.根据权利要求9或10或13或14所述的装置,其特征在于,所述确定单元还用于确定所述第一IO请求在所述软件队列中。
16.根据权利要求15所述的装置,其特征在于,所述文件页还包括PG_ioqueued标示位和PG_ioissued标示位,
其中,所述PG_ioqueued标示位用于指示占用所述文件页的IO请求是否已经进入所述软件队列,设置为第一值的所述PG_ioqueued标示位用于指示占用所述文件页的IO请求已经进入所述软件队列,设置为第二值的所述PG_ioqueued标示位用于指示占用所述文件页的IO请求没有进入所述软件队列;
所述PG_ioissued标示位用于指示占用所述文件页的IO请求是否已经提交所述存储器件,设置为第一值的所述PG_ioissued标示位用于指示占用所述文件页的IO请求已经提交所述存储器件,设置为第二值的所述PG_ioissued标示位用于指示占用所述文件页的IO请求没有提交所述存储器件;
所述确定单元用于确定所述第一IO请求在所述软件队列中,包括:所述确定单元用于确定所述文件页的所述PG_ioqueued标示位为第一值,且所述PG_ioissued标示位为第二值。
17.一种输入输出IO请求处理系统,其特征在于,
所述处理系统包括如权利要求9-16中任一项所述的IO请求处理装置,以及存储器件;
所述存储器件用于根据接收到的IO命令执行对应的数据处理操作;所述IO命令包括第一IO请求对应的IO命令,以及第一线程的第一数据请求对应的IO命令。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910703789.XA CN112306927B (zh) | 2019-07-31 | 2019-07-31 | 一种io请求的处理方法、装置及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910703789.XA CN112306927B (zh) | 2019-07-31 | 2019-07-31 | 一种io请求的处理方法、装置及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112306927A CN112306927A (zh) | 2021-02-02 |
CN112306927B true CN112306927B (zh) | 2023-03-03 |
Family
ID=74485396
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910703789.XA Active CN112306927B (zh) | 2019-07-31 | 2019-07-31 | 一种io请求的处理方法、装置及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112306927B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114706820B (zh) * | 2022-05-18 | 2022-09-06 | 北京卡普拉科技有限公司 | 异步i/o请求的调度方法、系统、电子设备及介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6598143B1 (en) * | 2000-02-24 | 2003-07-22 | International Business Machines Corporation | Method to increase performance of acquiring free memory pages |
US9189172B1 (en) * | 2012-01-06 | 2015-11-17 | Seagate Technology Llc | High priority read and write |
CN107273214A (zh) * | 2017-06-30 | 2017-10-20 | 郑州云海信息技术有限公司 | 一种基于固态硬盘的多核控制器资源访问方法及其装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9772959B2 (en) * | 2014-05-30 | 2017-09-26 | Apple Inc. | I/O scheduling |
-
2019
- 2019-07-31 CN CN201910703789.XA patent/CN112306927B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6598143B1 (en) * | 2000-02-24 | 2003-07-22 | International Business Machines Corporation | Method to increase performance of acquiring free memory pages |
US9189172B1 (en) * | 2012-01-06 | 2015-11-17 | Seagate Technology Llc | High priority read and write |
CN107273214A (zh) * | 2017-06-30 | 2017-10-20 | 郑州云海信息技术有限公司 | 一种基于固态硬盘的多核控制器资源访问方法及其装置 |
Also Published As
Publication number | Publication date |
---|---|
CN112306927A (zh) | 2021-02-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
USRE49875E1 (en) | Memory system having high data transfer efficiency and host controller | |
CN110226157B (zh) | 用于减少行缓冲冲突的动态存储器重新映射 | |
US9317204B2 (en) | System and method for I/O optimization in a multi-queued environment | |
US8380909B2 (en) | Multiple command queues having separate interrupts | |
US8683126B2 (en) | Optimal use of buffer space by a storage controller which writes retrieved data directly to a memory | |
US10453540B2 (en) | Method and apparatus to prioritize read response time in a power-limited storage device | |
US20160179402A1 (en) | Memory system | |
JPH0619747B2 (ja) | I/o命令実行方法、i/o割込処理方法およびそれらを用いた計算機システム | |
US11520520B2 (en) | Memory system and method of controlling nonvolatile memory | |
EP3270293B1 (en) | Two stage command buffers to overlap iommu map and second tier memory reads | |
CN112306927B (zh) | 一种io请求的处理方法、装置及系统 | |
CN111813703A (zh) | 数据储存装置及逻辑至物理地址映射表的更新方法 | |
US20120159024A1 (en) | Semiconductor apparatus | |
US7028116B2 (en) | Enhancement of transaction order queue | |
US20150212759A1 (en) | Storage device with multiple processing units and data processing method | |
CN112711442A (zh) | 一种主机命令写入方法、设备、系统及可读存储介质 | |
US20140207980A1 (en) | Interface control apparatus, data storage apparatus and method for interface control | |
US11644991B2 (en) | Storage device and control method | |
US20240069747A1 (en) | Memory system | |
CN116225318A (zh) | 命令调度方法、闪存控制器、闪存设备及存储介质 | |
CN116225991A (zh) | 固态硬盘控制器、命令调度方法、固态硬盘及存储介质 | |
KR20180090039A (ko) | 데이터 저장 장치 및 그것의 동작 방법 |
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 |