PCEVA,PC绝对领域,探寻真正的电脑知识
开启左侧

谈大容量内存的各种使用方案对磁盘效率影响

  [复制链接]
jeffxl  楼主| 发表于 2012-4-26 02:39 | 显示全部楼层
本帖最后由 jeffxl 于 2012-4-26 03:41 编辑
yanleiberg 发表于 2012-4-26 01:58
我之所以弃用ramdisk之类的内存虚拟硬盘软件,主要有两个原因。
一就是我有不少系统级的软件,系统启动时 ...


NT6的动态缓存和IO压力直接相关。如果你是典型家用(家用的IO空闲太多),那么动态缓存经常会被回收到“空闲”值随时给冷加载的前台应用使用,提供最大的冷加载响应效率(无需临时回收缓存给应用申请,直接就有“空闲”内存待用)

如果是重IO负荷,比如你正好在运行高IO压力的应用(典型家用实在算不上什么高IO),那么当你需要IO响应能力时,NT6会最大能力的调配所有“空闲”内存来缓存所有热数据,这个时候“空闲”内存甚至一直保持在0的程度(你有多少内存也全部被拿来增强IO响应能力)。


举例,我使用WIN2008 R2 DC版做无盘+游戏服务器时,“空闲”内存几乎永远是0。所有需要的无盘客户端IO请求被最大限度的缓存到RAM中。


这里的NT6核心的动态缓存中表述的“空闲”内存不等于“可用”内存。可用内存还是由总RAM容量减去本地应用提交的PF使用值,也是随时可用的。高IO负载时可能“空闲”值保持为0,提供最大的IO响应能力,但是如果正好比如这服务器端需要运行或新开启一个服务器本地应用,那么需要回收部分缓存内容来增加“空闲”容量,并立即给你的本地应用使用,本地应用能使用的最大值其实还是“可用”容量。而这个部分并不在PF使用率当中表现,所以你不会看到所谓系统帮助你“撑满”超过50%的内存占用。

动态缓存对用户是透明的,缓存占用的多寡并不影响本地应用的内存使用提交。NT6的缓存逻辑策略其实适用性比较广泛,包括服务器版操作系统也相当的受益(明显比家用效能好很多)。

所以你看起来家用“空闲”容量有很多,那是因为操作系统认为按最有利策略需要的热数据都已经被缓存能够命中并且已经缓存。对家用来说,大部分IO里面,这个压力不容易满足NT6动态缓存的某个“阀值”,一直去拿“空闲”内存去当缓存填充,对于家用来说得不偿失,毕竟客户端应用多会经常启动应用,随时需要新的“空闲”容量来保证立即能够有“空闲”内存资源随时可以启动应用,而不需要经常去回收动态缓存去调配给本地应用(这个必须有性能开销)。

区别就在文件服务器是重IO访问型的数据模型,而家用是N多经常需要启动的前台本地应用+部分缓存支持软件的二次“热”加载或提供已经的IO二次命中。微软提供的某个决断阀值显然同时照顾到了比如家用和IO型服务器型应用,一个统一的策略对两种不同的IO访问模型同时受益,所以NT6体系的系统自带缓存策略,不管对家用还是对服务器都是统一和谐的一个适用性非常好的策略。高IO压力则尽量使用“空闲”资源填充出最大的缓存(几乎是所有可用内存),而家用则因为不满足IO压力阀值要求,则经常留出“空闲”资源待用。

NT6的动态缓存,在你需要响应最大IO能力的时候,系统会自动安排尽可能最大的缓存容量来满足(所有可用内存);而家用类的应用,利用IO压力阀值判决决定出适用的缓存和“空闲”内存占用比

通过各种观察,猜测动态缓存的逻辑是这样的:按时间片来统计IO,在低IO压力时释放掉“当前最不经常使用”的数据缓存。如果你当前的IO流量+数据热度不满足超过数据缓存释放的速率(家用典型IO),那么这时你的缓存容量则开始一直呈递减状态(流入比流出慢),直到仅仅剩下当前“最热”的数据就是你现有的“缓存占用”。如果IO压力加大且这些当前IO数据热度在当前时间片超过缓存命中的阀值,那么则有可能缓存填充热数据的速率比缓存释放冷数据速率快,你会看到“空闲”内存慢慢被消耗,直到变成0 ,达成“可用”内存的最大效能利用。这个过程中还有“可用”内容容量加权递增算法,在以上规则内如果总内存越大,可用越多,那么同比条件下被“缓存”的数据也越多(在低IO压力,“空闲”内存不为0时;高IO压力剩多少都会用光)。


