`

[转贴] [教学] 谈大容量内存的各种使用方案对磁盘效率影响

阅读更多

原帖地址:bbs.pceva.com.cn/thread-35083-1-1.html


以下内容为JEFFXL原创内容,欢迎转载并注明出处


        在内存价格很低的今天,现在很多用户都配置了大容量的内存(8G或以上)。也有很多低内存(4G或4G以下)的朋友想通过升级内存或者SSD来提高IO操作体验。但是,我发现关于内存和SSD对家庭用户的IO操作体验上有这样或那样的误区。比如,很多人使用EWF系统、各种软件缓存系统,各种RAM盘技术,想借此来提升IO操作体验。经费紧张的用户还有的陷入加大容量内存还是上SSD的纠结之中。以下我来说说各种方案和各种应用场合,大内存容量和SSD对用途体验在实际应用中究竟产生什么体验上的区别。

        关于用户软件对内存的利用
        一般我们知道,32位操作系统(只谈NT核心,暂不谈PAE技术)的寻址能力是4GiB,NT核心的操作系统在管理物理内存时在用户层进程上做出了一定的限制。首先,各种硬件和驱动需要单独寻址空间,这个部分按硬件和硬件数量的不同而有些差异,一般32位系统除开硬件寻址占用后最大全局可用容量大部分为3.25G-3.9G之间,这里的占用为硬性占用,无法在用户层面做出任何调整。而操作系统对内存的管理又分为系统级(RING0)和用户级(RING3)两个部分。系统自身保留最大2GiB寻址范围作为系统级调用使用,又称为内核模式地址空间。而用户级应用被分配剩下的2GiB寻址范围作为可用地址,又称为用户模式虚拟地址空间。那么,软件总共可用内存地址范围为2GiB,用户层软件单进程最多可以申请2GiB内存(32位保护模式,每进程在隔离的“虚拟”映射地址当中寻址,进程间互不干扰),通过 boot.ini中 /3gb 参数的调整可以达成用户模式使用3GiB的内存容量,而系统只保留1GiB作为进程地址空间。调整boot.ini中 /3gb 参数可能会导致一些兼容性问题,PAE扩展寻址到36位也是同样,但用户模式还是2GiB或3GiB限制,只不过可以同时开启多个占用2GiB内存的应用或者提高系统缓存效率,而无需使用页面交换。NT6核心以后的系统请使用命令行键入bcdedit /set IncreaseUserVa 3072来配置用户模式可用内存到3GiB(使用2048参数来还原)。

注:微软知识库关于内存使用和 /3GB 开关的知识库文章
http://support.microsoft.com/kb/328882/zh-cn

        X64环境下,对于 Microsoft Windows 操作系统,为了避免内存页表太大,目前可用的寻址范围实际为44位地址,也就是16TiB,并不能达成全部64位寻址范围的16 Exabyte。这里有一个问题,现在家庭用户99%还是使用32位软件进程来跑应用,上64位系统只是为了提供更大的寻址范围支持更多的内存,那么能够使用这么多内存吗?目前WOW64对32位程序基本完美兼容,但是在跑在32位兼容模式下的应用同样需要遵守32位用户模式寻址范围的限制,也就是2GiB或者通过牺牲兼容性调整到3GiB。那么如果在没有使用原生64位程序时,不多开N个大型应用软件的话(每进程最大可提交2GiB内存),那么大容量内存很显然没有得到充分的利用。

        WIN7缓存机制
        那么在X64环境下使用Microsoft Windows 操作系统,在已有大容量内存的条件下又没有开启多个32位大型软件的环境下,大内存就没有任何用武之地吗?显然不是,如WIN7 X64操作系统自身提供了一套动态缓存机制,会尽量使用最大的“可用"内存容量来缓存用户软件数据并使用Superfetch技术预加载经过统计的用户“热”数据,未被系统、用户程序和缓存占用的为“空闲”容量。这里的“空闲”和“可用”容量并不是同一个意思,大家可以在WIN7的任务管理器的性能标签页内找到。

  

WIN7任务管理器,“物理内存部分”
可用内存容量等于总内存容量减去系统和软件占用的容量(大约)
空闲内存容量等于可用容量减去已缓存资源的容量(大约)


       WIN7会动态管理缓存大小,而且是全局的机制,覆盖所有存储卷的内容。WIN7缓存机制是由最大“可用”容量来决定“空闲”容量的缓存占用(有点绕口);所有未被系统和软件占用的“可用”容量都可以被用来缓存,都是“空闲”容量;随着缓存的慢慢载入,“空闲”容量会慢慢变少,而软件可申请使用的“可用”内存容量不变,被占用“空闲”容量的缓存部分随时可以因为应用软件的需要而随时释放。这里既提供了应用随时可用的“可用”空间来运行程序,又最大效率的利用了“空闲”空间来缓存资源。这个时候,大内存就起到了加速IO操作的用途。在这里,如果提供足够的“空闲”容量,那么WIN7的缓存机制几乎可以抵消大约90%以上的IO压力,使磁盘IO压力得到极大的释放,这也是当前SSD在大内存容量,X64环境下,有的用户觉得SSD对IO体验的提升不太明显的最大因素,因为操作系统自身的缓存机制已经充当了最大的IO压力缓冲区。相反小容量内存用户升级SSD反而会得到体验上很大的不同,这个问题相对看待,其实只是因为内存使用溢出而频繁使用页面交换(虚拟内存)导致机械盘非常不擅长这样的场合,而SSD在4K性能上比机械盘好太多的原因(页面文件操作几乎为纯4K的IO)





        关于大内存环境下使用EWF系统、各种软件缓存系统,各种RAM盘技术对磁盘效率的影响
        X64 Microsoft Windows 操作系统环境下,使用各种RAM作为数据缓冲区的技术的各种方案,虽然可以提供一定的IO操作提升,但是在WIN7 X64环境下,这些软件有一定的局限性和增加软件环境复杂性的问题,可能产生一些未知的易用性问题。在家用领域,这些软件方案不一定能达成比WIN7 X64自身缓存机制在大容量内存支持下更好的性能,WIN7缓存机制篇章已经做出了说明。

       先谈第三方缓存软件部分
       这样的软件一般给出了定向的设置范围和固定的内存提交方式(容量占用固定),操作方式固定且有需求范围局限性,用户操作行为的不可预知性提供了不同的缓存命中率(看使用的这些应用是集中还是离散的),且缓存命中率的不同提供了不同的性能增益,效能有不确定性。而这个操作方式相对目前家庭用户来说并不比WIN7自身的缓存机制的管理方式优秀,并不适合在WIN7下部署这样的第三方缓存软件。这里需要谈到一个数据命中率聚合性分布的问题。在家庭用户当中,在一次开机和关机的工作循环里(因为内存是易失性存储),各种缓存机制按基于数据访问热度的算法提供了软件二次加载加速和一定的热数据命中率来提供IO性能增益。
       我不认为WIN7自身已有的缓存机制在典型家庭用户上会提供低于任何第三方缓存机制的效率。因为WIN7缓存机制的普适性,一般测评软件会避开WIN7的缓存机制,所以在测评上得不到好的成绩,而第三方缓存软件会“骗过”测评软件,所以可以达成很高的“分数”,而这个分数带来的体验,在数据二次加载上得不到比WIN7自身缓存机制更好的效率,WIN7自身的缓存机制是动态利用最大可用内存动态管理的,比第三方软件效率来得高,而且在需要时应用可以随时申请剩余的内存,缓存部分自动减少。而第三方应用是申请固定内存对指定目标进行缓存,损失了灵活性和普适性。
        这个部分,WIN7如我上面说明的那样,提供了更好的灵活性和普适性。额外增加第三方缓存软件增加了软件环境复杂度和管理上的复杂度,并不能提供更适合家庭用户的缓存机制。因为家庭用户一般连续开机工作循环时间不长,而一次工作循环需要载入的数据在逻辑分布上的数据总容量上远超过内存容量,重复访问性平均又不高。如果需要达成全局最高的命中率,需要很大的内存(按用户应用软件使用的分布),而如果命中率过低,缓存机制效能就得不到很好的发挥。 在这里,从容量价格比相对更便宜的磁盘系统上做出改善,得到的体验远大于部署这类第三方缓存软件。
        在部署SSD后,热数据可以按需人工分布在SSD上,因为同容量的SSD比内存便宜,而内存缓存机制又不能覆盖所有家庭用户的数据访问,有缓存未命中风险(家庭用户定向缓存所有可能访问的内容需要的内存容量太大,没性价比)。而剩下的未被缓存命中的应用程序IO压力可以通过SSD提供的IOPS来达成更好的IO操作体验(就算WIN7缓存平均承担90%,也有10%未命中)。HDD体验不佳的地方,就是WIN7缓存机制未能缓存命中时产生的,比如初次载入程序或冷数据的载入。所以家庭用户不能纯依赖大容量内存来提供等效的IO体验。

         Windows操作系统的缓存系统是基于全局进行缓存,即对所有数据进行缓存,而第三方软件缓存可以根据用户需要,设置仅对某一特定分区或磁盘进行缓存。在同等缓存容量下,后者更具目标性,从而对定向目标提高了缓存命中率。 
        拿无盘网吧的无盘系统镜像服务器举例,99%的访问是定向可控的。多用户启动和运行XP无盘工作站系统的过程所使用的数据经过统计,在范围和容量上趋向固定的550M左右的特定数据。这里提供第三方缓存软件并在服务器上锁定缓存内容(只定向缓存无盘系统镜像分区),只需要稍微大于550M的缓存容量就可以为工作站操作系统读部分提供接近100%的读命中。因为无盘服务器一般是连续运行的,单次启动工作站时需要的操作系统部分数据和保证平时运行的系统数据(大约550M)就会被服务器缓存,而后只要服务器连续开机状态下,其他工作站的启动过程和操作系统运行时需要的数据全部都几乎可以通过服务器内存来并发读取,提供了接近纯内存的并发性能。这里的无盘服务器指的是狭义的只提供操作系统启动和运行部分的无盘系统镜像服务器,应用内容由ISCSC架构提供(应用访问部分甚至需要SSD做2级缓存)。类似这个方案对第三方缓存系统才具有最大的使用效能,目的是为了锁定缓存范围和缓存高命中率。
        无盘服务器和单用户使用的区别就在于,在单用户(比如家庭用户)本地看来,单次工作循环中读分布几乎是全局离散的(用户行为无法预知),需要本地全局缓存,数据模型聚合性相对并不高,在单次工作循环中大部分访问重复性低,本地缓存重启则丢失,需要多个工作循环的热数据统计配合预加载技术来保证缓存效率。而N个这样的单用户组成的多用户群组,在无盘服务器端看起来就有了相当大的数据访问聚合性,所以这里的区别是相当大的。比如可以至少分离出多用户的操作系统启动和运行所需要的基本数据模型是完全一致的。而多用户应用访问上也可以而统计出这样的趋同性,比如无盘网吧的游戏访问热点局限在少数热门游戏上。统计学上的数据模型聚合性和一致性则是定向目标缓存系统高效率、高命中的最基本保证。
      

       再谈各种RAM盘技术和系统再封装,内存回写技术
       这里包含但不限于各种生成RAM磁盘后迁移浏览器缓存文件夹、各种临时文件的环境变量到RAM盘、EWF系统、虚拟机镜像读,由内存回写的技术。这个部分,提供的IOPS增益产生了一个用户体验瓶颈的问题。家庭用户如果部署了SSD,在已有的系统自身缓存机制下,加上SSD补充了系统缓存未命中的部分承担剩下的IOPS压力,已经提供了很好的IO操作体验(原因如前文)。而再累加这些技术方案,并不能在用户体验上得到更好的附加增益。而由此带来比第三方软件缓存技术更复杂的操作管理性问题和可能的诸多易用性问题,这里我认为是得不偿失的。而在HDD环境下,如果没有特殊需求,则也不推荐使用这些应用方案。
        额外补充一个关于大内存环境下虚拟内存是否需要禁用的问题。这里我不建议完全关闭虚拟内存,有部分软件和系统操作必须使用到页面文件交换,为了兼容性考虑,请至少保留1G左右的页面文件来保证最大的系统和软件兼容性,而且这样做并不会降低任何IO性能。


         总结:
         WIN7的缓存机制本身就是为单用户的数据访问模型而设计,家用环境需要非常好的普适性和易用性,如全局缓存、无需用户干预、全局透明、自动管理。NT6系列系统,除了有热数据命中率导向算法的常规方式缓存外,还有由Superfetch提供的缓存预加载技术很好的统计和学习了用户的行为习惯,很好的融合了易失性内存缓存机制,提供了一定的数据初次加载加速的可能性,又因为是可动态管理的全局缓存,缓存的占用对应用程序内存申请完全透明,对用户完全透明,所以WIN7缓存机制是最适合家庭用户环境的智能缓存技术。
        除非需要保证指定的特殊目标极高IOPS的场合(比如为指定目标提供内存的IOPS能力),大内存用户在WIN7 X64环境下一般不建议使用任何第三方缓存软件和各种RAM盘和系统封装,内存回写技术。得不偿失,损失了全局缓存效能,增加了软件环境复杂度、降低可靠性和易用性。
        首先,升级SSD可以在任何环境下提供全面的IO效能提升;如果需要更佳的应用程序IO操作速度,那么增加内存并由WIN7自动管理可用内存作为动态缓存也是一个好办法,空着不用也是一种WIN7的内存“用法”

 

         其他回帖

关于superfech技术,在用户层面是否开启,我认为有SSD的情况下可以随意一些。对SSD的性能来说,开启superfech后,对已统计的热数据进行主动填充缓存也没什么影响(特别是VISTA,主动填充时的IO压力对于机械盘来说稍微大了些),如果主动填充的部分被命中,那么可以提高软件初次加载的启动速度,内存的IOPS能力比SSD高很多,虽然可能效果不太明显(因为SSD的IOPS能力使未缓存部分的数据在载入在时间上也是可以接受的)。

关于常规方式的缓存,WIN7已经提供了最好的方式,而且是自动管理,动态控制。

关于你说的“常驻内存”,应该叫未被缓存释放的数据部分,而不是狭义的程序常驻缓存那个概念,如果某应用程序或几个应用程序在某个时间申请到接近你内存容量的内存请求,这个时候WIN7缓存系统就会自动管理缓存部分,缓存会被接近全部释放,让出容量用来提供给程序本身提供运行空间。这里就不存在你说的"经常使用的程序会被常驻内存”的情况,这是个例外,而且这个时候如果superfech是开启的,它才会在有空闲容量时在再次主动填充热数据到缓存以备使用,不然又要等人工加载一次某程序后(这个时候就又是未命中冷加载),才能提供缓存效能。


这里我建议superfech配合WIN7动态缓存机制使用,这样只要有“空闲”容量,那么就会立即自动填充缓存,以提供最大的缓存效益

  • 大小: 5.1 KB
分享到:
评论

相关推荐

    CString内存泄露HTML.rar

    标题 "CString内存泄露HTML.rar" 涉及到的是在编程中使用MFC库的CString类时遇到的内存泄露问题。...对于开发人员来说,理解这些知识点有助于他们在使用CString时避免内存泄露,提高程序的稳定性和效率。

    动易系统的论坛转贴工具

    整个过程快捷高效,极大地提高了内容分享的效率。 总的来说,动易系统的论坛转贴工具是一款极具实用价值的软件,它简化了内容跨论坛分享的步骤,同时有助于提升网站的在线可见度。对于那些活跃于多个论坛的用户以及...

    BFC UBB转贴器

    由于现在流行的转贴工具都是基于浏览器的,转换速度比较慢,还得打开浏览器才能使用(同时受到浏览器版本限制)。 <br> 而这个小程序则完全不依赖于浏览器,以BFC采集器的UBB转换模块为基础,转换速度超快,...

    电子功用-导电胶配对模切对半转贴加工方法

    它的特性在于既能保持良好的导电性,又具有一定的柔韧性和粘接性,使得它能够适应各种复杂的电子组件结构。在配对模切对半转贴加工中,导电胶被精确切割并贴合到预定位置,确保电子设备内部的电气连接稳定。 模切...

    易语言源码动网转贴.rar

    5. 并发与性能优化:如果论坛数据量较大,源码可能考虑了并发处理,以提高迁移效率。例如,通过多线程或多进程来批量处理数据。 6. 版本控制:源码可能采用了版本控制系统,如Git,便于团队协作和代码版本管理。 7...

    专题资料(2021-2022年)北京师大二附中教学管理策略转贴.doc

    【北京师大二附中教学管理策略】是一个深入探讨如何提升教学质量的主题,其核心理念是人文管理和有效教学。该校的教学管理策略着重于教师的自主性发展,通过建立学习研究机制、创设教学实践平台,以及开展多样的评课...

    【转贴】Fast Reports V3.15 输出CJK PDF完美解决方案

    标题中的“Fast Reports V3.15 输出CJK PDF完美解决方案”指的是使用Fast Reports这款报表工具的特定版本(V3.15)时,如何成功地输出包含中日韩(CJK,即Chinese、Japanese、Korean)字符的PDF文档。Fast Reports是...

    [转贴]九大BI厂商点将录

    文章以全面的视角,即“水平视角”,对各大BI厂商进行了一次梳理,关注点在于各厂商的市场潜力和近期动态,这对于理解BI市场的竞争格局和选择合适的BI解决方案具有参考价值。 【标签解析】:“BI厂商”标签明确了...

    电子政务-导电泡棉转贴装置.zip

    1. **电子政务的发展背景与现状**:介绍电子政务在全球和国内的发展历程,以及其对提升政府效率、提高公共服务质量、促进公民参与等方面的重要作用。 2. **导电泡棉的应用**:详细解释导电泡棉的物理特性,如导电性...

    jquery的转贴功能实现

    在本主题中,我们将深入探讨如何利用jQuery实现“转贴”功能,这是一种常见的社交媒体分享功能,允许用户将网页内容轻松分享到各种社交网络。 首先,让我们了解一下jQuery的核心概念。jQuery通过一种简洁的语法提供...

    行业分类-设备装置-FPC吸附胶纸转贴组件.zip

    在这些领域,FPC的轻薄特性使其成为理想的布线解决方案,而FPC吸附胶纸转贴组件则保证了这种布线方式的可靠性和持久性。 总的来说,"行业分类-设备装置-FPC吸附胶纸转贴组件.zip"中的内容涵盖了FPC在实际应用中的一...

    论坛专用屏蔽干扰码转贴工具

    在论坛交流中,有时为了防止恶意爬虫或者保护内容不被搜索引擎抓取,管理员会使用各种干扰码,如乱码、特殊字符等来混淆帖子的关键信息。这款工具就是为了帮助用户解除这些干扰,提升在论坛上的阅读和交互体验。 ...

    动网转贴.zip易语言项目例子源码下载

    《易语言项目实例——动网转贴》 易语言,作为一种中文编程语言,以其独特的语法和易用性,深受广大编程爱好者尤其是初学者的喜爱。这个名为“动网转贴”的项目,是易语言编程实践中一个典型的例子,它为学习者提供...

    动网转贴.e.rar

    如果是进行数据分析,可能需要对文件进行读取、清洗和转换,以便于使用数据分析工具(如Python的pandas库或Excel)进行处理。无论哪种情况,了解动网论坛的数据结构和文件格式都是至关重要的,这可能需要查阅相关的...

    易语言动网转贴.rar

    4. **数据交互**:易语言可以处理各种数据类型,并且具备数据库操作能力,方便与数据库进行交互,这在论坛转贴功能中非常重要,因为帖子数据通常存储在数据库中。 关于"动网转贴"的具体实现,可能涉及到以下知识点...

    论坛转贴 v1.0 JS版-源码.zip

    【标题】"论坛转贴 v1.0 JS版-源码.zip" 提供的是一个基于JavaScript的论坛转贴功能的源代码实现。JS版通常指的是使用JavaScript编程语言编写的版本,这表明该软件可能主要用于网页端,利用浏览器的JavaScript引擎...

    discuz X2转帖工具、采集工具

    3. 性能影响:大量并发的发帖或转帖可能对论坛服务器造成压力,需合理控制频率,以免影响用户体验。 四、安全性与兼容性 1. 安全检测:在下载和使用此类工具时,需确保来源可靠,避免安装携带恶意软件的版本,保护...

Global site tag (gtag.js) - Google Analytics