一种设备运行速度优化方法和装置转让专利

申请号 : CN201310082795.0

文献号 : CN103150186B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张领

申请人 : 腾讯科技(深圳)有限公司

摘要 :

本发明实施例公开了一种设备运行速度优化方法和装置,其中方法的实现包括:在可执行文件启动前将预取数据文件加载到内存中;上述预取数据文件中存放有可执行文件在本次启动之前的启动过程中产生的预取数据,上述预取数据中对应不同文件的文件信息存放在上述预取数据文件中;拦截磁盘设备对象的输入输出请求包IRP处理,若IRP处理的内容存放在上述预取数据文件中,则从内存中读取读取上述IRP处理对应的内容。通过以上方案可将所有分散的I/O集中到一起,同时又为预取数据的压缩提供了可能。可以大大提高预取数据的加载效率,是具有普适性并且效果显著的设备提速方案。

权利要求 :

1.一种设备运行速度优化方法,其特征在于,包括:

在可执行文件启动前将预取数据文件加载到内存中;所述预取数据文件中存放有所述可执行文件在本次启动之前的启动过程中产生的预取数据,所述预取数据中对应不同文件的文件信息存放在所述预取数据文件中;所述预取数据中连续的内容及其对应的磁盘物理偏移存放在同一数据结构,并作为一个元素存放在预取数据文件中;

拦截磁盘设备对象的输入输出请求包IRP处理,若IRP处理的内容存放在所述预取数据文件中,在从内存中读取所述IRP处理对应的内容之前,禁止可执行文件在启动过程中读取所述可执行文件在本次启动之前的启动过程中产生的预取数据;获取所述预取数据中的内容和磁盘物理偏移的对应关系;

依据所述预取数据中的内容和磁盘物理偏移的对应关系从内存中读取所述IRP处理对应的内容。

2.根据权利要求1所述方法,其特征在于,所述可执行文件包括:

操作系统的可执行文件和\或应用程序文件。

3.根据权利要求1或2所述方法,其特征在于,所述预取数据文件为压缩后的预取数据文件;所述将预取数据文件加载到内存中之前还包括:获取解压规则,使用所述解压规则对所述压缩后的预取数据文件进行解压。

4.一种设备运行速度优化装置,其特征在于,包括:

加载单元,用于在可执行文件启动前将预取数据文件加载到内存中;所述预取数据文件中存放有可执行文件在本次启动之前的启动过程中产生的预取数据,所述预取数据中对应不同文件的文件信息存放在所述预取数据文件中;所述加载单元加载的预取数据中连续的内容及其对应的磁盘物理偏移存放在同一数据结构,并作为一个元素存放在预取数据文件中;

拦截单元,用于拦截磁盘设备对象的输入输出请求包IRP处理;

读取控制单元,用于在读取单元从内存中读取所述IRP处理对应的内容之前,禁止可执行文件在启动过程中读取所述可执行文件在本次启动之前的启动过程中产生的预取数据;

读取单元,用于若拦截单元拦截的IRP处理的内容存放在所述加载单元加载的预取数据文件中,则获取所述预取数据中的内容和磁盘物理偏移的对应关系;并依据所述预取数据中的内容和磁盘物理偏移的对应关系从内存中读取所述IRP处理对应的内容。

5.根据权利要求4所述装置,其特征在于,

所述加载单元,具体用于在操作系统的可执行文件和\或应用程序文件启动前将预取数据文件加载到内存中。

6.根据权利要求4或5所述装置,其特征在于,所述预取数据文件为压缩后的预取数据文件;所述装置还包括:规则获取单元,用于所述将预取数据文件加载到内存中之前,获取解压规则;

解压单元,用于使用所述规则获取单元获取的解压规则对所述压缩后的预取数据文件进行解压。

说明书 :

一种设备运行速度优化方法和装置

技术领域

[0001] 本发明涉及计算机技术领域,特别涉及一种设备运行速度优化方法和装置。

背景技术

