Windows 板


LINE

转路自 http://qa.pcuser.com.tw/modules/newbb/viewtopic.php?topic_id=1804&forum=2 记忆体最佳化的闹剧 --- RAM 最佳化工具的不实承诺 文章来源:Windows & .NET Magazine, April 2004 作者:Mark Russinovich 能够重组记忆体并增进效能的工具,乍听之下似乎不错,但真是如此吗?本文带你一探记 忆体最佳化工具的真章。 当您浏览网页的时候,你有时候可能会看到浏览器跳出像是「重组你的记忆体并且增进效 能」,另外还有像是「减少应用程式与系统的失败,并且释放没有使用的记忆体」。如果 你按下滑鼠,连结到广告所提供的工具网站,你就会看到只要多付 9.95 美元、14.95 美 元或 29.95 美元,就可以提供你达到这个目的的工具。听起来似乎还不错?这些工具似 乎看起来可以替你做一些有用的工作,但其中的记忆体最佳化工具是没有效果的,且更糟 的是,可能会严重地影响效能。 你可以找到好几十种所谓的「记忆体最佳化工具」,有些是商业软体,有些则是一些免费 软体。你可能会想在自己的系统上执行像是这样的产品,这些产品真正能做什麽?而这些 产品是否愚弄了你,让你相信产品所声称的效果?本文就让我们深入的剖析记忆体最佳化 工具的内部,看这些工具是如何控制 Windows 内部的可见记忆体计算。 @小标 记忆体最佳化工具的使用者介面 记忆体最佳化工具一般所提供的使用者介面,可以显示可用记忆体的图形显示,以及以线 条呈现阀值,如果记忆体低於该阀值,工具就会采取动作。另外一个线条则显示最佳化工 具在执行的时候,尝试释放的记忆体数量。通常你可以设定其中一个或是两者的等级;使 用手动的方式启动记忆体最佳化或是使用排程的方式执行最佳化。某些工具则还可以显示 执行於系统上的处理程序。 当排程好的最佳化工作执行的时候,工具的可用记忆体计数器通常会往上爬升,有时候这 个数字会大幅增加,让使用者感觉这个工具实际上释放了许多记忆体可以让你的应用程式 执行。为了了解这些工具实际上是如何让可用记忆体上升的,我们必须先了解 Windows 管理实体记忆体的方式。 @小标 Windows 记忆体管理 与大部分目前的作业系统类似,Windows 采用了根据需求而规划的页次虚拟记忆体系统。 作业系统使用虚拟记忆体提供应用程式一个假象,就是电脑拥有比实体记忆体更多记忆体 。 在 32 位元的 Windows 系统上,处理程序可以定址虚拟记忆体达到 4GB,作业系统会在 处理程序和系统之间平均的分配。因此,根据使用的量,处理程序可以配置达到 2GB 的 虚拟记忆体。配置给所有处理程序的所有虚拟记忆体,不可以超过系统页次档案以及其大 部分实体记忆体的总量(作业系统保留相当小部份的实体记忆体)。 因此针对处理程序,只要有足够的页次档案,可以配置超过电脑实体记忆体能力的虚拟记 忆体,Windows 记忆体管理员子系统必须在处理程序之间与快取管理员的快取档案资料分 享实体记忆体。记忆体管理员指定给每个处理程序(例如 Microsoft Word、记事本、档案 总管)一部分的实体记忆体,我们称之为处理程序的工作集。Kernel 和驱动程式可以使用 页次的部分,除了可以使用页次的 Kernel,记忆体缓冲区之外的部分,我们称之为页次 集区。由快取管理员管理的实体记忆体,会指定他们自己的工作集,称之为系统工作集。 记忆体管理员可以扩充和缩减系统和处理程序的工作集,以回应处理程序快速存取他们的 程式码和资料的需求。电脑的记忆体管理硬体,需要 Windows 管理工作集和虚拟记忆体 以页次大小区块的方式管理(在 32 位元的 x86 处理器,页次的大小一般是 4096 位元组 ,然而,作业系统和需要耗用大量记忆体的应用程式,当有可能的时候,也使用单位比较 大的 4MB 页次作为最佳化选择)。 当处理程序存取不存在於工作集的虚拟记忆体的页次时,处理程序会产生页次错误硬体例 外情况。当发生这种情况的时候,记忆体管理员会指定可以使用的实体记忆体指定页次, 以储存新存取的资料。另外,记忆体管理员可能会决定藉由增加页次到工作集中,扩充处 理程序的工作集。然而,如果记忆体管理员需要处理程序的工作集够大,就会使用新的页 次与已经存在於工作集的页次进行交换,选择取代处理程序最近所存取的页次,这是假设 处理程序最近不太可能会存取该页次。 当记忆体管理员从处理程序工作清单移除页次的时候,必须决定要对页次做什麽事情。如 果页次已经修改了,记忆体管理员会先放置到修改的页次清单,页次的清单最後会写到页 次档案,或是到网页所对应的记忆体对应档案中。从被修改的页次清单中,记忆体管理员 会挪动页次到名称为待命清单的集区。没有修改过的页次,则会直接到待命清单中。因此 ,你可以将待命清单当成是资料的快取。 @小标 可以使用的记忆体 我们之前提到记忆体管理员会提供可以使用的实体记忆体页次,给产生页次错误的处理程 序,但是我们还没有说明如何定义可用的记忆体。待命清单是记忆体管理员认为是实体记 忆体的一部分。其他成为可用记忆体的集区,是包含属於配置虚拟记忆体资料的页次(例 如:包含已经离开处理程序的),另外还有已经清空,以及後续被记忆体管理员的低优先 性空页次执行绪所填入的空资料。这些类型的页次,会分别储存在记忆体管理员的可用清 单和空页次清单。 图 2 显示了发生在工作集和页次清单之间的转换。每一秒的时候,系统执行绪会启动, 然後呼叫记忆体管理员的工作集管理员,检查系统和处理程序的工作集。如果可用记忆体 偏低,工作集管理员会从处理程序移除在过去一秒还没有产生的许多页次错误。被移除的 页次会到被修改或待命清单中,以准备提供於可用记忆体。这种调校机制有个重要的副作 用,如果系统需要提供其他处理程序记忆体,记忆体管理员就会从闲置处理程序的工作集 取得页次。这样一来,那些处理程序的工作集最後就会消失,也就是说那些处於闲置状况 的处理程序,如果闲置时间过长,最後会没有实体记忆体可以使用。 当处理程序需要有新的实体记忆体页次的时候,记忆体管理员会先判断所存取的处理程序 页次是否位於待命或修改的页次清单。如果页次从处理程序工作集移除,并且基於其他的 目的没有重复使用,页次就会在这些清单中。将页次放回到处理程序工作集,我们称之为 软页次错误,因为与硬页次错误不同的是,并不会产生从磁碟读取页次档案或是其他的档 案。 如果页次不在待命清单,或是在修改的页次清单中,记忆体管理员就会从已经有页次的清 单取得页次,首先检查可用的清单,然後是空页次清单,最後则是待命清单。如果没有记 忆体可以取得,记忆体管理员就会触发「平衡集管理员」,进行处理程序工作集的整理, 并且产生三个清单的其中之一,以取得可以使用的记忆体。如果记忆体管理员必须从空页 次、可用或待命清单移除页次以供重复使用,则决定於如何存取目标的程式码或资料,其 中包括了从页次档案读取资料或可执行档映像内容,或是建立空资料(如果应用程式配置 了新的资料,而页次并不是从空页次清单取得)。 @小标 建立可用记忆体 在了解了记忆体管理员的行为之後,我们现在可以将注意力放到记忆体最佳化程式的工作 上。记忆体最佳化程式所显示的可用记忆体数据,与在工作管理员中,「效能」页次的「 实体记忆体」可用部分的值是一样的。这个值是待命、零页次与可用清单的总和。系统快 取记忆体则是待命清单和系统工作集的总和(在 Windows NT 4.0 以及之前的版本,档案 快取的值只反应了系统工作集)。 记忆体最佳化工具藉由配置,然後释放大量的虚拟记忆体,应用了记忆体管理员行为的优 点。图 4 显示了记忆体最佳化工具在系统上的产生的效果。第一列显示了在最佳化前的 工作集与可用记忆体。第二列显示了记忆体最佳化工具,藉由在短时间中增加许多的页次 错误,建立了高记忆体需求。为了回应这样的需求,记忆体管理员增加了最佳化器的工作 集。这个工作集的扩充发生在可用记忆体的耗用(当可用记忆体变低),使用了其他处理程 序工作集的耗用。第三列显示了在记忆体最佳化程式释放记忆体之後的情况,记忆体管理 员会移动所有指定给记忆体最佳化工具的所有页次到可用清单,因此可以增高可用记忆体 的值。大部分的最佳化器隐藏了在第一个步骤的时候可用记忆体快速降低的事实,但是如 果你在最佳化的时候执行工作管理员,你经常可以看到记忆体降低的情况。 虽然取得更多可用记忆体似乎可以获得效益,但是情况并非如此。由於记忆体最佳化工具 强迫升高可用记忆体,因此也就强迫其他处理程序资料和程式码从记忆体释出。假设你正 在执行 Word,而最佳化器强迫进行可用记忆体的升高,Word 的开启文件文字以及程式码 在最佳化之前存在於记忆体中(也就是在实体记忆体中),必须从磁碟再次读取,你才能继 续编辑文件。效能的降低会对伺服器造成影响,因为在待命清单以及在系统工作集中快取 的档案资料(另外还有被活动中的伺服器应用程式所使用的程式码和资料),可能都会清除 。 @小标 其他记忆体最佳化工具的宣称 某些厂商会针对他们的记忆体最佳化工具产品作出额外的宣称。像是你可能会看到产品能 够释放没有使用的处理程序所占用的记忆体(如那些在工作列中执行的程式)。所有的这些 宣称都是不真实的,因为 Windows 会自动的清除闲置处理程序的工作集。记忆体管理员 会控制所有必要的记忆体最佳化。 记忆体最佳化工具的开发人员也会宣称他们的产品能够对记忆体进行重组。配置的动作会 释放大量的虚拟记忆体,产生可能的副作用,进而产生连续的可用记忆体区块。然而因为 虚拟记忆体是从处理程序配置实体记忆体,处理程序无法直接从拥有虚拟记忆体获得好处 ,虽然後面是连续的实体记忆体。随着处理程序的执行及底下工作集的减少或成长,他们 的虚拟记忆体对实体记忆体对应会成为断离情况,而不管连续记忆体情况如何。 拥有连续的可用记忆体,可以在一种情况中增进效能:当记忆体管理员最大化 CPU 记忆 体快取的行为,会使用称为「页次染色」(page coloring)的机制,判断从可用或空页次 清单的哪个页次,要指定给处理程序。然而,任何由於连续可用实体记忆体所得到小小效 益,可能会由於程式码与资料从记忆体被迫移出,而减损所带来的价值。 最後,厂商通常会宣称记忆体最佳化工具,可以重新取得记忆体记忆体遗漏的部分。这样 的说法可能所有说法中最大的错误。 记忆体管理员不管在任何时候,都知道实体与虚拟记忆体属於哪个处理程序。然而如果处 理程序配置了记忆体,可能会由於程式的 Bug 导致记忆体在使用後没有释放的情况(一般 称之为遗漏--leak),记忆体管理员无法确认所配置记忆体不会在相同点被存取,因此会 一直等待,直到处理程序结束,并且释出其所拥有的记忆体为止。 即是在不会会产生遗漏的处理程序中,记忆体管理员工作集的缩减,最後还是会从处理程 序的工作集中,任何指定给遗漏虚拟记忆体的任何实体页次取得记忆体。该处理程序会传 送遗漏页次给页次档案,并且让系统使用实体记忆体以供其他处理程序使用。因此,记忆 体遗漏只会对可用实体记忆体产生有限的影响。真正的影响是在虚拟记忆体的耗用上(工 作管理员称之为 PF Usage 和 Commit Charge)。没有工具可以对虚拟记忆体的耗用做任 何事情,除非直接删除耗用记忆体的处理程序。 @小标 假软体 我们已经看过记忆体最佳化工具的一些说法。如果你更仔细的研究,你会发现厂商会在网 站上加上一句推翻自己长久以来的宣称—产品可能对系统的效能没有任何影响,并且也可 能会降低系统的效能。即使不知道这些产品是如何应用记忆体管理员的特性,让记忆体的 统计数能上升,一般在常识上我们可以这样想,若记忆体最佳化工具有效,Microsoft 开 发人员应该很早就会直接整合到 Kernel 部分了。 --
QR Code



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.174.172.9







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP