找回密码
 注册
快捷导航
查看: 4764|回复: 15

探讨一下prefetch

[复制链接] |自动提醒
阅读字号:

6990

回帖

119

积分

6万

资产值

至尊会员I Rank: 4Rank: 4Rank: 4Rank: 4

注册时间
2002-1-6
铜牌荣誉勋章(注册8年以上会员)银牌荣誉勋章(注册10年以上会员)月全勤勋章金牌荣誉勋章(注册20年以上会员)年全勤勋章2023
发表于 2003-6-2 21:02:39| 字数 1,177| - 广东省深圳市 电信 | 显示全部楼层 |阅读模式
看见aithinkpad的windowsserver 2003的文章,不禁手痒。想对于prefetch谈谈自己的看法。写的比较匆忙,也比较乱,大家勉强看看吧。自己对于操作系统的理解比较肤浅,希望大家不要见笑。
  
prefetch,如果直接安装中文来翻译的话,可以称为预先装载技术。说的直白一点就是操作系统在用户没有执行某个应用程序的时候预先装载了该执行程序。该技术的前提是你的系统中有更多可用的空闲内存,操作系统把这些内存作为缓存,用来装载系统中指定的需要预先装载的可执行程序。该功能依赖于两个原理,内存访问速度远远快于磁盘,操作系统访问文件的局域性原理。
  
众所周知,对于CPU操作而言,内存访问速度通常是纳秒级,而磁盘访问的速度通常是微秒甚至毫秒级,因此,在进行读写操作的时候,从内存读取会比从磁盘快很多。
通常,在用户打开一个文件的时候,操作系统需要进行一系列的操作,包括:寻找该文件的关联程序(该关联程序通常是一个可执行程序),寻找该可执行程序,装载该执行程序,然后寻找数据文件,装载数据文件等步骤。而这些需要执行的几乎每个步骤都包含了读取磁盘的操作,甚至包含了多次读取磁盘的操作。因此,在打开一个程序的时候,消耗时间最多的,是等待磁盘IO。但是如果我们在打开文件以前,已经启动了该文件的关联程序,那么打开文件的时候就不用重新装载该管理程序了,系统自动使用代码共享和写时复制(Copy on Write)操作,可以减少一半以上的响应时间。对于这个问题,使用word的用户应该很清楚,打开第一个word文档的时间和打开第二个word文档的时间差别时相当明显的。
  
文件访问的局域性原理:操作系统运行的时候,对于磁盘上的文件访问的概率是不相同的,比如,浏览器和dvd播放器,在通常情况下,用户使用浏览器的概率远远大于使用dvd播放器的概率。通常我们会多次的打开浏览器,而很少时候使用dvd播放器。对于其他的应用程序,我们访问的概率也有相似之处。因此对于某些经常使用的程序,我们可以缓存该应用程序的方法来提高访问该程序的响应速度,对于其他不常用的程序我们就可以不用缓存了。
  
prefetch使用了预先读取用户可能使用的程序的方法来提高系统速度,系统预先缓存了执行程序的部分代码和该程序在磁盘上的位置,在访问文件的时候就节约了寻找关联程序,装载程序代码的时间,从而加快了应用程序打开的速度。比如使用word,在对于word进行了prefetch,用户在打开word文档的时候,系统由于已经装载了word的执行程序,只需要在加载用户的word文档就可以了。因此速度比没有对word进行prefetch时候快的多。
  
当然,缓存是多多益善的东西,如果你的操作系统和应用程序能够全部缓存在内存中的话,你的操作系统时最快的。但是通常情况下,内存总是有限的,对于常用的程序进行缓存就足够了。
我即使掌控一切,也当保持谦逊和敬畏。  --《启示录》

3471

回帖

40

积分

3348

资产值

白金会员 Rank: 3Rank: 3Rank: 3

注册时间
2003-3-13
铜牌荣誉勋章(注册8年以上会员)
发表于 2003-6-2 22:09:46| 字数 90| - 广东省深圳市 电信 | 显示全部楼层

Re:探讨一下prefetch

呵呵,不错
其实就是一个欲加载程序映射文件的pf文件夹,不过里面的东西不要太多呀,偶的就有89个关联,有时候需要手动删除一些
其实有兴趣的打开layout.ini看看就可以了
值得加分
There should be light...There was light...
回复 支持 反对

使用道具 举报

941

回帖

2

积分

206

资产值

初级会员 Rank: 1