[0002] 计算机开机慢和开机后运行慢一直是困扰计算机用户的一大难题。尤其是长期运行的计算机,开机慢和运行慢的问题更加严重。为解决该问题,很多软件公司一直在找突破加快开机速度的方法。其中视窗(windows)系统的预取机制就是其中较为常用的方案。另外,第三方厂家也提供了各种优化工具,通过减轻第三方软件给操作系统带来的额外负担,并优化系统的一些设置来达到加速的目的。
[0003] 但从现状来看,第三方厂家应该还没有找到一个效果显著并且具有普适性的提速方案。主要原因是操作系统本身已经尽可能做了各种优化,通过设置操作系统参数能达到的效果有限,而第三方软件情况又太复杂,对系统性能造成的影响可能错综复杂,因此很难在确保用户使用性和系统性能两者之间找到一个平衡点。
[0004] 在当前的windows系统中,预取机制已经成为必不可少的技术,通过该技术可以大大改善用户计算机开机速度,假如一个计算机没有开启预取时的开机时间为50秒,开启预取后可能只有30秒。该技术主要包括两点:
[0005] 一、系统开机预取:
[0006] 操作系统通过捕获开机过程中程序产生的hardfault(一种中断处理函数)计算出开机过程中需要读取的文件内容信息,将这些信息保存起来,等下次启动时由内核模块预先读入这些内容,尽可能减少开机过程中程序产生的hardfault,从而让I/O(input/output,输入输出)对程序运行产生的影响减至最低。
[0007] 二、应用软件启动预取:
[0008] 操作系统捕获软件启动后10秒内的hardfault,并计算对应的文件信息,在下次启动软件前进行提前预取到内存中,减少程序运行产生的hardfault,达到加速目的。
[0009] 该方案主要是解决程序运行时的hardfault问题,因为在程序运行过程中除了中央处理器(Central Processing Unit,CPU)和内存外,影响运行的主要因素是I/O问题,I/O问题主要体现在hardfault的产生上,每次hardfault意味着程序要暂停运行,等待从物理存储器中读出对应的内容后才能继续运行。通过提前读入的方法可以有效改善程序运行阶段的I/O问题,实现设备提速。
[0010] 在开机预取阶段,上述预取机制的方案,操作系统保存了需要读取的文件偏移信息,然后在开机过程中按照文件偏移信息保存的顺序进行读入,同时程序也在同步运行,如果程序需要的信息还没来得及读入,则仍然会产生hardfault。因此I/O效率较低,故而开机速度较慢。

发明内容

[0011] 本发明实施例提供了一种设备运行速度优化方法和装置,用于提供具有普适性并且效果显著的设备提速方案。
[0012] 一种设备运行速度优化方法,包括:
[0013] 在可执行文件启动前将预取数据文件加载到内存中;上述预取数据文件中存放有可执行文件在本次启动之前的启动过程中产生的预取数据,上述预取数据中对应不同文件的文件信息存放在上述预取数据文件中;
[0014] 拦截磁盘设备对象的输入输出请求包IRP处理,若IRP处理的内容存放在上述预取数据文件中,则从内存中读取读取上述IRP处理对应的内容。
[0015] 一种设备运行速度优化方法,包括:
[0016] 获取可执行文件在启动过程中产生的预取数据;
[0017] 将预取数据中对应不同文件的文件信息存放在预取数据文件中;
[0018] 在上述可执行文件启动前将上述预取数据文件以及上述预取数据中的内容和磁盘物理偏移的对应关系,发送给上述可执行文件所在的装置。
[0019] 一种设备运行速度优化装置,包括:
[0020] 加载单元,用于在可执行文件启动前将预取数据文件加载到内存中;上述预取数据文件中存放有可执行文件在本次启动之前的启动过程中产生的预取数据,上述预取数据中对应不同文件的文件信息存放在上述预取数据文件中;
[0021] 拦截单元,用于拦截磁盘设备对象的输入输出请求包IRP处理;
[0022] 读取单元,用于若拦截单元拦截的IRP处理的内容存放在上述加载单元加载的预取数据文件中,则从内存中读取读取上述IRP处理对应的内容。
[0023] 一种设备运行速度优化装置,包括:
[0024] 数据获取单元,用于获取可执行文件在启动过程中产生的预取数据;
[0025] 文件生成单元,用于将预取数据中对应不同文件的文件信息存放在预取数据文件中;
[0026] 发送单元,用于在上述可执行文件启动前将上述预取数据文件以及上述预取数据中的内容和磁盘物理偏移的对应关系,发送给上述可执行文件所在的装置。
[0027] 从以上技术方案可以看出,本发明实施例具有以下优点:通过以上方案可将所有分散的I/O集中到一起,同时又为预取数据的压缩提供了可能。可以大大提高预取数据的加载效率,是具有普适性并且效果显著的设备提速方案。

附图说明

