PCEVA,PC绝对领域,探寻真正的电脑知识
打印 上一主题 下一主题
开启左侧

固态硬盘傻傻问系列(第12期:WIN系统缓存策略浅谈 上)

  [复制链接]
跳转到指定楼层
1#
James007ss 发表于 2012-5-20 00:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
点击数:18941|回复数:23
本帖最后由 James007ss 于 2012-5-20 01:00 编辑

本期傻傻问内容原作为jeffxl,继续由我编辑发布。

前面几期我们聊的都是系统写入缓存设置方面的话题,这期开始我们来聊聊关于读取缓存方面的话题,因为我们有留意到不少网友在这方面都存在一些理解上的误区。

我们现在主要谈的是基于NT 6核心的WIN系统(即从VISTA开始到目前WIN 7使用的系统核心版本)缓存策略。

微软从NT 6核心开始,采取了一种动态调用系统读取缓存的策略,以让使用大容量内存的用户,其内存容量可得到最大的利用效率。


大家可以看看上面的图,一个是XP的任务管理器,一个则是VISTA的任务管理器,注意‘Free’和‘Available’,即真正空闲的内存容量,可见到VISTA和XP在这里的巨大差别。




再看一下,上面这2个是WIN 7的任务管理器,我放上个中文的帮大家对照参考。

在VISTA和WIN 7中,微软采取的策略就是:只有系统有需要,中文图里你看到的‘可用’内存容量,会被完全作为系统的一部分读取缓存来使用,而图中可用内存容量为2597MB,空闲内存容量为1142MB,2597减去1142,即当时被用于作为读取缓存的内存容量约有1455MB。(不过上图中显示已缓存的容量为1532MB,与理论计算结果有所差异,这方面的具体原因还需要再深入研究)

这里大家要留意,虽然说系统可能会把所有‘可用’内存都作为缓存使用,但这个操作对用户来说是完全透明的,也就是用户使用时不会察觉得到空闲的内存容量被用作了读取缓存。当用户运行程序或进行任何需要占用更多内存容量的操作时,如果‘空闲’内存容量不足应付用户的需求,系统就会从被缓存的部分内存容量中自行释放足够的内存容量给用户使用。

正因为微软采取了上面这种策略,大容量内存的利用率就被最大限度的提高了,因为这个策略几乎让普通民用环境下的二次热访问(就是冷开机后,已非首次读取的任意数据),利用大容量内存的优势,达到了最大的命中率(就是指冷开机后读过的数据都在内存里了,不用再从硬盘读取)。

我们把VISTA和WIN 7跟XP的对比来看,就可以看出XP的内存利用效率其实非常低下,大量的内存其实被白白‘浪费’掉。

现在很多网友都知道,单独使用SSD后,WIN 7默认会把Superfetch(超级预读)服务关闭,但也有很多人把Superfetch和系统的缓存机制产生了混淆,认为Superfetch被关闭后,上述的系统缓存机制也被同时关掉。

我要跟大家说的是,Superfetch仅仅只是系统缓存机制其中一个独立的部分,和整体的缓存机制关系并不大,它的开启和关闭,并不对系统缓存机制产生影响。

我这里再说几句Superfetch的工作原理,它其实是通过一种长期性的后台统计用户操作习惯数据记录,再分析这些记录,每当用户冷开机后,通过之前的分析预测到用户最有机会可能会去读取的数据都有哪些,就把这些数据尽可能的主动预先读取到缓存中去。在第8期的傻傻问里,我们都知道数据直接从内存这些缓存中读取和从硬盘中读取,速度会存在巨大的差距,Superfetch正正是利用了尽可能让用户可能需要读取的数据都预先加载到缓存中,从而提升用户在读取数据时的‘性能’感受。


大家可以参考上图,在Superfetch开启时的2个曲线上出现的波峰,正正就是系统预先缓存数据到缓存时产生的。

所以关闭Superfetch,实际就是关闭了开机后系统预先加载数据进缓存的功能而已,而前面所说的,系统缓存机制会尽可能的缓存用户曾经读取过的热数据(就是最常被读取的)这一功能,并不受Superfetch所影响。

jeffxl为此曾经写过一篇文章,专门讲述了大容量内存在NT6环境下操作系统是如何利用剩余内存的,并且还有其它的一些相关分析。想更详细了解的网友可以去看看。

