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

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

  [复制链接]
跳转到指定楼层
#
jeffxl 发表于 2012-1-22 17:58 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
点击数:132797|回复数:282
本帖最后由 jeffxl 于 2012-1-24 22:17 编辑

以下内容为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的内存“用法”

本帖子中包含更多资源

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

x

评分

参与人数 9活跃度 +45 收起 理由
挥剑下江南 + 5 赞一个!
博士仑 + 5 赞一个!
akjz + 5 很给力!
tanzibin + 5 赞一个!
liwenchao + 5 赞一个!
不明真真相 + 5 赞一个!
kid-man + 5 赞一个!
itbeta + 5 很给力!
drifting + 5 赞一个!

查看全部评分

282#
hu10us22 发表于 2013-8-6 10:45 | 只看该作者
281#
hu10us22 发表于 2013-8-3 15:46 | 只看该作者
與你聊聊大容量記憶體的使用效率^^
http://www.coolaler.com/showthread.php/302043
280#
liyaocheng 发表于 2013-8-1 23:39 | 只看该作者
mark一下 慢慢看~
279#
devontang 发表于 2013-7-20 14:28 | 只看该作者
这个内容正是我需要的
278#
以德胡人 发表于 2013-7-18 13:20 | 只看该作者
虽不明但觉厉,感谢楼主分享。
277#
neeyuese 发表于 2013-7-16 17:32 | 只看该作者
明日酒家 发表于 2013-7-16 19:26
【原创】浴室带你看各大SSD评测有多少误导成分。(更新)
看来你的这篇文章,我又有问题
为什么25NM颗粒 ...

X25-E的算法比较烂,那是很多年前的事了。

DCS3700的25nm 颗粒是eMLC,而且主控留了很大的OP容量,造成写放大足够低,又是全Page映射,缓存有掉电保护可以做一些“冒险”的举动防止FTL释放增加写放大。


276#
明日酒家 发表于 2013-7-16 17:26 | 只看该作者
本帖最后由 明日酒家 于 2013-7-16 17:33 编辑
neeyuese 发表于 2013-7-16 12:45
解压?那个吃cpu和读取还有写入吧,你指的是哪个解压?

【原创】浴室带你看各大SSD评测有多少误导成分。(更新)
看来你的这篇文章,我又有问题
为什么25NM颗粒的S3700  数据标得比 50纳米的SLC颗粒的 X-25E高这么多。
并且寿命也比X-25E高   写入4K 高了10倍。 读取4K一倍  
S3700标的数据可信吗?

Enterprise SSD Comparison

Intel SSD DC S3700
Intel SSD 710
Intel X25-E
Intel SSD 320
Capacities
100 / 200 / 400 / 800GB
100 / 200 / 300GB
32 / 64GB
80 / 120 / 160 / 300 / 600GB
NAND
25nm HET MLC
25nm HET MLC
50nm SLC
25nm MLC
Max Sequential Performance (Reads/Writes)
500 / 460 MBps
270 / 210 MBps
250 / 170 MBps
270 / 220 MBps
Max Random Performance (Reads/Writes)
76K / 36K
38.5K / 2.7K IOPS
35K / 3.3K IOPS
39.5K / 600 IOPS
Endurance (Max Data Written)
1.83 - 14.6PB
500TB - 1.5PB
1 - 2PB
5 - 60TB
Encryption
AES-256
AES-128
-
AES-128
Power Safe Write Cache
Y
Y
N
Y

275#
neeyuese 发表于 2013-7-16 12:45 | 只看该作者
明日酒家 发表于 2013-7-16 13:25
谢谢 ,我心里有数了。
我想再问一个问题  解压是写入吧,写入越快,解压越快,是吗?
...

解压?那个吃cpu和读取还有写入吧,你指的是哪个解压?

274#
明日酒家 发表于 2013-7-16 11:25 | 只看该作者
neeyuese 发表于 2013-7-16 10:21
做缓存盘当然要看主控,而且主控非常重要,选SLC是因为缓存盘很伤耐久度的关系,不过价格就没优势了,总 ...

谢谢 ,我心里有数了。
我想再问一个问题  解压是写入吧,写入越快,解压越快,是吗?
273#
neeyuese 发表于 2013-7-16 10:21 | 只看该作者
明日酒家 发表于 2013-7-16 12:08
谢谢  做缓存盘是不是意味什么主控都不重要?(SF或者INTEL)
    用小容量SLC  性能会下降得更慢些吗?
...

做缓存盘当然要看主控,而且主控非常重要,选SLC是因为缓存盘很伤耐久度的关系,不过价格就没优势了,总体来说属于一种过渡。

272#
明日酒家 发表于 2013-7-16 10:08 | 只看该作者
neeyuese 发表于 2013-7-15 21:31
SRT最大支持的SSD缓存容量是64GB,你买大的SSD也没用。

另外SRT是LBA层面的缓存,不是文件层的。 SRT不 ...

谢谢  做缓存盘是不是意味什么主控都不重要?(SF或者INTEL)
    用小容量SLC  性能会下降得更慢些吗?