点评

居然今日无分可送了,此贴大赞~  发表于 2012-4-26 08:21
yanleiberg 发表于 2012-4-26 02:57 | 显示全部楼层
jeffxl 发表于 2012-4-25 13:39
NT6的动态缓存和IO压力直接相关。如果你是典型家用(家用的IO空闲太多),那么动态缓存经常会被回收到“ ...

我有两块SSD,还有3块机械硬盘。
现在我只想让ram为我的机械硬盘来做优先cache,很明显用windows自带的缓存机制无法达到这个目的。

ssd上的io我不想也不是很需要大量内存做cache,但是io却不算少,有虚拟机文件和所有的程序都在ssd上。
我觉得就我的情况来看fancycache有益无害。

点评

不管你愿意不愿意,或者你是否使用第三方缓存,SSD上的虚拟机、应用都会受益于动态缓存策略。仅从读IO上来说,fancycache提供的效益有点多余。  发表于 2012-4-26 03:12
jeffxl  楼主| 发表于 2012-4-26 03:03 | 显示全部楼层
本帖最后由 jeffxl 于 2012-4-26 03:05 编辑
yanleiberg 发表于 2012-4-26 02:57
我有两块SSD,还有3块机械硬盘。
现在我只想让ram为我的机械硬盘来做优先cache,很明显用windows自带的缓 ...


我楼上的回复和你的需求没有冲突,系统缓存对用户的所有存储卷是全局效应,并且是对用户层透明的,你无需关心它的存在,但是它一定会起到应有的作用。

你额外附加SSD这样容量价格比好过RAM的存储介质充当HDD的缓存也是有效提高IO响应的手段(RAM动态缓存还是做为SSD缓存的上一级缓存在产生它的效益)。


我在游戏服务器也会经常额外的提供一块单独的SSD作为HDD的缓存来跑热数据,承接RAM缓存剩下未命中的部分,最大的满足了整个存储架构的容量、价格、效能比。

多级缓存/存储在任何需要的地方都是非常有效的IO压力分散的方案
jeffxl  楼主| 发表于 2012-4-26 03:06 | 显示全部楼层
本帖最后由 jeffxl 于 2012-4-26 03:34 编辑

不存在什么本地存储设备(包括SSD)不需要RAM的IO能力这个说法,毕竟高得多的IO作为上级缓存架构一定是有利的,而且也不存在你拿多少出来可能就浪费的说法,因为是透明的,并不占用你的"可用”内存。
yanleiberg 发表于 2012-4-26 03:46 | 显示全部楼层
本帖最后由 yanleiberg 于 2012-4-25 14:52 编辑
jeffxl 发表于 2012-4-25 14:06
不存在什么本地存储设备(包括SSD)不需要RAM的IO能力这个说法,毕竟高得多的IO作为上级缓存架构一定是有利 ...


请注意,我并没有说我不需要RAM来做IO缓存,我说的是我不需要大量内存来做我ssd的IO缓存。
要知道即使我开了4个虚拟机,firefox开着数十个页面占用1GB以上的内存,只要没有同时玩大型游戏,任务管理器里显示的可用内存也时常在8GB以上。

更何况,我用fancycache给机械硬盘做cache时候,我可以指定写延迟,这能大大加少机械硬盘的工作时间,从而增加寿命。而windows自带的缓存机制固然很好,但对我来说完全不可控制。

两种缓存对我来说并不是互斥的,而是互补的。

点评

