1、简述
我个人关于的primocache(以下简称PRC)的使用实际体验如下,希望能够对大家有所帮助。
PRC的整体逻辑是优化windows缓存,而不是单独进行缓存,因此很多时候跟windows的缓存逻辑一致,唯一的优点就是够手动控制缓存的读写。
2、系统盘要不要加速
首先说的一点,系统盘不需要加速。
经过我一个月的测试发现,系统盘的命中率只有可怜的12%-20%,这意味着大部分的系统文件在开机时就已经被加载到了内存中,只有少量的文件需要读取,如果系统盘只安装系统的话,那么PRC的缓存效果可有可无,无法带来系统盘的提升,如果是固态硬盘的话,则更不需要加速。
3、windows的内存缓存机制与prc的关系
windows内存分为:
①使用中(被释放才能够使用的部分)
②已修改(需要写入硬盘才能够被使用部分)
③备用(未频繁使用,内存不足时,需要时会被优先释放使用的部分)
④可用(会被优先直接使用的部分)
如下图,硬盘之间进行复制测试,从D盘复制到F盘。
其中,左侧的500MB/秒是D盘的读取速度,右侧91.3MB/秒是F盘的写入速度,可以看到其中完全不对等,这是因为Windows的缓存机制会将数据读取后写到内存(已修改部分)中,然后再复制到对应的盘,而PRC的本质就是在这一层面上对缓存机制进行额外的处置。
在Windwos的缓存机制下,数据写入硬盘后,会一直在内存中作为备用部分,被保存在内存中,直到被新文件覆盖,这也意味着,如果此时我再次进行操作,就可以直接从内存读取写入硬盘中,如图。
左侧2.3Gb/秒是从内存备用部分换到已修改部分的速率,并不是写入的速度,这意味着windows内存管理机制发挥着作用。
4、PRC做了什么?
PRC希望通过额外的操作,扩大“已修改”的部分,将频繁使用的文件持续的缓存在内存中,从而在其关闭之后,重新打开的时候,无需再次读取硬盘,而是直接从PRC的“已修改”部分,划到windows的“已修改”部分。
这样做的好处是能够最大程度的将关闭的程序最大速度的再次打开,无需进行读盘。
读写速度的提升
在这一点上,很多吧友觉得固态不需要加速,而实际上无论是固态还是机械都能够在这一部分获得巨大的优化。
机械自然不需要多说,毕竟120MB/秒的速度,谁看了都头疼。
而对于固态,很多人的看法是,固态的速度足够快,无需进行加速,而实际上并非如此。
毕竟,固态的速度再快也快不过内存的速度,以DDR3为例,1600MHZ的内存速度为12.8GB/s,如图,即便实际使用速度有所折扣,但是也能够同比高端固态了(除了4K速度),而在普通DDR5-5600的速度下,读写基本稳定在44GB/秒。
读写4K的提升
还是那句话,对于机械硬盘整体都是有提升的,尤其是4K速度。
不过这一方面对于固态而言,没有什么优势,勉强打赢低端固态,但是对比中端固态没有任何优势。
优化硬盘碎片
对于机械硬盘来说,硬盘碎片会大大的拖慢读取速度,windows的缓存机制虽然能够将数据缓存在内存中然后逐步写入到硬盘中,但是一旦启动写入,windows会全速调用硬盘写入,以求在最短的时间全部写入到硬盘中,这主要是考虑到数据安全的问题,虽然保证了数据安全,但是基本上是遇到什么写入什么,例如A程序顺序写入的时候,B程写入了部分数据,那么AB的数据会掺杂在一起,形成硬盘碎片,当然实际情况会更复杂一些。
而PRC可缓存这一部分写入的数据, 通过不同的规则写入,能够降低硬盘的负载,避免机械硬盘写入时出现“炒豆子”的情况,同时也优化了数据结构,以我个人使用而言,在三个月的使用中没有使用过碎片整理工具,碎片产生率几乎为0。
写入速度优化
对于机械硬盘来说, 写入一直是其最大的瓶颈,在“优化硬盘碎片”的章目中谈到过,一旦进行了写入操作,Windows会全速写入数据,而大部分硬盘都不是独立硬盘,因此在写入数据的时候读取数据,便会出现炒豆子的问题发生,直接拉低读写性能,大大的降低写入速度,而PRC很好的解决了这一点,其提供的缓写策略中的多个方法,可以拉长缓存和写入时间,均衡写入,这样让机械硬盘的活动率不会满载,更好的平衡性能。
在这一方面,对于固态来说也能一样,即便固态有着很高的写入速度,但是满载的写入对于主控以及颗粒是一个不小的挑战,以至于很多固态不得不增加散热片来平衡热度,这在某些方面也能够保护固态的寿命,毕竟颗粒没到寿命,主控报废的情况还是挺多的。
内存容量要求高
但是PRC也会影响内存的大小,这是肯定的,尤其是对于小内存设备来说,较小的缓存会导致循环覆盖,即便能够冻结部分内容以及有着优化的缓存机制,但是过小的内存仍然是最大的瓶颈,这使得命中率会极低。
以Win10为例,系统占用内存4G的情况下,打开浏览器、聊天、办公工具之后,总体占用大概在6-7G左右,如果再开一些游戏或者较大的软件的话,内存占用在8-10G左右,这对于16G内存的用户来说实际上并不友好,因为缓存会很快的覆盖掉,因此需要更大的缓存来进行。
以我的实验结果来计算,缓存在16G的时候,命中率能够到达70%以上,32G时,能够高达90%,64G能够高达99%,80G及以上能够高达99.8%,但是如果有这么大的内存的情况下,PRC的缓存机制实际上效果并不佳。
算法
PRC官方手册宣称的算法,实际上效果很不理想,即便后续的版本中添加了缓存锁定的功能,但是也是基于整个缓存而言,并不能有效地预测实际频率。
写入算法
在内存较小的情况下,缓存的覆盖频率会被不断地拉高,以至于命中率不断地降低。
这种情况下在同盘复制时,表现非常的明显。
如图,可以看到,在直接读取硬盘数据并写回硬盘的过程中,速度会不断的降低,直至腰斩,使得读盘和写盘的速度保持一致,大大的降低了实际的读写速度。
+题外话↓
请注意,在这里之所并没有出现 章目 3 中的内存缓存数据,慢慢写入硬盘的情况,是因为这是同盘复制,同盘复制时,数据会优先写回硬盘以免原始数据被覆盖,保证数据安全,这一点上PRC的做法和windows的原始缓存机制实际上是一致的,这是为了保证数据安全。
可能有人会有疑问,为什么异盘数据操作时,可以缓存在内存之中慢慢写入,而同盘不可以,在这其中实际的算法比较复杂,对此我简单介绍。
在异盘复制时,在windows框架下,将原始数据删除时,这些数据并不会消失,直到内存中的数据写入到其他硬盘中后,这些数据所占用的区域才会被释放,这种占用是隐蔽的,大多时候感觉不到。
但是如果对这些原始数据进行彻底处理的时候,例如永久删除,那么回收站会一直寻找文件,直到这些数据从内存中被写出去,如果是格式化硬盘的话,则会提示无法被格式化,如果硬盘空间不足,向这一部分区域写入数据时,windows的进度条会卡住,直到数据被写完,而这一切都是为了最大程度的保证原始数据的安全,这便是windows的缓存策略。
当然,如果采取更加激进的措施,比如拔掉原始数据的硬盘,并且立刻断电,那么这部分数据就会丢失掉。
同盘复制时,为了保证数据的完整性,windows的策略时少量缓存,最大程度写入,在缓存上限之后,同比读取和写入,如上图所示。当然实际的策略肯定是无法简短的描述清楚,内存和硬盘的I/O策略根据不同的数据进行不同的处理。
+题外话↑
而PRC在写入区域增加了缓写的步骤,即可以无视原始数据的安危直接缓存到内存中,并定时写入或者使用其他的策略,这样可以有效的错开读写峰值,最大程度保持硬盘的效率。
因此,写入算法在缓写时,能够错开读写高峰,这对于大量数据处理的情况非常有效,但是其有限的策略非常依赖于内存的大小,如果内存足够大的情况下,PRC的缓写策略显然效果极佳。
读取算法
读取算法是PRC的核心所在,PRC通过记录文件使用频率和在内存之中的活跃度,从而保证常用文件一直在缓存中不会被释放,但是这算法实在不尽人意。
对于文件来说,什么文件既不会常驻内存,而又需要频繁打开的打开那,答案是软件,对于常用的软件而言,或许一直运行,以至于不会从内存中被释放,如果使用windows的算法,将其中某一个软件关闭之后,进行了大量的读写操作,尤其是小内存的情况下,这个被关闭的软件再次打开时便是需要从硬盘重新读取,大大的增加了读取的时间,而PRC保留出来的这一部分根据算法,常用的软件会被一直保存,并被快速调用,这一方面便是PRC的主要用途所在。
尤其是在重启计算机之后,会发现命中率肉眼可见的上升了,这是因为常用的这些数据被提前加载了。
因此,PRC也提供了一个措施,就是在命中率极高的情况下可以锁定/冻结缓存,以获取最高的读写体验。
综上(可以光看以下几点)
使用Primocache所建议的几点:
1、一般固定的文件读取频率,虽然会有常用文件,但是会不时发生变化。
PRC会自动记忆文件使用频率,自动替换低频率文件,并且会在开机时预读取,以提高读取效率。
比如打游戏,今天打了,明天虽然开机不打,但是必打,那么缓存预读取这部分数据就会派上用场。
2、足够富裕的内存,满足自己日常使用后还有富余。
PRC的性能依赖于内存的大小,如果日常使用都无有效满足的情况下,显然不适合,而且建议PRC使用的内存的大小能够覆盖常用文件或者硬盘的10%,这条建议来自于官方文档。
3、有大量写入需求,但是读写瓶颈较大。
PRC可以平衡读写峰值,获得最大的读写效率,规避掉机械硬盘的磁头来回跳动的问题,平衡固态硬盘的主控负担,并且能够自动释放内存,不需要手动进行调整。
4、硬件设备无法改变的情况下。
PRC能够在不改变数据的情况下提升读写性能,虽然有些限制,但是对于小文件的读写提升十分有效,对机械硬盘无疑是巨大的提升。
需要注意的几点:
1、系统盘不建议使用
系统盘不建议使用,一方面是处于稳定性的考虑,如果非要使用的话,建议关闭缓写或者选择均衡缓写。
单纯的系统盘命中率很低,这主要指的系统盘只有操作系统的情况下,因为操作系统的文件一定是使用频率最高的软件而且自始至终会常驻内存不会被释放所以命中率没有意义。
而如果有其他的软件放在系统盘,那么命中率会与这些软件相关而与系统无关,因此不会对系统有所加速。
2、文件使用频率过于稳定的不建议使用
以QQ为例,如果每次必然打开且常驻后台,频率过于稳定,那么这些文件放哪里都一样,毕竟读写不频繁,会常驻内存。只有那些今天用了明天不用,后天又用的软件,用一会关了,过一会关了的文件,缓存到内存中,能够提升效率。
3、 内存小的不建议使用
win7至少16G,win10以上至少32G起步,否则会明显拖累性能,同时PRC缓存的空闲空间越小,速度会越慢。
其他问题
1、固态可以用,但是不推荐
很多固态的速度比不上PRC的缓存,尤其是SATA协议的固态,对于NVME的高速固态,也可以降低主控和颗粒的负载温度,使其更耐用,但是如果固态的速度足够快的话,PRC的加速没有太多的提升。
2、不要用固态做二级缓存,除了傲腾M10 16G版作为二级缓存
傲腾M10,高读取,低写入,价格便宜,几乎没有寿限,直接把缓存容量拉高13G(实际只有13G),非常适合作为二级缓存。如果你是其他的高性能固态,不建议使用,纯属糟蹋固态,没意义。
我个人关于的primocache(以下简称PRC)的使用实际体验如下,希望能够对大家有所帮助。
PRC的整体逻辑是优化windows缓存,而不是单独进行缓存,因此很多时候跟windows的缓存逻辑一致,唯一的优点就是够手动控制缓存的读写。
2、系统盘要不要加速
首先说的一点,系统盘不需要加速。
经过我一个月的测试发现,系统盘的命中率只有可怜的12%-20%,这意味着大部分的系统文件在开机时就已经被加载到了内存中,只有少量的文件需要读取,如果系统盘只安装系统的话,那么PRC的缓存效果可有可无,无法带来系统盘的提升,如果是固态硬盘的话,则更不需要加速。
3、windows的内存缓存机制与prc的关系
windows内存分为:
①使用中(被释放才能够使用的部分)
②已修改(需要写入硬盘才能够被使用部分)
③备用(未频繁使用,内存不足时,需要时会被优先释放使用的部分)
④可用(会被优先直接使用的部分)
如下图,硬盘之间进行复制测试,从D盘复制到F盘。
其中,左侧的500MB/秒是D盘的读取速度,右侧91.3MB/秒是F盘的写入速度,可以看到其中完全不对等,这是因为Windows的缓存机制会将数据读取后写到内存(已修改部分)中,然后再复制到对应的盘,而PRC的本质就是在这一层面上对缓存机制进行额外的处置。
在Windwos的缓存机制下,数据写入硬盘后,会一直在内存中作为备用部分,被保存在内存中,直到被新文件覆盖,这也意味着,如果此时我再次进行操作,就可以直接从内存读取写入硬盘中,如图。
左侧2.3Gb/秒是从内存备用部分换到已修改部分的速率,并不是写入的速度,这意味着windows内存管理机制发挥着作用。
4、PRC做了什么?
PRC希望通过额外的操作,扩大“已修改”的部分,将频繁使用的文件持续的缓存在内存中,从而在其关闭之后,重新打开的时候,无需再次读取硬盘,而是直接从PRC的“已修改”部分,划到windows的“已修改”部分。
这样做的好处是能够最大程度的将关闭的程序最大速度的再次打开,无需进行读盘。
读写速度的提升
在这一点上,很多吧友觉得固态不需要加速,而实际上无论是固态还是机械都能够在这一部分获得巨大的优化。
机械自然不需要多说,毕竟120MB/秒的速度,谁看了都头疼。
而对于固态,很多人的看法是,固态的速度足够快,无需进行加速,而实际上并非如此。
毕竟,固态的速度再快也快不过内存的速度,以DDR3为例,1600MHZ的内存速度为12.8GB/s,如图,即便实际使用速度有所折扣,但是也能够同比高端固态了(除了4K速度),而在普通DDR5-5600的速度下,读写基本稳定在44GB/秒。
读写4K的提升
还是那句话,对于机械硬盘整体都是有提升的,尤其是4K速度。
不过这一方面对于固态而言,没有什么优势,勉强打赢低端固态,但是对比中端固态没有任何优势。
优化硬盘碎片
对于机械硬盘来说,硬盘碎片会大大的拖慢读取速度,windows的缓存机制虽然能够将数据缓存在内存中然后逐步写入到硬盘中,但是一旦启动写入,windows会全速调用硬盘写入,以求在最短的时间全部写入到硬盘中,这主要是考虑到数据安全的问题,虽然保证了数据安全,但是基本上是遇到什么写入什么,例如A程序顺序写入的时候,B程写入了部分数据,那么AB的数据会掺杂在一起,形成硬盘碎片,当然实际情况会更复杂一些。
而PRC可缓存这一部分写入的数据, 通过不同的规则写入,能够降低硬盘的负载,避免机械硬盘写入时出现“炒豆子”的情况,同时也优化了数据结构,以我个人使用而言,在三个月的使用中没有使用过碎片整理工具,碎片产生率几乎为0。
写入速度优化
对于机械硬盘来说, 写入一直是其最大的瓶颈,在“优化硬盘碎片”的章目中谈到过,一旦进行了写入操作,Windows会全速写入数据,而大部分硬盘都不是独立硬盘,因此在写入数据的时候读取数据,便会出现炒豆子的问题发生,直接拉低读写性能,大大的降低写入速度,而PRC很好的解决了这一点,其提供的缓写策略中的多个方法,可以拉长缓存和写入时间,均衡写入,这样让机械硬盘的活动率不会满载,更好的平衡性能。
在这一方面,对于固态来说也能一样,即便固态有着很高的写入速度,但是满载的写入对于主控以及颗粒是一个不小的挑战,以至于很多固态不得不增加散热片来平衡热度,这在某些方面也能够保护固态的寿命,毕竟颗粒没到寿命,主控报废的情况还是挺多的。
内存容量要求高
但是PRC也会影响内存的大小,这是肯定的,尤其是对于小内存设备来说,较小的缓存会导致循环覆盖,即便能够冻结部分内容以及有着优化的缓存机制,但是过小的内存仍然是最大的瓶颈,这使得命中率会极低。
以Win10为例,系统占用内存4G的情况下,打开浏览器、聊天、办公工具之后,总体占用大概在6-7G左右,如果再开一些游戏或者较大的软件的话,内存占用在8-10G左右,这对于16G内存的用户来说实际上并不友好,因为缓存会很快的覆盖掉,因此需要更大的缓存来进行。
以我的实验结果来计算,缓存在16G的时候,命中率能够到达70%以上,32G时,能够高达90%,64G能够高达99%,80G及以上能够高达99.8%,但是如果有这么大的内存的情况下,PRC的缓存机制实际上效果并不佳。
算法
PRC官方手册宣称的算法,实际上效果很不理想,即便后续的版本中添加了缓存锁定的功能,但是也是基于整个缓存而言,并不能有效地预测实际频率。
写入算法
在内存较小的情况下,缓存的覆盖频率会被不断地拉高,以至于命中率不断地降低。
这种情况下在同盘复制时,表现非常的明显。
如图,可以看到,在直接读取硬盘数据并写回硬盘的过程中,速度会不断的降低,直至腰斩,使得读盘和写盘的速度保持一致,大大的降低了实际的读写速度。
+题外话↓
请注意,在这里之所并没有出现 章目 3 中的内存缓存数据,慢慢写入硬盘的情况,是因为这是同盘复制,同盘复制时,数据会优先写回硬盘以免原始数据被覆盖,保证数据安全,这一点上PRC的做法和windows的原始缓存机制实际上是一致的,这是为了保证数据安全。
可能有人会有疑问,为什么异盘数据操作时,可以缓存在内存之中慢慢写入,而同盘不可以,在这其中实际的算法比较复杂,对此我简单介绍。
在异盘复制时,在windows框架下,将原始数据删除时,这些数据并不会消失,直到内存中的数据写入到其他硬盘中后,这些数据所占用的区域才会被释放,这种占用是隐蔽的,大多时候感觉不到。
但是如果对这些原始数据进行彻底处理的时候,例如永久删除,那么回收站会一直寻找文件,直到这些数据从内存中被写出去,如果是格式化硬盘的话,则会提示无法被格式化,如果硬盘空间不足,向这一部分区域写入数据时,windows的进度条会卡住,直到数据被写完,而这一切都是为了最大程度的保证原始数据的安全,这便是windows的缓存策略。
当然,如果采取更加激进的措施,比如拔掉原始数据的硬盘,并且立刻断电,那么这部分数据就会丢失掉。
同盘复制时,为了保证数据的完整性,windows的策略时少量缓存,最大程度写入,在缓存上限之后,同比读取和写入,如上图所示。当然实际的策略肯定是无法简短的描述清楚,内存和硬盘的I/O策略根据不同的数据进行不同的处理。
+题外话↑
而PRC在写入区域增加了缓写的步骤,即可以无视原始数据的安危直接缓存到内存中,并定时写入或者使用其他的策略,这样可以有效的错开读写峰值,最大程度保持硬盘的效率。
因此,写入算法在缓写时,能够错开读写高峰,这对于大量数据处理的情况非常有效,但是其有限的策略非常依赖于内存的大小,如果内存足够大的情况下,PRC的缓写策略显然效果极佳。
读取算法
读取算法是PRC的核心所在,PRC通过记录文件使用频率和在内存之中的活跃度,从而保证常用文件一直在缓存中不会被释放,但是这算法实在不尽人意。
对于文件来说,什么文件既不会常驻内存,而又需要频繁打开的打开那,答案是软件,对于常用的软件而言,或许一直运行,以至于不会从内存中被释放,如果使用windows的算法,将其中某一个软件关闭之后,进行了大量的读写操作,尤其是小内存的情况下,这个被关闭的软件再次打开时便是需要从硬盘重新读取,大大的增加了读取的时间,而PRC保留出来的这一部分根据算法,常用的软件会被一直保存,并被快速调用,这一方面便是PRC的主要用途所在。
尤其是在重启计算机之后,会发现命中率肉眼可见的上升了,这是因为常用的这些数据被提前加载了。
因此,PRC也提供了一个措施,就是在命中率极高的情况下可以锁定/冻结缓存,以获取最高的读写体验。
综上(可以光看以下几点)
使用Primocache所建议的几点:
1、一般固定的文件读取频率,虽然会有常用文件,但是会不时发生变化。
PRC会自动记忆文件使用频率,自动替换低频率文件,并且会在开机时预读取,以提高读取效率。
比如打游戏,今天打了,明天虽然开机不打,但是必打,那么缓存预读取这部分数据就会派上用场。
2、足够富裕的内存,满足自己日常使用后还有富余。
PRC的性能依赖于内存的大小,如果日常使用都无有效满足的情况下,显然不适合,而且建议PRC使用的内存的大小能够覆盖常用文件或者硬盘的10%,这条建议来自于官方文档。
3、有大量写入需求,但是读写瓶颈较大。
PRC可以平衡读写峰值,获得最大的读写效率,规避掉机械硬盘的磁头来回跳动的问题,平衡固态硬盘的主控负担,并且能够自动释放内存,不需要手动进行调整。
4、硬件设备无法改变的情况下。
PRC能够在不改变数据的情况下提升读写性能,虽然有些限制,但是对于小文件的读写提升十分有效,对机械硬盘无疑是巨大的提升。
需要注意的几点:
1、系统盘不建议使用
系统盘不建议使用,一方面是处于稳定性的考虑,如果非要使用的话,建议关闭缓写或者选择均衡缓写。
单纯的系统盘命中率很低,这主要指的系统盘只有操作系统的情况下,因为操作系统的文件一定是使用频率最高的软件而且自始至终会常驻内存不会被释放所以命中率没有意义。
而如果有其他的软件放在系统盘,那么命中率会与这些软件相关而与系统无关,因此不会对系统有所加速。
2、文件使用频率过于稳定的不建议使用
以QQ为例,如果每次必然打开且常驻后台,频率过于稳定,那么这些文件放哪里都一样,毕竟读写不频繁,会常驻内存。只有那些今天用了明天不用,后天又用的软件,用一会关了,过一会关了的文件,缓存到内存中,能够提升效率。
3、 内存小的不建议使用
win7至少16G,win10以上至少32G起步,否则会明显拖累性能,同时PRC缓存的空闲空间越小,速度会越慢。
其他问题
1、固态可以用,但是不推荐
很多固态的速度比不上PRC的缓存,尤其是SATA协议的固态,对于NVME的高速固态,也可以降低主控和颗粒的负载温度,使其更耐用,但是如果固态的速度足够快的话,PRC的加速没有太多的提升。
2、不要用固态做二级缓存,除了傲腾M10 16G版作为二级缓存
傲腾M10,高读取,低写入,价格便宜,几乎没有寿限,直接把缓存容量拉高13G(实际只有13G),非常适合作为二级缓存。如果你是其他的高性能固态,不建议使用,纯属糟蹋固态,没意义。