271#
neeyuese 发表于 2013-7-15 21:31 | 只看该作者
明日酒家 发表于 2013-7-15 23:21
我再在这里问一下   把话说得更清楚一些
我想组建SRT   60G容量的便宜
可我自己想象担心  60G缓存全部填 ...

SRT最大支持的SSD缓存容量是64GB,你买大的SSD也没用。

另外SRT是LBA层面的缓存,不是文件层的。 SRT不支持Trim,所以用久了性能会下降,需要完全依靠SSD内部的垃圾回收机制。

270#
明日酒家 发表于 2013-7-15 21:21 | 只看该作者
jeffxl 发表于 2012-10-8 18:02
举例中,桌面相当于缓存,桌面面积是缓存容量。白领自身是缓存管理,学习过程是缓存算法学习和命中爬坡阶段 ...

我再在这里问一下   把话说得更清楚一些
我想组建SRT   60G容量的便宜
可我自己想象担心  60G缓存全部填满后,会不会影响缓存性能
因为我听说没有预留空间的SSD满盘性能下降严重 我担心缓存也是这样   
60G缓存满了的话 性能会下降。
如果会的话,我打算买大一点的120G 如果不会我就买60G。   
269#
明日酒家 发表于 2013-7-12 22:16 | 只看该作者
本帖最后由 明日酒家 于 2013-7-13 14:03 编辑

看了你的文章   我下定决心 SRT +大内存   双缓存  你给了我思路   我感觉这个思路非常好。  
纯SSD 当然是最强悍的   同样的价钱下容量是硬伤。   适合不创造需求    单任务  使用的文件就这么多,不会增加文件。 固定的文件操作。
SRT的硬伤就是程序头一两次启动是不加速度(很在乎吗 纯SSD 没有这个限制),只有你经常使用的文件,才达到SSD的效果,  容量好,
缓存64G,对于普通人来说够用吧? SRT的临界点在于爆缓存。  64G的缓存 热数据 相当于多少G的纯SSD?
纯SSD +HHD  ,首先你买多大容量的SSD,第二 还要移来移去。  
把“常用文件”都放在SSD上 你的常用文件有多大  SRT常用文件也能达到差不多的效果(看评测)  你多加了个HHD 说明你对容量有需求。
HDD的冷数据你就不访问吗?HHD的冷数据 可能某个时间要经常用到,就没有加速的效果,
你有自己的目的,要把HHD的某些文件移到大容量的SSD上,这是一环。
仅仅是《常用文件》的话 纯SSD 和SRT 差别不大(没有爆缓存的情况下),你创造需求,下载,文件,纯SSD我马上就能用SSD的速度打开。
纯SSD 因为系统安装在SSD下,系统反应我估摸应该是最快的 ,我估摸SRT 系统用久了 也有差不多的效果。



268#
明日酒家 发表于 2013-7-12 12:09 | 只看该作者
相当牛逼的文章
267#
ALFCHIN 发表于 2013-7-2 10:13 | 只看该作者
James007ss 发表于 2013-6-24 16:51
没有必要,如果你认真把jef这个主帖的内容都理解透彻,就能明白为什么。其实MS的工程师和程序员都不会建 ...

我觉得用机械盘作为系统盘的用户使用ramdisk作为IE缓存还是很有意义的。
在磁盘零碎文件并发读写频繁的情况下,由于缓存读写响应时间问题,IE和CHROME\FIREFOX的页面加载速度会受到极大影响,甚至出现无响应。
而且IE缓存无需回写磁盘,cookies之类的文件并不位于缓存内,根据多年使用经验来看引发系统问题的几率极低。
但是ramdisk作用也仅限于此,在用了SSD之后完全可以抛弃了
266#
chinaathena 发表于 2013-7-2 02:35 | 只看该作者
好吧,我承认需要在白天看这个东西……
265#
xyz0ywg 发表于 2013-7-2 00:00 | 只看该作者
普通用户照楼主的做就可以了,对于高级用户缓存软件用处还是很大的
264#
James007ss 发表于 2013-6-24 16:51 | 只看该作者
boboq 发表于 2013-6-24 03:15
虽然这个帖子我一口气看到200+楼..有些东西还是似懂非懂..
如果我用内存虚拟一个硬盘..把这个系统虚拟缓 ...

没有必要,如果你认真把jef这个主帖的内容都理解透彻,就能明白为什么。其实MS的工程师和程序员都不会建议这样做,据我所知,他们甚至无法明白有人这样做的理由。
263#
callpo 发表于 2013-6-24 08:57 | 只看该作者
我用win7 64位系统,8G内存,其中4G做ramdisk。否则,感觉浪费了内存。因为我主要是浏览网页,偶尔编程。因为是HDD RAID0做系统盘,之所以用ramdisk来缓存临时数据和网页,主要就是为了最大程度避免磁盘碎片,尽管4G不大,但还是经常用来作为迅雷下载的临时缓存,保护硬盘。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部