注册时间
2002-8-21
铜牌荣誉勋章(注册8年以上会员)银牌荣誉勋章(注册10年以上会员)
发表于 2003-6-2 22:17:54| 字数 11| - 广东省深圳市 电信 | 显示全部楼层

Re:探讨一下prefetch

好,又学到了东西。顶!
X24CBC P3-M1.13G\640M\ATI 8M\30G\12.1LCD
8XDVD及软驱底座 飞利浦826配合CF卡蓝牙登陆GPRS
回复 支持 反对

使用道具 举报

5952

回帖

98

积分

8148

资产值

至尊会员I Rank: 4Rank: 4Rank: 4Rank: 4

注册时间
2002-11-11
铜牌荣誉勋章(注册8年以上会员)银牌荣誉勋章(注册10年以上会员)
发表于 2003-6-2 22:34:32| 字数 1,909| - 广东省深圳市 电信 | 显示全部楼层

Re:探讨一下prefetch

还是sice对操作系统理解比我深,我原先一直用2000的,没有这个东西,只是最近在用2003才发现这个东西的,于是到微软找了些相关资料加上自己的看法,我觉得这个程序也就如你说的一样是一个优化的程序,也就是类似缓存的东东,但是我发现微软他把这个技术加入到了xp和2003里,看起来启动速度明显加快了,可是后台还同样要等待一些时候,也就是说我的系统已经进入了操作界面,启动声音也已经响过了,但是你要具体执行某个操作却还得等待一段时间。(这里就涉及到你说的缓存的关系了)但是你把它加到某个应用程序上效果还是明显的。我找到一篇文章,sice你可以去看看:
http://www.extremetech.com/article2/0,3973,10913,00.asp
  
由于机器上没有xp这个系统,而我的windows\prefetch目录下除了那个NTOSBOOT-B00DFAAD.pf文件以外,其余的都不见了,奇怪,难道是病毒的关系吗?昨天看了帅哥那篇norton的文章,加上最近有点厌烦norton,就下载了一个kav的杀毒软件,想试试看哪个杀毒软件好,就下载了那个100多个病毒的病毒包,而且执行了,用norton查杀无效,用kav查杀倒是杀了几个,可能也没杀干净,导致的结果就是现在系统狂慢,我都快要抓狂了,于是我就叫microfox看了看他的这个目录下的文件,他抓了张图给我看,文件名大都是以应用执行文件的名字为基础,加上一个“-”和描述执行文件完整路径的十六进制值,再加上文件扩展名.PF,
而且里面还有个layout.ini文件,我叫microfox复制了一些内容给我看,
OptimalLayoutFile]
Version=1
C:\WINDOWS\System32\ntoskrnl.exe
C:\WINDOWS\System32\BOOTVID.dll
C:\WINDOWS\System32\KDCOM.dll
C:\WINDOWS\System32\hal.dll
C:\WINDOWS\System32\config\system
C:\WINDOWS\System32\c_936.nls
C:\WINDOWS\System32\l_intl.nls
C:\WINDOWS\Fonts\vgaoem.fon
C:\WINDOWS\System32\drivers\ABP480N5.SYS
C:\WINDOWS\System32\drivers\SCSIPORT.SYS
C:\WINDOWS\System32\drivers\WMILIB.SYS
也就是说最优先预读取的信息都保存在这个文件里,那么这样看来,磁盘整理工具首先就是整理这些文件,而xp系统就可以通过安排这些文件的物理位置来达到最大的启动速度,所以微软的解释是对的,当Win XP觉察到计算机处于空闲状态时,它会不失时机地运行磁盘整理工具并尝试优化文件的位置。
  
正如你所说的,prefetch使用了预先读取用户可能使用的程序的方法来提高系统速度,系统预先缓存了执行程序的部分代码和该程序在磁盘上的位置,在访问文件的时候就节约了寻找关联程序,装载程序代码的时间,从而加快了应用程序打开的速度。
而在网络操作方面xp具有缓冲网络连接和配置的能力,这使得XP能够比以前的Windows更快地响应网络操作。默认情况下,Win XP优先使用缓冲的网络视图,而不是实时检测到的网络视图。这就是说,当你打开网络视图时,Win XP显示的实际上是以前缓冲的网络视图,这也是这个道理,我前面说的xp和2003启动的时候虽然进入了系统,看见了画面,听见了声音,但是实际上后台还在操作,所以你想运行某些东西的话还是得等一段时间也是这个道理。 从以上来看,这个prefetch技术还是有点作用的,起码xp的优化除了系统内核的优化也与这个技术有关。
  