你把你跑4虚拟机加开几十WEB页面时,看“空闲”内存剩余多少,以此来判断操作系统利用了多少你的“可用”内存  发表于 2012-4-26 04:11
jeffxl  楼主| 发表于 2012-4-26 04:01 | 显示全部楼层
本帖最后由 jeffxl 于 2012-4-26 04:12 编辑
yanleiberg 发表于 2012-4-26 03:46
请注意,我并没有说我不需要RAM来做IO缓存,我说的是我不需要大量内存来做我ssd的IO缓存。
要知道即使我 ...


对不起,刚才可能误会你的意思。

动态读缓存是动态调配,需要多少,是不是“大量”,由系统自身策略决定,从目前的效能看来是适合家用的。也就是说,你给更少或给更多第三方读缓存并不一定比操作系统自动调配的动态容量更有效益,并且在动态占用“可用”内存这个适用性非常高的特性上,显然第三方缓存软件不具备这个灵活度。


但是你也理解错了NT6系列系统的动态缓存的意义。系统缓存的提交并不占用“可用”内存,是否得到最大的利用需要看你是否需要那个IO响应,由系统判断。如果需要的话,操作系统会从“可用”容量为上限占用“空闲”内存容量。对于普通用户来说,看NT6系列操作系统的缓存策略是否正在利用你的剩余“可用”内存,是从任务管理器的“空闲”内存来判断的,而“可用”内存只受你启动本地应用加上系统进程的消耗,“可用”内存剩余很多也就是操作系统能够调配的缓存容量的上限,恰恰是“可用”内存剩余得越多,那么在你需要这些IO响应的时候就有更多的内存参与到缓存的运作中,减少的仅仅是“空闲”内存。



你在任务管理器“性能”标签的“物理内存”的4个项目里就能够了解。只要需要,那么缓存就会开始运作,这就是NT6的系统利用你用不到的内存的意义所在。并不是你描述的你用不到的内存就放在那里空着,比如空了8G。

这里,我也没有看到你更详细的描述,也许你描述的是“空闲”部分的内存都有8G(WIN7未利用的“可用”部分),那么我只能说你满足了两个条件:第一,你的内存肯定大于或等于16G;第二,你的IO压力并没有导致系统判断你需要那么多的缓存去支撑你的IO压力(IO响应能力足够)。


关于延迟写,这是很多第三方缓存软件特有的,而微软自身在系统缓存的写缓存部分没有给出用户自定义的明细设置是基于安全考虑的。这个需要用户自行判断可能风险,并有意识和能力去维护这个存在的数据风险,在这个条件下开启额外的写缓存带来的明显收益如果能大于可能的风险带来的损失,那么这个方案不一定不可以部署。需要考虑的问题当然还有其他的一些方面,比如软件平台复杂度增加带来的可能的未知问题。
jeffxl  楼主| 发表于 2012-4-26 04:19 | 显示全部楼层
本帖最后由 jeffxl 于 2012-4-26 04:22 编辑
yanleiberg 发表于 2012-4-26 03:46
请注意,我并没有说我不需要RAM来做IO缓存,我说的是我不需要大量内存来做我ssd的IO缓存。
要知道即使我 ...


假设你SSD本身在高IO负载下运行,你“不需要”大量内存做缓存这个说法会大大拖累全局IO响应速度。而NT6操作系统自身会在这样的情况下为SSD调配大量的RAM的“可用”容量作为缓存来满足你突发的IO需求,一般情况下动态缓存的命中率还非常高呢。这个时候SSD+“少量缓存”不一定能够提供同样的IOPS。

当IO压力变低时,操作系统会“退还”刚才调配的大量可用RAM,随时给应用程序本身的进程待用。在有高IO压力的同时需要大量缓存,你又需要执行应用程序也需要消耗RAM,那么应用程序本身占用RAM具有最高优先级,永远是“可用”内存作为动态缓存的利用上限。
yanleiberg 发表于 2012-4-26 04:25 | 显示全部楼层
jeffxl 发表于 2012-4-25 15:19
假设你SSD本身在高IO负载下运行,你“不需要”大量内存做缓存这个说法会大大拖累全局IO响应速度。而NT6操 ...

你没有看到我89楼的回复么?
我有16GB内存,任务管理器里面空闲内存时常在8GB以上。

即使分配了2GB给fc,1GB给ut,空闲内存依然在4GB以上。
我不觉得我的“少量缓存”对windows来说会不够用。

