[討論] 當看完這篇文,請問你還會使用Ramdisk 或 SuperCache 或 FancyCache 嗎?

hu10us22

榮譽會員
已加入
10/7/06
訊息
12,867
互動分數
528
點數
113
年齡
34
原文出處
[SSD] 谈大容量内存的各种使用方案对磁盘效率影响
http://bbs.pceva.com.cn/thread-35083-1-2.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的任务管理器的性能标签页内找到。
i121786_1922024cjj9s3k98jsjuj3.jpg

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的内存“用法”
 

krad

ネットに棲む男
已加入
5/7/08
訊息
854
互動分數
4
點數
18
全文閱畢,花了不少時間...能簡單翻成繁中這篇會親切些
主要重點就是降低系統複雜度增加可用性,就像超頻一樣;自己調整系統設定來斟酌那個平衡點:效能和穩定
每個人斟酌自己的情況來部屬自己的平台,將益處最大化,就是好的使用體驗啦 :PPP:

補充:剛剛找了一下,微軟也是建議將PageFile設定在SSD上,這邊是MSDN的技術文章
 
最後編輯:

jamesfuh

榮譽會員
已加入
9/21/03
訊息
3,401
互動分數
3
點數
38
Ramdsk 我是一定用的...

尤其像動態 Primo Ramdisk ...
特別設有Direct-IO模式...
這等於是專為Temp, google Cache, Internet temp files...這些暫存檔案而造的
豈有不用之理...;tongue;;tongue;

重新開機後...連清理都不必了,真好!

至於關於在SSD系統碟上...
Fancycache顯然可以不考慮了...
Superfetch, Prefetch這兩個應關閉( 許多SSD 優化軟體的建議)...也會被Win7自動關閉(求證中)

所以在SSD使用上...
除了一些必要優化(大都在減少頻繁寫入)外...
個人又把思緒轉向FBWF去了^^

;smash;;smash;
 

TAS

"人"生淫家...
已加入
3/16/09
訊息
4,079
互動分數
32
點數
48
了解了就會知道自己要什麼...知道要什麼就知道方向怎麼做了~

我不想讓網頁垃圾進SSD...我不想讓SSD經手中繼資料...

我只想讓SSD保持乾淨處於最佳狀態隨時有最快讀取表現...

WIN7動態快取記憶體效率比之以往進步很多沒錯....不用設定都能自己運作很好...可是它沒有韁繩...
 
▌延伸閱讀