我刚才还修改了注册表,把prefetch16进制的值改成了5,默认的值是2,不知道xp的默认值是多少?由于我的系统可能损坏了,我重新启动了也没感觉快一点,sice你如果是xp的系统的话,你把注册表的HKEY_LOCAL_MACHINE\system\currentcontrolset\control\session manager\memry management\prefetchparameters中的EnablePrefetcher中的16进制值改为5看看是否可以发挥prefetch的最佳效能。我想xp的注册表的结构应该和2003的也差不多吧,如果那个键值不在这个目录下,你可以用查找的功能查EnablePrefetcher看看在哪个目录再修改:)
T20&T40&T60P&x60
黑夜给了我黑色的眼睛
我却用它来寻找黑色TP
上海好冷啊!
回复 支持 反对

使用道具 举报

6990

回帖

119

积分

6万

资产值

至尊会员I Rank: 4Rank: 4Rank: 4Rank: 4

注册时间
2002-1-6
铜牌荣誉勋章(注册8年以上会员)银牌荣誉勋章(注册10年以上会员)月全勤勋章金牌荣誉勋章(注册20年以上会员)年全勤勋章2023
 楼主| 发表于 2003-6-2 23:41:12| 字数 561| - 广东省深圳市 电信 | 显示全部楼层

Re:探讨一下prefetch

呵呵,我的文章完全是自己的推断和猜测。并没有对prefetch进行过任何调整。
  
操作系统对于文件访问的局域性原理是很早以前就提出了,Linux和其他的Unix系统根据该原理使用LRU算法进行内存调度。只有windows会不厌其烦的对用户经常进行预先的调度了。但是Unix和Linux使用该算法对于系统进行调度是对于文件的,主要运用于服务器上,比如www服务器上的cache,原因很简单,访问首页的人总是比访问其他页面的人多。:)或者说,Linux和Unix使用LRU算法目的是为了缓存已经用过的数据块,以被下次使用,而windows使用了预取的策率。Linux内核本身也支持预读的策率,但是是基于文件数据块的预读,而不是基于应用程序的预读。
  
两种不同的策率基于两种操作系统的设计的目的。Linux和Unix做服务器使用,因此不需要预读整个程序,因为通常服务器的程序都是已经放在内存中了,需要缓存的是文件。Windows需要缓存的是应用程序,因为程序还不在内存中。:)
  
顺便说一句,Linux的缓存策率对于某些服务器不是非常有效的。比如vod服务器,原因很简单,一个vod请求的数据量可能比系统内存还大,系统无法缓存所有的数据。
  
而对于windows也是一样,过多的预读需要消耗掉相应的时间和内存空间,同时也消耗了用电量和磁盘寿命。
我即使掌控一切,也当保持谦逊和敬畏。  --《启示录》
回复 支持 反对

使用道具 举报

5057

回帖

12

积分

7307

资产值

高级会员 Rank: 2Rank: 2

注册时间
2003-1-16
铜牌荣誉勋章(注册8年以上会员)
发表于 2003-6-3 00:00:31| 字数 9| - 广东省深圳市 电信 | 显示全部楼层

Re:探讨一下prefetch

深入的学习,好文!
M6400: QX9300 FX3700M DDR3-16G  RGB-LED(8bit)  X-25E(RAID) 128G
X301-2774HH1   X60t-A7U
T:61P 43P 24P
回复 支持 反对

使用道具 举报

2734

回帖

10

积分

1208

资产值

中级会员 Rank: 2Rank: 2

注册时间
2002-3-26
铜牌荣誉勋章(注册8年以上会员)银牌荣誉勋章(注册10年以上会员)
发表于 2003-6-3 00:00:35| 字数 16| - 广东省深圳市 电信 | 显示全部楼层

Re:探讨一下prefetch

这个功能可以在2000里实现吗?
A31,P4-1.6G,512M,40G,15.1(SXGA+),RADEON7500(32M DDR),DVD+CDRW,WIN XP PRO 240,C-300M,192M,30G,10.4(SVGA),FDD,WIN2000 PRO 期待影响预期,情绪干扰理智,无知导致固执。
回复 支持 反对

使用道具 举报

5057

回帖

12

积分

7307

资产值

高级会员 Rank: 2Rank: 2

注册时间
2003-1-16
铜牌荣誉勋章(注册8年以上会员)
发表于 2003-6-3 00:14:24| 字数 21| - 广东省深圳市 电信 | 显示全部楼层