点评

从这里看出,其实正相反,少量的RAM就已经达成你的读IO压力释放的目的了,所以不仅仅是够用,而且过量。  发表于 2012-4-26 04:40
jeffxl  楼主| 发表于 2012-4-26 04:32 | 显示全部楼层
本帖最后由 jeffxl 于 2012-4-26 04:34 编辑
yanleiberg 发表于 2012-4-26 04:25
你没有看到我89楼的回复么?
我有16GB内存,任务管理器里面空闲内存时常在8GB以上。


证明你的IO压力并不高,应该还是属于有大量空闲IO时隙的数据模型。也就是说目前处在内存配置过量的状态,而并不是系统没有利用起来。

当你的数据流压力达到一定的级别,热数据流入缓存比冷数据流出高时,形成这种趋势了,那么看你IO的分布是否离散,如果集中的话还好说,可能16G也够系统自动调配足够的“可用”容量来满足你的需求(基于命中率统计,空闲接近0)。如果你的IO访问是离散型的(IO访问不集中,非常离散且流量大),可能需要128G(假设)内存,你都会发现在这种高IO压力 离散访问的模型下,“空闲”内存都一直为0


其实你看到8G“空闲”也就证明目前处在内存过量状态,动态缓存没去利用,而你自身的应用程序+系统进程本身又没有那么大消耗,自然就闲得慌了。
yanleiberg 发表于 2012-4-26 04:36 | 显示全部楼层
jeffxl 发表于 2012-4-25 15:32
证明你的IO压力并不高,应该还是属于有大量空闲IO时隙的数据模型。也就是说目前处在内存配置过量的状态, ...

所以我用fc给pt做缓冲难道有什么不对么。。。。
我从没有说过win7的缓存机制有问题,只是对我来说我需要定制性更强,更可控的缓存来作为辅助。

点评

没什么不对,只是解释一下为什么会空“8G”,这并不是意外或者其他的什么导致的。  发表于 2012-4-26 04:39
jeffxl  楼主| 发表于 2012-4-26 04:37 | 显示全部楼层
本帖最后由 jeffxl 于 2012-4-26 04:45 编辑

你没事突发的去玩下大量数据的复制粘贴啦,跑高IO压力的应用,例如一些高IO变态游戏,那么动态缓存会迅速利用你所有“可用”内存做你IO响应的后盾,随时提供最大可能的命中来避免直接去读你的SSD。你会发现这个时候“空闲”内存就为0


你内存闲得慌,只是你还没遇到需要NT6核心的系统去利用这些"可用"容量的应用。IO压力远不够去启用这些“可用”内存。


补充:这里也就说明了,额外再去配置第三方读缓存显然效益不会高,因为用不到,给你的动态缓存已经达成了大部分IO命中还剩余不少空闲的内存待用。增补第三方读缓存的效益出现非常严重的实际效能是递减的(占用了容量没起很大作用)


再提一次,你有能力、有意识去维护延迟写的风险,这个我并不反对,这是个人是否可控风险的原则。
yanleiberg 发表于 2012-4-26 04:54 | 显示全部楼层
jeffxl 发表于 2012-4-25 15:37
你没事突发的去玩下大量数据的复制粘贴啦,跑高IO压力的应用,例如一些高IO变态游戏,那么动态缓存会迅速利 ...

我玩游戏的时候从来不看空闲内存。。。复制大量数据的时候,也没看。。。

但是我的uTorrent是几乎24小时都开着的(仅仅在需要做游戏视频直播的时候因为上传速度问题会关闭)。
所以Fancycache的写延迟给我带来的好处很直观,而且可控制。
更何况既然系统还有足够的空闲内存给突发io做缓存,那用Fancycache占用一部分内存来专门给种子盘做cache应该是没有任何坏处的。

不过归根到底,有没有专门的评测软件能监视到物理硬盘的操作?
那些监视调用系统api的不能算。

点评