[0028] 为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0029] 图1为本发明实施例方法流程示意图;
[0030] 图2为本发明实施例方法流程示意图;
[0031] 图3为本发明实施例方法流程示意图;
[0032] 图4为本发明实施例装置结构示意图;
[0033] 图5为本发明实施例装置结构示意图;
[0034] 图6为本发明实施例装置结构示意图;
[0035] 图7为本发明实施例装置结构示意图;
[0036] 图8为本发明实施例装置结构示意图。

具体实施方式

[0037] 为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部份实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
[0038] 本发明实施例提供了一种设备运行速度优化方法,如图1所示,包括:
[0039] 101:在可执行文件启动前将预取数据文件加载到内存中;上述预取数据文件中存放有可执行文件在本次启动之前的启动过程中产生的预取数据,上述预取数据中对应不同文件的文件信息存放在上述预取数据文件中;
[0040] 可选地,加载的方式可以是使用引导启动类型的驱动来加载,或者其他的方式加载也是可以的本发明实施例对比不予限定。
[0041] 可选地,上述可执行文件包括:操作系统的可执行文件和\或应用程序文件。本发明实施例的方案适用于操作系统也适用于应用程序的运行加速,前者可以加快启动速度,后者可以加快应用程序运行速度。后续实施例将以操作系统为例进行说明,本领域技术人员可以理解的是,操作系统的举例不应理解为对本发明实施例的限定。
[0042] 可选地,上述预取数据中连续的内容及其对应的磁盘物理偏移存放在同一数据结构,并作为一个元素存放在预取数据文件中。上述数据结构可以是结构体,本领域技术人员可以理解的是结构体并不是数据结构的穷举,该优选的实现方案不应理解为对本发明实施例的唯一限定。
[0043] 进一步地,若上述预取数据文件为压缩后的预取数据文件;上述将预取数据文件加载到内存中之前还包括:获取解压规则,使用上述解压规则对上述压缩后的预取数据文件进行解压。通过压缩可以提高I/O读取效率,进而进一步提高设备运行速度。压缩的算法可以采用7z的压缩算法或其他压缩算法,对此本发明实施例不予限定。
[0044] 本步骤中的预取数据文件可以由可执行文件所在的装置来生成,也可以是接收到的由其他装置生成的预取数据文件,并不影响本发明实施例的实现,因此本发明实施例对此不予限定。
[0045] 102:拦截磁盘设备对象的输入输出请求包(I/O Request Package,IRP)处理,若IRP处理的内容存放在上述预取数据文件中,则从内存中读取读取上述IRP处理对应的内容。
[0046] 以上方案,通过以上方案可将所有分散的I/O集中到一起,同时又为预取数据的压缩提供了可能。可以大大提高预取数据的加载效率,是具有普适性并且效果显著的设备提速方案。
[0047] 进一步地,上述从内存中读取读取上述IRP处理对应的内容之前还包括:
[0048] 禁止可执行文件在启动过程中读取上述可执行文件在本次启动之前的启动过程中产生的预取数据;获取上述预取数据中的内容和磁盘物理偏移的对应关系;具体禁止的方案可以是在可执行文件在启动过程中读取上述可执行文件在本次启动之前直接删除这些预读数据。
[0049] 那么,上述从内存中读取上述IRP处理对应的内容包括:依据上述预取数据中的内容和磁盘物理偏移的对应关系从内存中读取上述IRP处理对应的内容。
[0050] 预取数据中的内容和磁盘物理偏移的对应关系可以是存储在预取数据文件中的,比如a文件有4k大小,其中0~1K的内容在物理磁盘是连续的,对应的物理磁盘偏移是0x100000~0x100400,1~4k在物理磁盘也是连续的,对应的物理磁盘偏移是0x200000~
0x200c00,那么就将0x100000~0x100400中的内容读出并记录该磁盘范围,然后作为一个元素保存在预取数据文件中,将0x200000~0x200c00中的内容和该范围值也作为一个元素保存在预取数据文件中。基于该举例,预取数据对应的物理磁盘偏移包括两部分:
0x100000~0x100400和0x200000~0x200c00,那么读取磁盘物理偏移为:0x100000~
0x100400和0x200000~0x200c00中的内容即可。
[0051] 本发明实施例还提供了另一种设备运行速度优化方法,如图2所示,包括:
[0052] 201:获取可执行文件在启动过程中产生的预取数据;
[0053] 该方案的执行主体可以是独立的装置,也可以是集成在可执行文件所在的装置中,并不影响本发明实施例的实现,本发明实施例对此不予限定。
[0054] 可选地,上述可执行文件包括:操作系统的可执行文件和\或应用程序文件。本发明实施例的方案适用于操作系统也适用于应用程序的运行加速,前者可以加快启动速度,后者可以加快应用程序运行速度。后续实施例将以操作系统为例进行说明,本领域技术人员可以理解的是,操作系统的举例不应理解为对本发明实施例的限定。
[0055] 202:将预取数据中对应不同文件的文件信息存放在预取数据文件中;
[0056] 可选地,上述将预取数据中对应不同文件的文件信息存放在预取数据文件中包括:将连续的内容及其对应的磁盘物理偏移存放在同一数据结构作为一个元素存放在预取数据文件中。
[0057] 按本方案实施例方案可以将多个文件合并到预取数据文件中,比如a文件有4k大小,其中0~1K的内容在物理磁盘是连续的,对应的物理磁盘偏移是0x100000~
0x100400,1~4k在物理磁盘也是连续的,对应的物理磁盘偏移是0x200000~0x200c00,那么就将0x100000~0x100400中的内容读出并记录该磁盘范围,然后作为一个元素保存在预取数据文件中,将0x200000~0x200c00中的内容和该范围值也作为一个元素保存在预取数据文件中。
[0058] 203:在上述可执行文件启动前将上述预取数据文件以及上述预取数据中的内容和磁盘物理偏移的对应关系,发送给上述可执行文件所在的装置。
[0059] 以上方案,通过以上方案可将所有分散的I/O集中到一起,同时又为预取数据的压缩提供了可能。可以大大提高预取数据的加载效率,是具有普适性并且效果显著的设备提速方案。
[0060] 进一步地,上述202中,将上述预取数据文件发送给上述可执行文件所在的装置之前还包括:将上述预取数据文件压缩;压缩的算法可以采用7z的压缩算法或其他压缩算法,对此本发明实施例不予限定。
[0061] 那么,上述203中,将上述预取数据文件发送给上述可执行文件所在的装置包括:将压缩后的预取数据文件发送给上述可执行文件所在的装置。
[0062] 影响I/O读取效率主要有两个因素:I/O大小和I/O的连续性,I/O大小就是一次I/O的数据量,I/O连续性直接影响到I/O到物理存储器中的读取次数,同样大小的I/O,不连续的I/O很可能比连续的I/O多出很多I/O读取次数,所用的时间自然就变得很长。因此本发明实施例的基本实现思路就是将系统开机阶段和应用程序启动过程的预取数据重组和压缩来达到提高I/O读取效率的目的。以操作系统的启动为例,请参阅图3,具体的实现流程如下:
[0063] 301:首先开发对预取数据进行处理的应用层程序,该应用程序可以在用户计算机启动后自动运行。该程序在系统空闲阶段读取操作系统本次启动过程中产生的预取数据。
[0064] 302:上述应用层程序将对应到不同文件中的文件信息读取到同一个文件中。优选地将连续的内容与其对应的磁盘物理偏移放在一个结构体中,并作为一个元素(element)存储在文件中。
[0065] 303:将302中生成的文件进行压缩。
[0066] 压缩的方案可以采用开源的7z的压缩算法或其他压缩算法,具体的压缩算法不影响本发明实施例的实现,本发明实施例对此不予限定。
[0067] 304:开发一个引导启动类型的驱动来实现压缩后文件的加载,该步骤要注意两个问题:
[0068] 由于该方案是代替操作系统进行预取数据的读取,因此在操作系统启动时要骗过操作系统的预取模块,不能让预取模块的预取方案起作用,由于各种操作系统的预取机制不一样,例如:预取模块集成到内核模块中、通过准备启动(readyboot)驱动来实现的,因此要区别对待。最方便的方案是上述引导启动类型的驱动在操作系统的预取模块起作用前,将操作系统需要的预取数据删除,这样既不让操作系统的预取模块起作用,又不影响本次启动新的预取数据的产生。
[0069] 系统的预取模块通过将文件数据读取到内存中来实现预加载,这里面需要注意的是内容和文件偏移的对应。由于将所有的预取数据全部合并到一个文件中,为解决难以控制系统的内存模块把这种关系对应起来。因此我们可以把这种关系保存到我们自己申请的内存中,同时拦截磁盘设备对象的IRP(I/O Request Package,输入输出请求包)处理,如果发现已经被我们读取就可以直接从内存中返回内容。
[0070] 以上方案,通过以上方案可将所有分散的I/O集中到一起,同时又为预取数据的压缩提供了可能。可以大大提高预取数据的加载效率,是具有普适性并且效果显著的设备提速方案。
[0071] 本发明实施例还提供了一种设备运行速度优化装置,如图4所示,包括:
[0072] 加载单元401,用于在可执行文件启动前将预取数据文件加载到内存中;上述预取数据文件中存放有可执行文件在本次启动之前的启动过程中产生的预取数据,上述预取数据中对应不同文件的文件信息存放在上述预取数据文件中;
[0073] 可选地,加载的方式可以是使用引导启动类型的驱动来加载,或者其他的方式加载也是可以的本发明实施例对比不予限定。
[0074] 拦截单元402,用于拦截磁盘设备对象的输入输出请求包IRP处理;
[0075] 读取单元403,用于若拦截单元402拦截的IRP处理的内容存放在上述加载单元401加载的预取数据文件中,则从内存中读取读取上述IRP处理对应的内容。
[0076] 以上方案,通过以上方案可将所有分散的I/O集中到一起,同时又为预取数据的压缩提供了可能。可以大大提高预取数据的加载效率,是具有普适性并且效果显著的设备提速方案。
[0077] 如图5所示,上述装置还包括:
[0078] 读取控制单元501,用于在上述读取单元403从内存中读取读取上述IRP处理对应的内容之前,禁止可执行文件在启动过程中读取上述可执行文件在本次启动之前的启动过程中产生的预取数据;
[0079] 上述读取单元403,具体用于获取上述预取数据中的内容和磁盘物理偏移的对应关系;并依据上述预取数据中的内容和磁盘物理偏移的对应关系从内存中读取上述IRP处理对应的内容。
[0080] 可选地,上述加载单元401,具体用于在操作系统的可执行文件和\或应用程序文件启动前将预取数据文件加载到内存中。本发明实施例的方案适用于操作系统也适用于应用程序的运行加速,前者可以加快启动速度,后者可以加快应用程序运行速度。后续实施例将以操作系统为例进行说明,本领域技术人员可以理解的是,操作系统的举例不应理解为对本发明实施例的限定。
[0081] 可选地,加载的方式可以是使用引导启动类型的驱动来加载,或者其他的方式加载也是可以的本发明实施例对比不予限定。
[0082] 可选地,上述加载单元401加载的预取数据中连续的内容及其对应的磁盘物理偏移存放在同一数据结构,并作为一个元素存放在预取数据文件中。上述数据结构可以是结构体,本领域技术人员可以理解的是结构体并不是数据结构的穷举,该优选的实现方案不应理解为对本发明实施例的唯一限定。
[0083] 进一步地,如图6所示,上述预取数据文件为压缩后的预取数据文件;上述装置还包括:
[0084] 规则获取单元601,用于上述将预取数据文件加载到内存中之前,获取解压规则;
[0085] 解压单元602,用于使用上述规则获取单元601获取的解压规则对上述压缩后的预取数据文件进行解压。
[0086] 通过压缩可以提高I/O读取效率,进而进一步提高设备运行速度。压缩的算法可以采用7z的压缩算法或其他压缩算法,对此本发明实施例不予限定。
[0087] 本发明实施例还提供了一种设备运行速度优化装置,如图7所示,包括:
[0088] 数据获取单元701,用于获取可执行文件在启动过程中产生的预取数据;
[0089] 文件生成单元702,用于将预取数据中对应不同文件的文件信息存放在预取数据文件中;
[0090] 发送单元703,用于在上述可执行文件启动前将上述预取数据文件以及上述预取数据中的内容和磁盘物理偏移的对应关系,发送给上述可执行文件所在的装置。
[0091] 可选地,文件生成单元702,具体用于将连续的内容及其对应的磁盘物理偏移存放在同一数据结构作为一个元素存放在预取数据文件中。
[0092] 以上方案,通过以上方案可将所有分散的I/O集中到一起,同时又为预取数据的压缩提供了可能。可以大大提高预取数据的加载效率,是具有普适性并且效果显著的设备提速方案。
[0093] 进一步地,如图8所示,上述装置还包括:
[0094] 压缩单元801,用于在将上述预取数据文件发送给上述可执行文件所在的装置之前,将上述预取数据文件压缩;
[0095] 上述发送单元703,具体用于将压缩后的预取数据文件发送给上述可执行文件所在的装置。
[0096] 值得注意的是,上述装置实施例中,所包括的各个单元只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
[0097] 另外,本领域普通技术人员可以理解实现上述各方法实施例中的全部或部分步骤是可以通过程序来指令相关的硬件完成,相应的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
[0098] 以上仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明实施例揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。