Re:探讨一下prefetch

不行吧,在2000的注册表里面没有这个选项
M6400: QX9300 FX3700M DDR3-16G  RGB-LED(8bit)  X-25E(RAID) 128G
X301-2774HH1   X60t-A7U
T:61P 43P 24P
回复 支持 反对

使用道具 举报

5952

回帖

98

积分

8148

资产值

至尊会员I Rank: 4Rank: 4Rank: 4Rank: 4

注册时间
2002-11-11
铜牌荣誉勋章(注册8年以上会员)银牌荣誉勋章(注册10年以上会员)
发表于 2003-6-3 00:23:46| 字数 83| - 广东省深圳市 电信 | 显示全部楼层

Re:探讨一下prefetch

只在xp和2003下可以,对了sice问你一个问题,我的机器是256的内存,最近想用vmware虚拟一个redhat8,不知道分配128内存够不够,是否运行起来很慢?
T20&T40&T60P&x60
黑夜给了我黑色的眼睛
我却用它来寻找黑色TP
上海好冷啊!
回复 支持 反对

使用道具 举报

5057

回帖

12

积分

7307

资产值

高级会员 Rank: 2Rank: 2

注册时间
2003-1-16
铜牌荣誉勋章(注册8年以上会员)
发表于 2003-6-3 00:35:14| 字数 207| - 广东省深圳市 电信 | 显示全部楼层

Re:探讨一下prefetch

aithinkpad,我来凑个数。以我的经验来看,128不行,首先你是在2003的系统下,即使是用XP底下的VMware虚拟2003,它的默认值都是256M的,我在2003下试过你的问题,因为我的内存大(1G),所以2003的运行没慢多少,但是128内存的redhat8显得很迟钝,我以为是禁用虚拟内存的问题,然而加大虚拟内存后,redhat8还是不行,最少256才能达到顺利操作的效果。结论是:很慢,而且两个都慢
M6400: QX9300 FX3700M DDR3-16G  RGB-LED(8bit)  X-25E(RAID) 128G
X301-2774HH1   X60t-A7U
T:61P 43P 24P
回复 支持 反对

使用道具 举报

5952

回帖

98

积分

8148

资产值

至尊会员I Rank: 4Rank: 4Rank: 4Rank: 4

注册时间
2002-11-11
铜牌荣誉勋章(注册8年以上会员)银牌荣誉勋章(注册10年以上会员)
发表于 2003-6-3 00:41:19| 字数 72| - 广东省深圳市 电信 | 显示全部楼层

Re:探讨一下prefetch

什么你的一个g的内存都这样?我原先用vmware虚拟过2000pro,但是很慢,没想到你的1g的内存都这么慢,看来不行了,还是放弃好了,谢谢:)
T20&T40&T60P&x60
黑夜给了我黑色的眼睛
我却用它来寻找黑色TP
上海好冷啊!
回复 支持 反对

使用道具 举报

5057

回帖

12

积分

7307

资产值

高级会员 Rank: 2Rank: 2

注册时间
2003-1-16
铜牌荣誉勋章(注册8年以上会员)
发表于 2003-6-3 02:26:04| 字数 99| - 广东省深圳市 电信 | 显示全部楼层

回复: Re:探讨一下prefetch

QUOTE:
aithinkpad wrote:
什么你的一个g的内存都这样?我原先用vmware虚拟过2000pro,但是很慢,没想到你的1g的内存都这么慢,看来不行了,还是放弃好了,谢谢:)

  
:^)遗憾
M6400: QX9300 FX3700M DDR3-16G  RGB-LED(8bit)  X-25E(RAID) 128G
X301-2774HH1   X60t-A7U
T:61P 43P 24P
回复 支持 反对

使用道具 举报

4490

回帖

1

积分

6151

资产值

入门会员 Rank: 1

注册时间
2003-3-17
铜牌荣誉勋章(注册8年以上会员)
发表于 2003-6-3 07:08:59| 字数 433| - 广东省深圳市 电信 | 显示全部楼层

回复: Re:探讨一下prefetch