你现在就从你的SSD复制稍微大过你“可用”内存容量的文档到HDD,你会立即看到空闲内存一直减少到0;还有玩RAGE狂怒这类高IO游戏时也会这样  发表于 2012-4-26 04:58
jeffxl  楼主| 发表于 2012-4-26 05:01 | 显示全部楼层
yanleiberg 发表于 2012-4-26 04:54
我玩游戏的时候从来不看空闲内存。。。复制大量数据的时候,也没看。。。

但是我的uTorrent是 ...

这类后台监测背景监测IO数据,并汇总各种明细数据:比如各种粒度的IO占用,访问次数、各种访问尺寸的IOPS和各尺寸占比等等很多具有实际参考分析项目的专业软件,往往都是收费的。
jeffxl  楼主| 发表于 2012-4-26 05:04 | 显示全部楼层
yanleiberg 发表于 2012-4-26 04:54
我玩游戏的时候从来不看空闲内存。。。复制大量数据的时候,也没看。。。

但是我的uTorrent是 ...




比如这个软件,功能很多。这个截图描述的是某个卷在这个软件开启后台监测后统计上来截至到“当前”的所有的IO详细数据

本帖子中包含更多资源

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

x
quietist 发表于 2012-4-26 08:40 | 显示全部楼层
嗯,看2位的探讨很有益处。

我想,跟我的一些门外汉粗浅看法中的稳定部分还是有所一致或都不冲突的:

1、windows的动态内存管理策略,是一个普适性的体制,简单说就是有一个内部优先权衡和需求评价的机制,这主要是根据系统统计得出的,比如superfetch预读或预加载,如果我10天可能用一两次的重负荷应用,win可能不会帮我大量驻留相关数据和信息在内存,因为它觉得“性价比不高”,它的目标大概是满足80%的日常应用能以较高效率对付,包括一般个人家用上网、办公、游戏、试听媒体、工作站或专业设计运算、分布式处理和运算、以及服务器等各类不同性质的客户需求。

2、普适的机制在总体而言,应当是性价比最高或者平均效益最大,但在特殊个体需求平台上,必然可能不够满足理想化或最高标准。比如某些并非每天运行、但一旦运行却实时要求标准很高的处理,在商务和工作中属于特例管理,这方面win系统至少非server系统上照顾得并不多,它主要还是集中精力做好常例管理部分。此时个性化地借助或侧重特定应用软件或第三方软件来配置或提升特定环节的性能、或调整特定应用条件下的系统资源配置策略,应当是有其现实性和必要性的。

  当然这种配置和调适确实需要用户对IT和软件相关知识与需求有一定的理解和能力,比如工作站类用户往往有这类比较突出的需求,无论是运算、设计、解码或智能分析等。

  而最普通的一般用户,也不会投入太多精力去了解和研究这些东西的,那么就确实少折腾一点,只用点已经为大众科普熟知了的功能,就挺好了,比如32位系统的大内存识别,高读写操作频度的应用给予一定的写延迟以保护硬盘之类,当然在使用中尽量多留安全边界:比如utorrent设置2分钟写入,这样的水准对一般用户没多少负面影响;而如果是60分钟写入一次,那可能只有少数比较掌握自己系统的用户才能完全安心使用了吧,大致理解就是这种区别比较常见。

  
quietist 发表于 2012-4-26 08:41 | 显示全部楼层
jeffxl 发表于 2012-4-26 05:04
比如这个软件,功能很多。这个截图描述的是某个卷在这个软件开启后台监测后统计上来截至到“当前”的 ...

  
  win自带的性能监视器和资源监视器给出的信息统计也较粗浅吧。大概还是认为需要深入监测信息的,都是比较专业的用户,那么专业的信息服务有偿,也是商业角度正常的了解——认为一般用户“不需要知道这么多”吧。

  
yeeyee2000 发表于 2012-5-3 10:52 | 显示全部楼层
很好的分析!学到知识了。好文章。
guoxmcx 发表于 2012-5-3 12:17 | 显示全部楼层
很好的文章,长见识了!
lemonjoe 发表于 2012-5-3 14:28 | 显示全部楼层
看来我新配机器的128G M3P+16G DDR3有点浪费啊
vstt 发表于 2012-5-8 13:45 | 显示全部楼层
不错,学习了
以前虚拟硬盘,感觉没什么效果
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部