jeffxl内存帖子地址:
谈大容量内存的各种使用方案对磁盘效率影响

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
2#
Ramaxel 发表于 2012-5-20 01:09 | 只看该作者
邦德桑后半夜也不睡呀,我想问一下sf主控当容量使用超过80%以后是不是性能明显下降?我现在没办法系统盘占用了大量空间,就使用感受上来说,稍微有点比原来卡的感觉,就算闲置很长时间,也不见好,但是删掉东西空出来大量空间的时候,速度感官上会恢复,再复制上东西又会稍微有点卡的感觉,求帮助
3#
donnyng 发表于 2012-5-20 01:30 | 只看该作者
哦~这样子啊……
4#
counterflow 发表于 2012-5-20 02:10 | 只看该作者
本帖最后由 counterflow 于 2012-5-20 02:12 编辑

前排~~~~~~~~~~~~~·

话说jef的那帖就仔细研究过
5#
neeyuese 发表于 2012-5-20 02:31 | 只看该作者
Ramaxel 发表于 2012-5-20 03:09
邦德桑后半夜也不睡呀,我想问一下sf主控当容量使用超过80%以后是不是性能明显下降?我现在没办法系统盘占 ...

数据写满后由于没缓存,做的2级映射表算法,读取的话可能需要读2次,这样就会造成延迟感。
6#
Ramaxel 发表于 2012-5-20 03:41 | 只看该作者
浴室也是不睡超人啊,我知道了
7#
feve 发表于 2012-5-20 07:04 | 只看该作者
真早晨............深夜
8#
overthink 发表于 2012-5-20 07:35 | 只看该作者
Ramaxel 发表于 2012-5-20 03:41
浴室也是不睡超人啊,我知道了

澳洲时区貌似和我们这不同
9#
easybeing 发表于 2012-5-20 08:03 | 只看该作者
早起看到好帖子
10#
dakarr 发表于 2012-5-20 08:45 | 只看该作者
早日皈依win7
11#
320_4 发表于 2012-5-20 08:47 | 只看该作者
最后红字一段没读懂 是不是Superfetch只管开机加载那一段而这只是系统缓存机制的一个相对独立的一部分~
12#
cicada_zl 发表于 2012-5-20 09:34 | 只看该作者
不错的帖子 很有启发 对缓存机制有了更深的了解
13#
wanganjun 发表于 2012-5-20 09:50 | 只看该作者
又来学习了,了解的更透彻了
14#
xyhenergy 发表于 2012-5-20 11:15 | 只看该作者
学习了,顶啊。顺便拿分升级啦!
15#
左下角 发表于 2012-5-20 21:03 | 只看该作者
关注中  发工资打算入块830
16#
James007ss  楼主| 发表于 2012-5-20 23:52 | 只看该作者
320_4 发表于 2012-5-20 08:47
最后红字一段没读懂 是不是Superfetch只管开机加载那一段而这只是系统缓存机制的一个相对独立的一部分~ ...

嗯,你可以把Superfetch和系统本身的缓存机制完全当成2个东西看,也就是它们互相都是独立的。
17#
chwchwchw 发表于 2012-5-21 20:30 | 只看该作者
学习了!
18#
playboy_025 发表于 2012-5-22 13:32 | 只看该作者
本帖最后由 playboy_025 于 2012-5-23 00:11 编辑

以前一直以为关掉SUPERFETCT 系统就不做数据的缓存了,可是关掉该服务后,然后打开内存占用很大的游戏,再关闭游戏和所有运行程序,仍然会有较大的“已缓存”,只是没有开启SUPERFETCT 时占用的多, 就一直没明白,现在貌似明白了。

其实开启SUPERFETCT 后,系统盘里的 WINDOWS\Prefetch 文件夹就会有许多文件了,无论开启SUPERFETCT 多长时间,貌似这个文件夹大小就从没超过30M(我的笔记本一直是开启该服务的,台式的用的M4为关闭)。 个人认为开启该服务对SSD影响并不大。 偶的M4去年9月份买的,到现在为止用了快9个月了,中间GHOST过几次,更新BIOS一次,跑过几次分,魔兽世界也放在C盘,每天都玩,AD也才16。算过了,3000次用完要用125年,估计PE次数没用完,零件早氧化了 。不过SUPERFETCT 我仍然是关闭的,因为无论开启或关闭,在使用上感觉不到区别,呵呵。
19#
mhsk 发表于 2012-5-27 09:46 | 只看该作者
又学习了一手。
20#
xmiangui 发表于 2012-6-1 03:43 | 只看该作者
我一直是这么记的:SuperFetch是主动缓存,就算关掉,被动缓存还是生效的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部