QUOTE:
aithinkpad wrote:
我刚才还修改了注册表,把prefetch16进制的值改成了5,默认的值是2,不知道xp的默认值是多少?由于我的系统可能损坏了,我重新启动了也没感觉快一点,sice你如果是xp的系统的话,你把注册表的HKEY_LOCAL_MACHINE\system\currentcontrolset\control\session manager\memry management\prefetchparameters中的EnablePrefetcher中的16进制值改为5看看是否可以发挥prefetch的最佳效能。我想xp的注册表的结构应该和2003的也差不多吧,如果那个键值不在这个目录下,你可以用查找的功能查EnablePrefetcher看看在哪个目录再修改:)

  
好像XP是这样定义的:prefetch=1 是预加载启动项,2时加载应用程序,3是加载两者。 XP PRO的默认是3, 有的文章介绍改成5, 7 ,。。 我试过,没有可以感觉的差别。
回复 支持 反对

使用道具 举报

5057

回帖

12

积分

7307

资产值

高级会员 Rank: 2Rank: 2

注册时间
2003-1-16
铜牌荣誉勋章(注册8年以上会员)
发表于 2003-6-3 07:19:47| 字数 137| - 广东省深圳市 电信 | 显示全部楼层

Re:探讨一下prefetch

楼上的说法能找到依据吗?热切盼望中。如果如你所说,那我的prefetch指数可能要更改了,以前只是知道改成多少可能会显得快些,但是不知道其背后的原理。启动快固然好,可是最重要的是进入系统后运行程序的速度要快。按你所说,如果成立,那我就打算改为3了。不知道哪位能进一步给讲讲?
M6400: QX9300 FX3700M DDR3-16G  RGB-LED(8bit)  X-25E(RAID) 128G
X301-2774HH1   X60t-A7U
T:61P 43P 24P
回复 支持 反对

使用道具 举报

6990

回帖

119

积分

6万

资产值

至尊会员I Rank: 4Rank: 4Rank: 4Rank: 4

注册时间
2002-1-6
铜牌荣誉勋章(注册8年以上会员)银牌荣誉勋章(注册10年以上会员)月全勤勋章金牌荣誉勋章(注册20年以上会员)年全勤勋章2023
 楼主| 发表于 2003-6-3 09:05:09| 字数 223| - 广东省深圳市 电信 | 显示全部楼层

回复: Re:探讨一下prefetch

QUOTE:
aithinkpad wrote:
只在xp和2003下可以,对了sice问你一个问题,我的机器是256的内存,最近想用vmware虚拟一个redhat8,不知道分配128内存够不够,是否运行起来很慢?

  
windows通常需要使用100多M内存,如果你给Linux分配128M内存的话,你的系统运行的时候会疯狂的使用你的虚拟内存(交换分区),这个时候的系统速度会明显的速度变慢的。建议还是多一点物理内存,如果你真的需要使用vmware的话。
我即使掌控一切,也当保持谦逊和敬畏。  --《启示录》
回复 支持 反对

使用道具 举报

6990

回帖

119

积分

6万

资产值

至尊会员I Rank: 4Rank: 4Rank: 4Rank: 4

注册时间
2002-1-6
铜牌荣誉勋章(注册8年以上会员)银牌荣誉勋章(注册10年以上会员)月全勤勋章金牌荣誉勋章(注册20年以上会员)年全勤勋章2023
 楼主| 发表于 2003-6-3 09:10:41| 字数 415| - 广东省深圳市 电信 | 显示全部楼层

回复: Re:探讨一下prefetch

QUOTE:
cayman wrote:
aithinkpad,我来凑个数。以我的经验来看,128不行,首先你是在2003的系统下,即使是用XP底下的VMware虚拟2003,它的默认值都是256M的,我在2003下试过你的问题,因为我的内存大(1G),所以2003的运行没慢多少,但是128内存的redhat8显得很迟钝,我以为是禁用虚拟内存的问题,然而加大虚拟内存后,redhat8还是不行,最少256才能达到顺利操作的效果。结论是:很慢,而且两个都慢

  
使用vmware的时候,造成系统瓶颈的地方是对于硬件操作和端口操作的部分,因为vmware需要对于这些操作进行虚拟。
  
对于vmware。windows 2000,应该是最快的。windowsXP和winserver2003应该没有任何优势,因为vmware需要装载的数据量太多了。
  
使用vmware的时候,系统磁盘的速度很重要。建议使用5400转的硬盘,最好是8M缓存。。。。。。。。。
我即使掌控一切,也当保持谦逊和敬畏。  --《启示录》
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Powered by Discuz! X3.5 © 2001-2023 Comsenz Inc

GMT+8, 2024-5-22 09:41 , Processed in 0.121394 second(s), 42 queries , Gzip On, OPcache On.

手机版|小黑屋|安卓客户端|iOS客户端|Archiver|备用网址1|备用网址2|联系我们|专门网

返回顶部