CN103336672A - 数据读取方法、装置及计算设备 - Google Patents

数据读取方法、装置及计算设备 Download PDF

Info

Publication number
CN103336672A
CN103336672A CN2013102678024A CN201310267802A CN103336672A CN 103336672 A CN103336672 A CN 103336672A CN 2013102678024 A CN2013102678024 A CN 2013102678024A CN 201310267802 A CN201310267802 A CN 201310267802A CN 103336672 A CN103336672 A CN 103336672A
Authority
CN
China
Prior art keywords
data
request
read
hard disk
piece
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.)
Granted
Application number
CN2013102678024A
Other languages
English (en)
Other versions
CN103336672B (zh
Inventor
张勇
李海丰
杜培亮
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Cloud Computing Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201310267802.4A priority Critical patent/CN103336672B/zh
Publication of CN103336672A publication Critical patent/CN103336672A/zh
Application granted granted Critical
Publication of CN103336672B publication Critical patent/CN103336672B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明实施例公开了数据读取方法、装置及计算设备,所述方法包括:接收用户进程提交的数据读请求;根据所述数据读请求生成至少两个块读取请求;将所述至少两个块读取请求一次性提交至硬盘的输入输出IO调度队列;通过调度所述IO调度队列中的所述至少两个块读取请求,将所述数据读请求所请求的数据从硬盘缓存区读取到用户缓存区。本发明实施例在读取数据时,对至少两个块读取请求进行一次性提交和处理,因此提高了处理效率和数据读取效率;并且,由于对一个数据读请求的所有块读取请求仅需挂起和唤醒一次用户进程,因此节省了计算设备内的进程调度开销,从而提高了计算设备的整体性能。

Description

数据读取方法、装置及计算设备
技术领域
本发明涉及计算机领域,特别涉及数据读取方法、装置及计算设备。
背景技术
计算设备内通常包括具有计算能力的中央处理器(Central Processing Unit,CPU)、硬盘、内存等硬件设备。其中,硬盘和内存均为计算设备内的存储媒介,由于硬盘由机械部件带动运转,因此CPU从硬盘内读取数据的速度要远低于从内存读取数据的速度。现有技术中,CPU从硬盘内读取数据时,将根据数据读请求所请求数据的大小依次生成多个块读取请求,并对这些块读取请求进行串行处理,即每一次仅读取一个块读取请求对应的数据。
发明人在对现有技术的研究过程中发现,通过串行处理方式对块读取请求进行处理时,由于同一时刻仅处理一个块读取请求,因此处理效率和数据读取效率都较低;并且,由于处理每一个块读取请求时,都需要挂起数据读请求的用户进程,并在处理下一个块读取请求时,唤醒前一次挂起的用户进程,因此当同一数据读请求的块读取请求较多时,计算设备内的进程调度开销较大。
发明内容
本发明实施例提供数据读取方法、装置及计算设备,以提高从硬盘读取数据效率,减少数据读取过程中进程调度的开销。
为了解决上述技术问题,本发明实施例公开了如下技术方案:
第一方面,提供一种数据读取方法,所述方法包括:
接收用户进程提交的数据读请求;
根据所述数据读请求生成至少两个块读取请求;
将所述至少两个块读取请求一次性提交至硬盘的输入输出IO调度队列;
通过调度所述IO调度队列中的所述至少两个块读取请求,将所述数据读请求所请求的数据从硬盘缓存区读取到用户缓存区。
结合第一方面,在第一方面的第一种可能的实现方式中,所述根据所述数据读请求生成至少两个块读取请求,包括:
根据所述数据读请求所请求的数据的大小将所述数据分解成多个数据页;
在内核缓存区内为所述多个数据页中的至少两个数据页分配存储空间;以及
为所述至少两个数据页中的每一个数据页生成一个块读取请求。
结合第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述在内核缓存区内为所述多个数据页中的至少两个数据页分配存储空间具体包括:根据所述多个数据页的缓存位置,在所述内核缓存区内为所述多个数据页中位于硬盘缓存区的至少两个数据页分配存储空间;
所述为所述至少两个数据页中的每一个数据页生成一个块读取请求具体包括:为所述位于硬盘缓存区的至少两个数据页中的每一个数据页生成一个块读取请求。
结合第一方面的第二种可能的实现方式,在第一方面的第三种可能的实现方式中,所述方法还包括:
根据所述多个数据页的缓存位置,将所述多个数据页中位于所述内核缓存区的数据页的数据从所述内核缓存区读取到用户缓存区。
结合第一方面的第一种可能的实现方式,或第一方面的第二种可能的实现方式,或第一方面的第三种可能的实现方式,在第一方面的第四种可能的实现方式中,所述通过调度所述IO调度队列中的所述至少两个块读取请求,将所述数据读请求所请求的数据从硬盘缓存区读取到用户缓存区,包括:
依次调度所述IO调度队列中的块读取请求,将每一个块读取请求所请求的数据从所述硬盘缓存区读取到在所述内核缓存区内为所述每一个块读取请求的数据页分配的存储空间,并从所述分配的存储空间读取到用户缓存区。
结合第一方面,或第一方面的第一种可能的实现方式,或第一方面的第二种可能的实现方式,或第一方面的第三种可能的实现方式,或第一方面的第四种可能的实现方式,在第一方面的第五种可能的实现方式中,所述将所述至少两个块读取请求一次性提交至硬盘的IO调度队列后,所述方法还包括:挂起所述用户进程;
所述将所述数据读请求所请求的数据从硬盘缓存区读取到用户缓存区后,所述方法还包括:唤醒所述用户进程。
第二方面,提供一种数据读取装置,所述装置包括:
接收单元,用于接收用户进程提交的数据读请求;
生成单元,用于根据所述接收单元接收到的所述数据读请求生成至少两个块读取请求;
提交单元,用于将所述生成单元生成的所述至少两个块读取请求一次性提交至硬盘的输入输出IO调度队列;
读取单元,用于通过调度所述IO调度队列中的由所述提交单元提交的至少两个块读取请求,将所述数据读请求所请求的数据从硬盘缓存区读取到用户缓存区。
结合第二方面,在第二方面的第一种可能的实现方式中,所述生成单元包括:
数据页分解子单元,用于根据所述接收单元接收到的所述数据读请求所请求的数据的大小将所述数据分解成多个数据页;
缓存区分配子单元,用于在内核缓存区内为所述数据页分解子单元分解的所述多个数据页中的至少两个数据页分配存储空间;
块请求生成子单元,用于为所述缓存区分配子单元分配了内核缓存区的至少两个数据页中的每一个数据页生成一个块读取请求。
结合第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,
所述缓存区分配子单元,具体用于根据所述数据页分解子单元分解的所述多个数据页的缓存位置,在所述内核缓存区内为所述多个数据页中位于硬盘缓存区的至少两个数据页分配存储空间;
所述块请求生成子单元,具体用于为所述位于硬盘缓存区的至少两个数据页中的每一个数据页生成一个块读取请求。
结合第二方面的第二种可能的实现方式,在第二方面的第三种可能的实现方式中,所述读取单元,还用于根据所述数据页分解子单元分解的多个数据页的缓存位置,将所述多个数据页中位于所述内核缓存区的数据页的数据从所述内核缓存区读取到用户缓存区。
结合第二方面,或第二方面的第一种可能的实现方式,或第二方面的第二种可能的实现方式,或第二方面的第三种可能的实现方式,在第二方面的第四种可能的实现方式中,所述读取单元包括:
块请求调度子单元,用于依次调度所述IO调度队列中的块读取请求;
数据读取子单元,用于将所述块请求调度子单元调度的每一个块读取请求所请求的数据从所述硬盘缓存区读取到在所述内核缓存区内为所述每一个块读取请求的数据页分配的存储空间,并从所述分配的存储空间读取到用户缓存区。
结合第二方面,或第二方面的第一种可能的实现方式,或第二方面的第二种可能的实现方式,或第二方面的第三种可能的实现方式,或第二方面的第四种可能的实现方式,在第二方面的第五种可能的实现方式中,所述装置还包括:
管理单元,用于在所述提交单元将所述至少两个块读取请求一次性提交至硬盘的IO调度队列后,挂起所述用户进程,以及在所述读取单元将所述数据读请求所请求的数据从硬盘缓存区读取到用户缓存区后,唤醒所述用户进程。
第三方面,提供一种计算设备,所述计算设备包括:主板,以及通过所述主板连接的中央处理器CPU、内存、硬盘,其中,
所述CPU,用于接收用户进程提交的数据读请求,执行内核指令,根据所述数据读请求生成至少两个块读取请求,并将所述至少两个块读取请求一次性提交至所述硬盘的输入输出IO调度队列,以及通过调度所述IO调度队列中的所述至少两个块读取请求,将所述数据读请求所请求的数据从所述内存的硬盘缓存区读取到所述内存的用户缓存区。
结合第三方面,在第三方面的第一种可能的实现方式中,所述CPU,具体用于根据所述数据读请求所请求的数据的大小将所述数据分解成多个数据页,在内核缓存区内为所述多个数据页中的至少两个数据页分配存储空间,以及为所述至少两个数据页中的每一个数据页生成一个块读取请求。
结合第三方面的第一种可能的实现方式,在第三方面的第二种可能的实现方式中,所述CPU,具体用于根据所述多个数据页的缓存位置,在所述内核缓存区内为所述多个数据页中位于硬盘缓存区的至少两个数据页分配存储空间,为所述位于硬盘缓存区的至少两个数据页中的每一个数据页生成一个块读取请求,以及将所述多个数据页中位于所述内核缓存区的数据页的数据从所述内核缓存区读取到用户缓存区。
结合第三方面的第一种可能的实现方式,或第三方面的第二种可能的实现方式,在第三方面的第三种可能的实现方式中,所述CPU,具体用于依次调度所述IO调度队列中的块读取请求,将每一个块读取请求所请求的数据从所述硬盘缓存区读取到在所述内核缓存区内为所述每一个块读取请求的数据页分配的存储空间,并从所述分配的存储空间读取到用户缓存区。
结合第三方面,或第三方面的第一种可能的实现方式,或第三方面的第二种可能的实现方式,或第三方面的第三种可能的实现方式,在第三方面的第四种可能的实现方式中,所述CPU,还用于将所述至少两个块读取请求一次性提交至硬盘的IO调度队列后,挂起所述用户进程,以及将所述数据读请求所请求的数据从硬盘缓存区读取到用户缓存区后唤醒所述用户进程。
本发明实施例中,接收用户进程提交的数据读请求,根据数据读请求生成至少两个块读取请求,将至少两个块读取请求一次性提交至硬盘的IO调度队列,通过调度IO调度队列中的至少两个块读取请求,将数据读请求所请求的数据从硬盘缓存区读取到用户缓存区。本发明实施例在读取数据时,对至少两个块读取请求进行一次性提交和处理,因此提高了处理效率和数据读取效率;并且,由于对一个数据读请求的所有块读取请求仅需挂起和唤醒一次用户进程,因此节省了计算设备内的进程调度开销,从而提高了计算设备的整体性能。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明数据读取方法的一个实施例流程图;
图2A为本发明数据读取方法的另一个实施例流程图;
图2B为应用图2A实施例的数据读取过程示意图;
图3为本发明数据读取方法的另一个实施例流程图;
图4为本发明数据读取装置的一个实施例框图;
图5为本发明数据读取装置的另一个实施例框图;
图6为本发明计算设备的实施例框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参见图1,为本发明数据读取方法的一个实施例流程:
步骤101:接收用户进程提交的数据读请求。
本发明实施例中的数据读取方法适用于通用的计算机系统,用于提高系统的整体IO性能,计算设备内的数据读请求所请求的数据通常大于一个数据页(page),一个数据页的大小通常为4K,数据读请求通过用户进程进行提交。例如,数据库系统通过用户进程提交的数据读请求所请求读取的数据通常是8K的整数倍。
本实施例中,数据读请求所要读取的数据是位于计算设备内部硬盘(磁盘)中的数据,通用的读取过程需要将数据从磁盘缓存区读取到内核缓存区,再由内核缓存区读取到用户缓存区,从而完成数据读取过程。
步骤102:根据数据读请求生成至少两个块读取请求。
本实施例中,计算设备可以根据数据读请求所请求的数据的大小将数据分解成多个数据页,每个数据页大小可以为4K,在内核缓存区内为多个数据页分配存储空间,通常一个数据页分配一个与其大小一致的存储空间,以及为多个数据页中的每一个数据页生成一个块读取请求。
步骤103:将至少两个块读取请求一次性提交至硬盘的IO调度队列。
现有技术中,每次提交一个块读取请求到IO调度队列,读取完该块读取请求所请求的数据后,再提交下一个块读取请求到IO调度队列。本发明实施例中,将生成的所有块读取请求一次性提交到硬盘的IO调度队列,通过对块读取请求的合并提交,提高调度效率。
步骤104:通过调度IO调度队列中的至少两个块读取请求,将数据读请求所请求的数据从硬盘缓存区读取到用户缓存区。
本实施例中,将至少两个块读取请求一次性提交至硬盘的IO调度队列后,可以挂起用户进程,由驱动程序依次从IO调度队列中调度一个块读取请求,将该一个块读取请求所请求的数据从硬盘缓存区读取到所分配的内核缓存区的存储空间,并从所述内核缓存区的存储空间读取到用户缓存区,直至调度完所有块读取请求,完成数据读取过程。
由上述实施例可见,本施例对至少两个块读取请求进行一次性提交和处理,因此提高了处理效率和数据读取效率;并且,由于对一个数据读请求的所有块读取请求仅需挂起和唤醒一次用户进程,因此节省了计算设备内的进程调度开销,从而提高了计算设备的整体性能。
参见图2A,为本发明数据读取方法的另一个实施例流程:
步骤201:接收用户进程提交的数据读请求。
本发明实施例中的数据读取方法适用于通用的计算机系统,用于提高系统的整体IO性能,计算设备内的数据读请求所请求的数据通常大于一个数据页(page),一个数据页的大小通常为4K,数据读请求通过用户进程进行提交。例如,数据库系统通过用户进程提交的数据读请求所请求读取的数据通常是8K的整数倍。
步骤202:根据数据读请求所请求的数据的大小将数据分解成多个数据页。
用户进程请求读取的数据通常较大,因此计算设备在接收到数据读请求后,可以根据内核指令,按照数据读请求所请求数据的大小将数据分解成多个数据页(page),一个page通常为4K。例如,用户进程所请求的数据为16K,则可以将16K数据分为4个数据页,分别记为page1、page2、page3和page4。
步骤203:在内核缓存区内为多个数据页分配存储空间。
本实施例中,数据读请求所要读取的数据是位于计算设备内部硬盘(磁盘)中的数据,通用的读取过程需要将数据从磁盘缓存区读取到内核缓存区,再由内核缓存区读取到用户缓存区,从而完成数据读取过程。因此在将数据分解成多个数据页后,计算设备可以根据内核指令在内核缓存区为这些数据页分配存储空间,根据数据页的大小,通常为每一个数据页分配的存储空间的大小为4K。
步骤204:为多个数据页中的每一个数据页生成一个块读取请求。
在为多个数据页分配内核缓存区后,计算设备可以根据内核指令为每个数据页生成一个块读取请求。例如,对于四个数据页page1、page2、page3和page4,可以生成四个块读取请求。
步骤205:将至少两个块读取请求一次性提交至硬盘的IO调度队列,并挂起用户进程。
现有技术中,每次提交一个块读取请求到IO调度队列,读取完该块读取请求所请求的数据后,再提交下一个块读取请求到IO调度队列。本发明实施例中,计算设备根据内核指令,将生成的所有块读取请求一次性提交到硬盘的IO调度队列,通过对块读取请求的合并提交,提高调度效率。在将块读取请求一次性提交到硬盘的IO调度队列后,计算设备可以挂起该用户进程,从而开始执行后续的数据读取过程,在读取完所有块读取请求所请求的数据之前,用户进程一直挂起。
步骤206:依次调度IO调度队列中的块读取请求。
步骤207:将调度的一个块读取请求所请求的数据从硬盘缓存区读取到在内核缓存区内为该块读取请求的数据页分配的存储空间,并从该分配的存储空间读取到用户缓存区。
本实施例中,假设IO调度队列中有四个块读取请求,则计算设备可以根据驱动指令,顺序调度第一个块读取请求,此时发生磁盘中断,将第一个块读取请求所请求的数据从硬盘缓存区读取到在内核缓存区内为该块读取请求的数据页分配的存储空间,然后再从分配的存储空间读取到用户缓存区;以此类推,第二个块读取请求至第四个块读取请求分别执行与第一个块读取请求一致的读取操作。
步骤208:判断是否调度完所有块读取请求,若是,则执行步骤209;否则,返回步骤206。
步骤209:唤醒用户进程,结束当前流程。
当IO调度队列中的所有块读取请求均调度完后,说明该用户进程已经从硬盘中读取完所需要的数据,此时将用户进程唤醒。
由上述实施例可见,本施例对至少两个块读取请求进行一次性提交和处理,因此提高了处理效率和数据读取效率;并且,由于对一个数据读请求的所有块读取请求仅需挂起和唤醒一次用户进程,因此节省了计算设备内的进程调度开销,从而提高了计算设备的整体性能。
为了更进一步描述本发明实施例,参见图2B,为应用图2A实施例的数据读取过程示意图,下面结合图2B,对本发明实施例的数据读取过程进行详细描述,图2B中,假设用户进程所请求的数据大小为16K:
框图210,用户设备接收用户进程提交的数据读请求211,根据内核指令将数据读请求211请求读取的16K数据分解为4个数据页A、B、C、D,每个数据页对应4K数据。
框图220,为4个数据页A、B、C、D分配内核缓存区221,并为数据页A、B、C、D生成块读取请求A’、B’、C’、D’,将块读取请求A’、B’、C’、D’一次性提交至硬盘的IO调度队列222,挂起用户进程。
框图230,将块读取请求A’、B’、C’、D’插入硬盘的IO调度队列222。
框图240,从IO调度队列222中调度块读取请求A’,将块读取请求A’所请求的数据a从硬盘缓存区212读取至内核缓存区221,并判断得出块读取请求A’不是一次性提交的块读取请求中的最后一个块读取请求,进入框图250。
框图250,从IO调度队列222中调度块读取请求B’,将块读取请求B’所请求的数据b从硬盘缓存区212读取至内核缓存区221,并判断得出块读取请求B’不是一次性提交的块读取请求中的最后一个块读取请求,进入框图260。
框图260,从IO调度队列222中调度块读取请求C’,将块读取请求C’所请求的数据c从硬盘缓存区212读取至内核缓存区221,并判断得出块读取请求C’不是一次性提交的块读取请求中的最后一个块读取请求,进入框图270。
框图270,从IO调度队列222中调度块读取请求D’,将块读取请求D’所请求的数据d从硬盘缓存区212读取至内核缓存区221,并判断得出块读取请求D’是一次性提交的块读取请求中的最后一个块读取请求,此时唤醒用户进程,将内核缓存区221中的数据读取至用户缓存区271。
从图2B中可以看出,由于将四个块读取请求一次性提交至硬盘的IO调度队列,使得在进行IO处理时,无需多次提交块读取请求,因此可以合并处理同一数据读请求的块读取请求A’、B’、C’、D’,以此提高了IO处理的效率;并且,整个数据读取过程中,只需要挂起一次用户进程,以及唤醒一次进程一次,与现有技术中针对每个块读取请求都需要挂起和唤醒一次用户进程相比,本发明实施例极大降低了进程调度开销,提高了计算设备的总体性能。
参见图3,为本发明数据读取方法的另一个实施例流程:
步骤301:接收用户进程提交的数据读请求。
本发明实施例中的数据读取方法适用于通用的计算机系统,用于提高系统的整体IO性能,计算设备内的数据读请求所请求的数据通常大于一个数据页(page),一个数据页的大小通常为4K,数据读请求通过用户进程进行提交。例如,数据库系统通过用户进程提交的数据读请求所请求读取的数据通常是8K的整数倍。
步骤302:根据数据读请求所请求的数据的大小将数据分解成多个数据页。
用户进程请求读取的数据通常较大,因此计算设备在接收到数据读请求后,可以根据内核指令,按照数据读请求所请求数据的大小将数据分解成多个数据页(page),一个page通常为4K。例如,用户进程所请求的数据为16K,则可以将16K数据分为4个数据页,分别记为page1、page2、page3和page4。
步骤303:根据多个数据页的缓存位置,将多个数据页中位于内核缓存区的数据页的数据从内核缓存区读取到用户缓存区。
本实施例中,对于用户进程请求读取的数据中,可能一部分数据已经存储在内核缓存区,而另一部分数据存储在硬盘缓存区,因此无需再为存储在内核缓存区中的数据分配内核缓存区。例如,假设四个数据页中,page1和page3已存储在内核缓存区,而page2和page4存储在硬盘缓存区。因此,无需再为page1和page3分配内核缓存区,直接将page1和page3的数据从内核缓存区拷贝至用户缓存区。
需要说明的是,若用户进程请求读取的数据中没有数据存储在,则可以省略本步骤。
步骤304:在内核缓存区为多个数据页中位于硬盘缓存区的至少两个数据页分配存储空间,并为至少两个数据页中的每一个数据页生成一个块读取请求。
根据步骤303,假设page2和page4存储在硬盘缓存区,则需要为page2和page4分配内核缓存区,并为page2和page4各生成一个块读取请求,每个块读取请求所请求的数据为4K。
步骤305:将至少两个块读取请求一次性提交至硬盘的IO调度队列,并挂起用户进程。
现有技术中,每次提交一个块读取请求到IO调度队列,读取完该块读取请求所请求的数据后,再提交下一个块读取请求到IO调度队列。本发明实施例中,计算设备根据内核指令,将生成的所有块读取请求一次性提交到硬盘的IO调度队列,一次性提交是指将一个用户进程的所有块读取请求以整体形式提交至硬盘的IO调度队列,从而使位于IO调度队列中的上述块读取请求之间没有插入其他的IO请求,本实施例通过对块读取请求的合并提交,提高调度效率。在将块读取请求一次性提交到硬盘的IO调度队列后,计算设备可以挂起该用户进程,从而开始执行后续的数据读取过程,在读取完所有块读取请求所请求的数据之前,用户进程一直挂起。
步骤306:依次调度一个IO调度队列中的块读取请求。
步骤307:将调度的一个块读取请求所请求的数据从硬盘缓存区读取到在内核缓存区内为该块读取请求的数据页分配的存储空间,并从该分配的存储空间读取到用户缓存区。
本实施例中,IO调度队列中有两个块读取请求,则计算设备可以根据驱动指令,顺序调度第一个块读取请求,此时发生磁盘中断,将第一个块读取请求所请求的数据从硬盘缓存区读取到在内核缓存区内为该块读取请求的数据页分配的存储空间,然后再从分配的存储空间读取到用户缓存区;以此类推,第二个块读取请求执行与第一个块读取请求一致的读取操作。
步骤308:判断是否调度完所有块读取请求,若是,则执行步骤309;否则,返回步骤306。
步骤309:唤醒用户进程,结束当前流程。
当IO调度队列中的所有块读取请求均调度完后,说明该用户进程已经从硬盘中读取完所需要的数据,此时将用户进程唤醒。
由上述实施例可见,本施例对至少两个块读取请求进行一次性提交和处理,因此提高了处理效率和数据读取效率;并且,由于对一个数据读请求的所有块读取请求仅需挂起和唤醒一次用户进程,因此节省了计算设备内的进程调度开销,从而提高了计算设备的整体性能。以10个用户进程同时读取数据为例,假设每个进程读取的数据量为40K,可以分解为10个数据页,则如果采用现有技术,用户进程挂起次数为10*10=100,相应的,用户进程唤醒次数也为100,而采用本发明实施例,则用户进程挂起次数为1*10=10,相应的,用户进程唤醒次数也为10,进程挂起和唤醒的次数仅为现有技术的十分之一,因此应用本发明实施例,特别是读取数据量较大的数据时,可以节省大量的进程调度开销。
与本发明数据读取方法的实施例相对应,本发明还提供了数据读取装置及计算设备的实施例。
参见图4,为本发明数据读取装置的一个实施例框图:
该数据读取装置包括:接收单元410、生成单元420、提交单元430和读取单元440。
其中,接收单元410,用于接收用户进程提交的数据读请求;
生成单元420,用于根据所述接收单元410接收到的所述数据读请求生成至少两个块读取请求;
提交单元430,用于将所述生成单元420生成的所述至少两个块读取请求一次性提交至硬盘的输入输出IO调度队列;
读取单元440,用于通过调度所述IO调度队列中的由所述提交单元430提交的至少两个块读取请求,将所述数据读请求所请求的数据从硬盘缓存区读取到用户缓存区。
在一个可选的实现方式中:
所述生成单元420可以包括(图4中未示出):
数据页分解子单元,用于根据所述接收单元接收到的所述数据读请求所请求的数据的大小将所述数据分解成多个数据页;
缓存区分配子单元,用于在内核缓存区内为所述数据页分解子单元分解的所述多个数据页中的至少两个数据页分配存储空间;
块请求生成子单元,用于为所述缓存区分配子单元分配了内核缓存区的至少两个数据页中的每一个数据页生成一个块读取请求。
在另一个可选的实现方式中:
所述缓存区分配子单元,可以具体用于根据所述数据页分解子单元分解的所述多个数据页的缓存位置,在所述内核缓存区内为所述多个数据页中位于硬盘缓存区的至少两个数据页分配存储空间;
所述块请求生成子单元,可以具体用于为所述位于硬盘缓存区的至少两个数据页中的每一个数据页生成一个块读取请求。
进一步,所述读取单元440,还可以用于根据所述数据页分解子单元分解的多个数据页的缓存位置,将所述多个数据页中位于所述内核缓存区的数据页的数据从所述内核缓存区读取到用户缓存区。
在另一个可选的实现方式中:
所述读取单元440可以包括(图4中未示出):
块请求调度子单元,用于依次调度所述IO调度队列中的块读取请求;
数据读取子单元,用于将所述块请求调度子单元调度的每一个块读取请求所请求的数据从所述硬盘缓存区读取到在所述内核缓存区内为所述每一个块读取请求的数据页分配的存储空间,并从所述分配的存储空间读取到用户缓存区。
参见图5,为本发明数据读取装置的另一个实施例框图:
该数据读取装置包括:接收单元510、生成单元520、提交单元530、管理单元540和读取单元550。
其中,接收单元510,用于接收用户进程提交的数据读请求;
生成单元520,用于根据所述接收单元510接收到的所述数据读请求生成至少两个块读取请求;
提交单元530,用于将所述生成单元520生成的所述至少两个块读取请求一次性提交至硬盘的输入输出IO调度队列;
管理单元540,用于在所述提交单元530将所述至少两个块读取请求一次性提交至硬盘的IO调度队列后,挂起所述用户进程;
读取单元550,用于通过调度所述IO调度队列中的由所述提交单元530提交的所述两个块读取请求,将所述数据读请求所请求的数据从硬盘缓存区读取到用户缓存区;
管理单元540,还用于在所述读取单元550将所述数据读请求所请求的数据从硬盘缓存区读取到用户缓存区后,唤醒所述用户进程。
在一个可选的实现方式中:
所述生成单元520可以包括(图5中未示出):
数据页分解子单元,用于根据所述接收单元接收到的所述数据读请求所请求的数据的大小将所述数据分解成多个数据页;
缓存区分配子单元,用于在内核缓存区内为所述数据页分解子单元分解的所述多个数据页中的至少两个数据页分配存储空间;
块请求生成子单元,用于为所述缓存区分配子单元分配了内核缓存区的至少两个数据页中的每一个数据页生成一个块读取请求。
在另一个可选的实现方式中:
所述缓存区分配子单元,可以具体用于根据所述数据页分解子单元分解的所述多个数据页的缓存位置,在所述内核缓存区内为所述多个数据页中位于硬盘缓存区的至少两个数据页分配存储空间;
所述块请求生成子单元,可以具体用于为所述位于硬盘缓存区的至少两个数据页中的每一个数据页生成一个块读取请求。
进一步,所述读取单元550,还可以用于根据所述数据页分解子单元分解的多个数据页的缓存位置,将所述多个数据页中位于所述内核缓存区的数据页的数据从所述内核缓存区读取到用户缓存区。
在另一个可选的实现方式中:
所述读取单元550可以包括(图5中未示出):
块请求调度子单元,用于依次调度所述IO调度队列中的块读取请求;
所述数据读取子单元,用于将所述块请求调度子单元调度的每一个块读取请求所请求的数据从所述硬盘缓存区读取到在所述内核缓存区内为所述每一个块读取请求的数据页分配的存储空间,并从所述分配的存储空间读取到用户缓存区。
参见图6,为本发明计算设备的实施例框图:
该计算设备包括:主板610,以及通过所述主板610连接的CPU620、内存630、硬盘640。
其中,所述CPU620,用于接收用户进程提交的数据读请求,执行内核指令,根据所述数据读请求生成至少两个块读取请求,并将所述至少两个块读取请求一次性提交至所述硬盘640的输入输出IO调度队列,以及通过调度所述IO调度队列中的所述至少两个块读取请求,将所述数据读请求所请求的数据从所述内存630的硬盘缓存区读取到所述内存630的用户缓存区。
在一个可选的实现方式中:
所述CPU620,可以具体用于根据所述数据读请求所请求的数据的大小将所述数据分解成多个数据页,在内核缓存区内为所述多个数据页中的至少两个数据页分配存储空间,以及为所述至少两个数据页中的每一个数据页生成一个块读取请求。
在另一个可选的实现方式中:
所述CPU620,可以具体用于根据所述多个数据页的缓存位置,在所述内核缓存区内为所述多个数据页中位于硬盘缓存区的至少两个数据页分配存储空间,为所述位于硬盘缓存区的至少两个数据页中的每一个数据页生成一个块读取请求,以及将所述多个数据页中位于所述内核缓存区的数据页的数据从所述内核缓存区读取到用户缓存区。
在另一个可选的实现方式中:
所述CPU620,可以具体用于依次调度所述IO调度队列中的块读取请求,将每一个块读取请求所请求的数据从所述硬盘缓存区读取到在所述内核缓存区内为所述每一个块读取请求的数据页分配的存储空间,并从所述分配的存储空间读取到用户缓存区。
在另一个可选的实现方式中:
所述CPU620,还可以用于将所述至少两个块读取请求一次性提交至硬盘的IO调度队列后,挂起所述用户进程,以及将所述数据读请求所请求的数据从硬盘缓存区读取到用户缓存区后唤醒所述用户进程。
由上述实施例可见,接收用户进程提交的数据读请求,根据所述数据读请求生成至少两个块读取请求,将所述至少两个块读取请求一次性提交至硬盘的IO调度队列,通过从所述IO调度队列中调度所述至少两个块读取请求,将所述数据读请求所请求的数据从硬盘缓存区读取到用户缓存区。本发明实施例在读取数据时,对至少两个块读取请求进行一次性提交和处理,因此提高了处理效率和数据读取效率;并且,由于对一个数据读请求的所有块读取请求仅需挂起和唤醒一次用户进程,因此节省了计算设备内的进程调度开销,从而提高了计算设备的整体性能。
本领域的技术人员可以清楚地了解到本发明实施例中的技术可借助软件加必需的通用硬件的方式来实现,通用硬件包括通用集成电路、通用CPU、通用存储器、通用元器件等,当然也可以通过专用硬件包括专用集成电路、专用CPU、专用存储器、专用元器件等来实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明实施例中的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述的本发明实施方式,并不构成对本发明保护范围的限定。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明的保护范围之内。

Claims (17)

1.一种数据读取方法,其特征在于,所述方法包括:
接收用户进程提交的数据读请求;
根据所述数据读请求生成至少两个块读取请求;
将所述至少两个块读取请求一次性提交至硬盘的输入输出IO调度队列;
通过调度所述IO调度队列中的所述至少两个块读取请求,将所述数据读请求所请求的数据从硬盘缓存区读取到用户缓存区。
2.根据权利要求1所述的方法,其特征在于,所述根据所述数据读请求生成至少两个块读取请求,包括:
根据所述数据读请求所请求的数据的大小将所述数据分解成多个数据页;
在内核缓存区内为所述多个数据页中的至少两个数据页分配存储空间;以及
为所述至少两个数据页中的每一个数据页生成一个块读取请求。
3.根据权利要求2所述的方法,其特征在于,所述在内核缓存区内为所述多个数据页中的至少两个数据页分配存储空间具体包括:根据所述多个数据页的缓存位置,在所述内核缓存区内为所述多个数据页中位于硬盘缓存区的至少两个数据页分配存储空间;
所述为所述至少两个数据页中的每一个数据页生成一个块读取请求具体包括:为所述位于硬盘缓存区的至少两个数据页中的每一个数据页生成一个块读取请求。
4.根据权利要求3所述的数据读取方法,其特征在于,所述方法还包括:
根据所述多个数据页的缓存位置,将所述多个数据页中位于所述内核缓存区的数据页的数据从所述内核缓存区读取到用户缓存区。
5.根据权利要求2至4任意一项所述的方法,其特征在于,所述通过调度所述IO调度队列中的所述至少两个块读取请求,将所述数据读请求所请求的数据从硬盘缓存区读取到用户缓存区,包括:
依次调度所述IO调度队列中的块读取请求,将每一个块读取请求所请求的数据从所述硬盘缓存区读取到在所述内核缓存区内为所述每一个块读取请求的数据页分配的存储空间,并从所述分配的存储空间读取到用户缓存区。
6.根据权利要求1至5任意一项所述的方法,其特征在于,所述将所述至少两个块读取请求一次性提交至硬盘的IO调度队列后,所述方法还包括:挂起所述用户进程;
所述将所述数据读请求所请求的数据从硬盘缓存区读取到用户缓存区后,所述方法还包括:唤醒所述用户进程。
7.一种数据读取装置,其特征在于,所述装置包括:
接收单元,用于接收用户进程提交的数据读请求;
生成单元,用于根据所述接收单元接收到的所述数据读请求生成至少两个块读取请求;
提交单元,用于将所述生成单元生成的所述至少两个块读取请求一次性提交至硬盘的输入输出IO调度队列;
读取单元,用于通过调度所述IO调度队列中的由所述提交单元提交的至少两个块读取请求,将所述数据读请求所请求的数据从硬盘缓存区读取到用户缓存区。
8.根据权利要求7所述的装置,其特征在于,所述生成单元包括:
数据页分解子单元,用于根据所述接收单元接收到的所述数据读请求所请求的数据的大小将所述数据分解成多个数据页;
缓存区分配子单元,用于在内核缓存区内为所述数据页分解子单元分解的所述多个数据页中的至少两个数据页分配存储空间;
块请求生成子单元,用于为所述缓存区分配子单元分配了内核缓存区的至少两个数据页中的每一个数据页生成一个块读取请求。
9.根据权利要求8所述的装置,其特征在于,
所述缓存区分配子单元,具体用于根据所述数据页分解子单元分解的所述多个数据页的缓存位置,在所述内核缓存区内为所述多个数据页中位于硬盘缓存区的至少两个数据页分配存储空间;
所述块请求生成子单元,具体用于为所述位于硬盘缓存区的至少两个数据页中的每一个数据页生成一个块读取请求。
10.根据权利要求9所述的装置,其特征在于,
所述读取单元,还用于根据所述数据页分解子单元分解的多个数据页的缓存位置,将所述多个数据页中位于所述内核缓存区的数据页的数据从所述内核缓存区读取到用户缓存区。
11.根据权利要求8至10任意一项所述的装置,其特征在于,所述读取单元包括:
块请求调度子单元,用于依次调度所述IO调度队列中的块读取请求;
数据读取子单元,用于将所述块请求调度子单元调度的每一个块读取请求所请求的数据从所述硬盘缓存区读取到在所述内核缓存区内为所述每一个块读取请求的数据页分配的存储空间,并从所述分配的存储空间读取到用户缓存区。
12.根据权利要求7至11任意一项所述的装置,其特征在于,所述装置还包括:
管理单元,用于在所述提交单元将所述至少两个块读取请求一次性提交至硬盘的IO调度队列后,挂起所述用户进程,以及在所述读取单元将所述数据读请求所请求的数据从硬盘缓存区读取到用户缓存区后,唤醒所述用户进程。
13.一种计算设备,其特征在于,所述计算设备包括:主板,以及通过所述主板连接的中央处理器CPU、内存、硬盘,其中,
所述CPU,用于接收用户进程提交的数据读请求,执行内核指令,根据所述数据读请求生成至少两个块读取请求,并将所述至少两个块读取请求一次性提交至所述硬盘的输入输出IO调度队列,以及通过调度所述IO调度队列中的所述至少两个块读取请求,将所述数据读请求所请求的数据从所述内存的硬盘缓存区读取到所述内存的用户缓存区。
14.根据权利要求13所述的计算设备,其特征在于,
所述CPU,具体用于根据所述数据读请求所请求的数据的大小将所述数据分解成多个数据页,在内核缓存区内为所述多个数据页中的至少两个数据页分配存储空间,以及为所述至少两个数据页中的每一个数据页生成一个块读取请求。
15.根据权利要求14所述的计算设备,其特征在于,
所述CPU,具体用于根据所述多个数据页的缓存位置,在所述内核缓存区内为所述多个数据页中位于硬盘缓存区的至少两个数据页分配存储空间,为所述位于硬盘缓存区的至少两个数据页中的每一个数据页生成一个块读取请求,以及将所述多个数据页中位于所述内核缓存区的数据页的数据从所述内核缓存区读取到用户缓存区。
16.根据权利要求14或15所述的计算设备,其特征在于,
所述CPU,具体用于依次调度所述IO调度队列中的块读取请求,将每一个块读取请求所请求的数据从所述硬盘缓存区读取到在所述内核缓存区内为所述每一个块读取请求的数据页分配的存储空间,并从所述分配的存储空间读取到用户缓存区。
17.根据权利要求13至16任意一项所述的计算设备,其特征在于,
所述CPU,还用于将所述至少两个块读取请求一次性提交至硬盘的IO调度队列后,挂起所述用户进程,以及将所述数据读请求所请求的数据从硬盘缓存区读取到用户缓存区后唤醒所述用户进程。
CN201310267802.4A 2013-06-28 2013-06-28 数据读取方法、装置及计算设备 Active CN103336672B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310267802.4A CN103336672B (zh) 2013-06-28 2013-06-28 数据读取方法、装置及计算设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310267802.4A CN103336672B (zh) 2013-06-28 2013-06-28 数据读取方法、装置及计算设备

Publications (2)

Publication Number Publication Date
CN103336672A true CN103336672A (zh) 2013-10-02
CN103336672B CN103336672B (zh) 2016-10-05

Family

ID=49244852

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310267802.4A Active CN103336672B (zh) 2013-06-28 2013-06-28 数据读取方法、装置及计算设备

Country Status (1)

Country Link
CN (1) CN103336672B (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104834475A (zh) * 2014-02-07 2015-08-12 广明光电股份有限公司 固态硬盘的读取方法
CN104954851A (zh) * 2014-03-28 2015-09-30 深圳市茁壮网络股份有限公司 一种数据处理方法及装置
CN105159776A (zh) * 2015-08-03 2015-12-16 中科创达软件股份有限公司 进程处理方法及装置
CN105988725A (zh) * 2015-02-13 2016-10-05 腾讯科技(深圳)有限公司 磁盘i/o调度方法和装置
CN106161503A (zh) * 2015-03-27 2016-11-23 中兴通讯股份有限公司 一种分布式存储系统中的文件读取方法及服务端
CN106776046A (zh) * 2017-01-13 2017-05-31 郑州云海信息技术有限公司 一种scst读写优化方法及系统
CN110688325A (zh) * 2019-09-05 2020-01-14 苏州浪潮智能科技有限公司 一种固态硬盘的垃圾回收方法、装置、设备及存储介质
CN113487026A (zh) * 2021-07-05 2021-10-08 江苏号百信息服务有限公司 一种图计算中io节点高效读取数据的方法及系统

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1588299A (zh) * 2004-08-06 2005-03-02 威盛电子股份有限公司 进行硬盘阵列数据迁移的方法及相关装置
CN100342319C (zh) * 2005-09-29 2007-10-10 威盛电子股份有限公司 磁盘阵列写入指令处理方法
CN101118477A (zh) * 2007-08-24 2008-02-06 成都索贝数码科技股份有限公司 一种提高磁盘数据访问效率的方法
US7577763B1 (en) * 2005-02-28 2009-08-18 Apple Inc. Managing read requests from multiple requestors
CN101652765A (zh) * 2007-04-20 2010-02-17 媒体逻辑股份公司 设备控制器
CN102043593A (zh) * 2010-12-17 2011-05-04 天津曙光计算机产业有限公司 一种基于Region的磁盘外置cache管理方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1588299A (zh) * 2004-08-06 2005-03-02 威盛电子股份有限公司 进行硬盘阵列数据迁移的方法及相关装置
US7577763B1 (en) * 2005-02-28 2009-08-18 Apple Inc. Managing read requests from multiple requestors
CN100342319C (zh) * 2005-09-29 2007-10-10 威盛电子股份有限公司 磁盘阵列写入指令处理方法
CN101652765A (zh) * 2007-04-20 2010-02-17 媒体逻辑股份公司 设备控制器
CN101118477A (zh) * 2007-08-24 2008-02-06 成都索贝数码科技股份有限公司 一种提高磁盘数据访问效率的方法
CN102043593A (zh) * 2010-12-17 2011-05-04 天津曙光计算机产业有限公司 一种基于Region的磁盘外置cache管理方法

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104834475B (zh) * 2014-02-07 2017-11-21 广明光电股份有限公司 固态硬盘的读取方法
CN104834475A (zh) * 2014-02-07 2015-08-12 广明光电股份有限公司 固态硬盘的读取方法
CN104954851A (zh) * 2014-03-28 2015-09-30 深圳市茁壮网络股份有限公司 一种数据处理方法及装置
CN104954851B (zh) * 2014-03-28 2018-11-13 深圳市茁壮网络股份有限公司 一种数据处理方法及装置
CN105988725A (zh) * 2015-02-13 2016-10-05 腾讯科技(深圳)有限公司 磁盘i/o调度方法和装置
CN105988725B (zh) * 2015-02-13 2018-12-11 腾讯科技(深圳)有限公司 磁盘i/o调度方法和装置
CN106161503A (zh) * 2015-03-27 2016-11-23 中兴通讯股份有限公司 一种分布式存储系统中的文件读取方法及服务端
CN105159776A (zh) * 2015-08-03 2015-12-16 中科创达软件股份有限公司 进程处理方法及装置
CN105159776B (zh) * 2015-08-03 2019-02-19 中科创达软件股份有限公司 进程处理方法及装置
CN106776046A (zh) * 2017-01-13 2017-05-31 郑州云海信息技术有限公司 一种scst读写优化方法及系统
CN110688325A (zh) * 2019-09-05 2020-01-14 苏州浪潮智能科技有限公司 一种固态硬盘的垃圾回收方法、装置、设备及存储介质
CN113487026A (zh) * 2021-07-05 2021-10-08 江苏号百信息服务有限公司 一种图计算中io节点高效读取数据的方法及系统
CN113487026B (zh) * 2021-07-05 2024-05-03 江苏号百科技有限公司 一种图计算中io节点高效读取数据的方法及系统

Also Published As

Publication number Publication date
CN103336672B (zh) 2016-10-05

Similar Documents

Publication Publication Date Title
CN103336672A (zh) 数据读取方法、装置及计算设备
CN107766148B (zh) 一种异构集群及任务处理方法和装置
Chiu et al. Molecular dynamics simulations on high-performance reconfigurable computing systems
KR102368970B1 (ko) 지능형 고 대역폭 메모리 장치
CN106383695B (zh) 基于fpga的聚类算法的加速系统及其设计方法
CN102906726B (zh) 协处理加速方法、装置及系统
US8595732B2 (en) Reducing the response time of flexible highly data parallel task by assigning task sets using dynamic combined longest processing time scheme
JP4292198B2 (ja) 実行スレッドをグループ化するための方法
CN105830026A (zh) 用于调度来自虚拟机的图形处理单元工作负荷的装置和方法
WO2007084700A2 (en) System and method for thread handling in multithreaded parallel computing of nested threads
CN105227669A (zh) 一种面向深度学习的cpu与gpu混合的集群架构系统
CN103197916A (zh) 用于源操作数收集器高速缓存的方法和装置
CN104714785A (zh) 任务调度装置、方法及并行处理数据的设备
CN102810050A (zh) 日志数据写入方法和日志系统
CN103279330A (zh) 一种基于虚拟机GPU计算下的MapReduce并行编程模型
WO2023082575A1 (zh) 一种面向神经网络模型计算的图执行流水并行方法和装置
Awatramani et al. Increasing GPU throughput using kernel interleaved thread block scheduling
Singh et al. Collaborative adaptation for energy-efficient heterogeneous mobile SoCs
CN103685492A (zh) Hadoop集群系统的调度方法、调度装置及其应用
Goh et al. Design and performance evaluation of combined first-fit task allocation and migration strategies in mesh multiprocessor systems
RADMANOVIĆ et al. Efficient computation of Galois field expressions on hybrid CPU-GPU platforms.
US8539207B1 (en) Lattice-based computations on a parallel processor
CN115543317A (zh) 前端页面开发方法及装置
CN103631648A (zh) 一种任务处理方法及系统
CN111444430B (zh) 内容推荐方法、装置、设备和存储介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20220211

Address after: 550025 Huawei cloud data center, jiaoxinggong Road, Qianzhong Avenue, Gui'an New District, Guiyang City, Guizhou Province

Patentee after: Huawei Cloud Computing Technology Co.,Ltd.

Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen

Patentee before: HUAWEI TECHNOLOGIES Co.,Ltd.

TR01 Transfer of patent right