谈谈使用感受和一些误区
primocache吧
全部回复
仅看楼主
level 2
白菜1199 楼主
1、什么是磁盘缓存?简单来说就是一块高速存空间,存储了一部分预先读取的数据(术语叫“预读”),系统需要都磁盘的时候,先读缓存,找到了就直接取走,没找到再去读真实的磁盘。写数据的话,都是直接先写到缓存,之后再由缓存异步(注意一般是异步)写回真实磁盘,这个术语叫“回写”,如果写的数据过大,超过缓存容量,那就直接写磁盘了,不会写到缓存去。磁盘缓存不但Windows自己有,每块硬盘基本都有,大小不一,一般从16M到64M不等。现在RAID卡很普及了,RAID有很多也自带缓存,128M/512M不等。缓存是不是越大越好?这里面除了成本问题,还有个性能平衡的问题,因为如果系统在缓存没找到数据,那就必须重新再去磁盘读数据,而在缓存找数据的这个时间就算浪费掉了,缓存越大,查找缓存的时间越长,浪费的时间也就越多。这就是Windows和硬盘、Raid的缓存都不会太大的原因之一。所以缓存性能取决于三个方面:缓存材质(SRAM\DRAM等等)、缓存大小和缓存算法(算法也是决定检索速度的重要因素)。
2、说一下磁盘缓存的方式。磁盘缓存方式分两种,一是直接预读相邻的硬盘扇区(每扇区512字节),这种方式的问题在于很多文件都不是按扇区连续存储的,这也就是为什么操作系统一般都是按簇(4K/8K/16K)来存取数据而不是按扇区来存储的原因:尽量保证一个文件存储的扇区是连续的。 硬盘、RAID卡的缓存就是这种方式。第二种是按文件缓存,说白了就是将一些常用文件预加载到内存空闲部分,但是不执行,需要使用的时候再重新转移到内存的执行部分,这种方式一般用于操作系统、大型游戏和应用,比如有些游戏启动是预加载地图就是这种。Windows的磁盘缓存我不敢断言,PrimoCache这个软件从其表现来看,我猜应该是第一种,因为数据是分块的,也就是按簇存取。
3、关于是否作读写缓存分离的问题:我看贴吧里有人把缓存分成两部分,一部分只读,一部分只写。个人觉得这种做法存在问题,要说清这个问题,先解释一个术语“脏读”,举个例子,你打开一个doc文件,修改了几个字,然后保存、关闭,这个时候,缓存里面已经更新了,但短时间内磁盘里面还是老的文件,这种不同步的情况就叫“脏读”。这个时候如果你又重新打开并且修改这个文件的话,系统是应该是从缓存调取文件,而非从磁盘调取,否则你之前修改的结果就全部丢失了。无论是Windows还是硬盘缓存,都对这种情况做了处理(加状态锁),但是如果你是一个缓存只读、一个缓存只写,这个事情就变得相当复杂了,PrimoCache需要对这个文件锁定状态设计复杂的状态同步机制,很容易出BUG,当然也有简单的先把缓存写到磁盘,然后重新再读入缓存的做法,但是这样的效率显然极为底下。所以我不推荐读写分离,如果是一级缓存读,二级写的话,这个机制就更加难处理,因为还会涉及不同的设备IO并发和同步问题。我相信PrimoCache应该是考虑并且处理了这种情况,但是能简单的事情,我是不愿意复杂化的。
2023年02月09日 12点02分 1
level 2
白菜1199 楼主
我自己测试使用的结果目前上没有任何问题,我用的4.2破解版(切记Windows安全中心会拦截一些操作,一定要放行)。另外说一下,关于命中率,不用太纠结,这个只要缓存足够大,自然会慢慢上去的。即便不上去,也影响不算太大。明天来根据我的理解说说这个软件的设置
2023年02月09日 12点02分 2
4.2怎么破解。。
2023年02月10日 01点02分
@Taey👀 貌似不好发附件吧,我也是在网上搜索找到的
2023年02月10日 02点02分
@Taey👀 4.1就好了
2023年02月19日 04点02分
level 2
白菜1199 楼主
今天聊聊PrimoCache的设置,首先想吐槽一下,因为这个软件对于“预读”没有设计策略给用户选择,比如预读多少数据块、缓存数据块的过期设置等等(当然这个仅针对有定制要求的用户,普通用户可以不调整)。唯一与此相关的设置只是“缓存粒度”,这个后面会详细说明。
1、一级缓存,这个主要是利用内存在加速磁盘读写,缓存大小的设置建议认真衡量内存大小、操作系统版本、日常应用模式三个方面,一般而言3-4G是比较适用于日常办公、影音娱乐,6-8G适合游戏,再往上主要就是用于作图、设计了。我个人的办公电脑主要用于开发和办公,偶尔做图,不玩游戏,内存64G,所以直接开到了16G。之前我说过,缓存越大,再“未命中”的情况下,浪费的时间也越多,不过日常应用中16G被全部占满的情况太少了,而且对于现在的CPU和SDRAM而言,这点时间有时候还不如为了维持内存数据的刷新时间(不了解这一点的,可以去百度一下DRAM的电荷刷新)。所以总的来说,缓存大小是一个均衡值,根据自己的情况自行决定,原则是至少保留足够的内存给系统,一般不低于4G,如果本身只有4G的内存,Windows 10、Server 2012以上的版本就不建议开这个缓存了。
2、一级缓存的高级设置主要分两部分,上半部分决定是否做读写分离,官方的说法是:“共享缓存空间的缺点是当缓存空间被用满并且有新的读取或写入操作时,(新的)读取和写入操作会互相影响对方的缓存数据和性能。”这个道理解释起来有点复杂,简单来说,因为空间不够,必须淘汰一些过期数据(FIFO机制),而这个被淘汰的数据可能是此前读的缓存块或者或者写的缓存块(注意不会丢失数据),如果是写操作的同时淘汰预读数据,而之后又要用到这个数据,那么就必须重新到磁盘去读取,如果是读操作淘汰缓写数据,那么淘汰的时候就必须先把这个数据先写入硬盘然后再淘汰。我的看法是:读写分离的算法处理更加复杂,为了应对“脏读”问题,大概率是要使用两个二叉树并行检索,同时软件还要维护两个状态表格,对算法要求更高、更容易出错。所以我没有做分离,用那种极端情况下的性能损失换点可靠性,我觉得不亏。下半部分的设置其实软件的说明很清楚了,因为缓存数据是在内存中的,window在休眠/睡眠的时候会将所有内存数据都写到硬盘上一个文件,你再开机的时候会重新读取该文件,并加载到内存,勾选“休眠时释放一级缓存”可以避免缓存被Windows作为内存数据保存和加载,以此加快休眠和恢复的速度,代价就是如果休眠之前有写缓存没有被“回写”,必须消耗一定时间将数据写回硬盘。
2023年02月10日 04点02分 3
level 2
我主要玩游戏,双硬盘,一个固态,一个机械。固态作为缓存盘,只开了二级缓存,且只开了仅读。对于一些需要频繁加载的游戏能看到明显效果,就是加载变快了。就是不知道还有没有更好的设置方案。
2023年02月10日 09点02分 4
level 2
白菜1199 楼主
回复有字数限制,我就在这里回了
首先明确两点:1.目前大多数游戏都是在启动时将各类主要数据读到内存里,只在场景/地图切换(或者卷动)的时候才需要另外读磁盘(除非你的内存很小,需要使用虚拟内存)。2.游戏文件主体大部分还是以读为主,写操作不多的。综合这两点所以玩游戏开缓存主要就是提高加载速度快,减少场景切换的卡顿,对于图形显示等没有太多影响。
个人观点:在已经有二级缓读的情况下,开个小的一级,缓读写C(记得勾选延时写入)会好一点,主要就是针对一些系统文件和分页调度(这个涉及虚拟内存的知识,可以自行百度)。当然,如果固态足够大(现在很便宜的),其实你完全可以考虑将游戏直接装在固态里,这样就无需二级了,然后一级开大一点,对固态缓读写,可以延长一点点固态的寿命(土豪请无视)。
2023年02月10日 10点02分 5
level 2
白菜1199 楼主
对了,还没说说我自己的配置,因为工作缘故,我都是拆的单位淘汰服务器上配件,LSI 9627(512M 带BBU),4块600G的15K SAS做RAID0,不开缓存的情况下,性能大约比SATA的固态单盘高40%,但比NVME的M.2要低不少。没用固态(老工作站主板没有M.2接口),所以我也没开二级。设了缓存之后,顺序读写在3万左右,综合性能大约是双M.2组Raid0的两倍,不过因为跑分程序主要是内存在“作弊”,没有太大实际意义,所以就不发图了。
2023年02月10日 10点02分 6
level 2
白菜1199 楼主
另外我发现用在单位的FTP上是极好的,原来的上传和下载速度受限于FC SAN的16GB带宽,并发量大一点的时候会有掉速、卡顿,现在在服务器上开了个4GB的读写缓存,所有并发连接全部满血,可惜只有20G的网络连接(双10G做的LACP),不然估计更惊人!!
2023年02月10日 10点02分 7
level 2
白菜1199 楼主
接下来说说二级缓存,首先声明,我没有空闲的固态,所以没有开,以下所说仅仅基于理论。二级缓存的说明还是很清楚的,其实就是占用一部分固态/SSD的空间,对机械硬盘做加速,个人感觉这个二级的功能有点鸡肋,论速度不如内存,就算比机械硬盘快,你要真有这个空间,还不如把系统直接装在固态里。为啥这么说?主要Windows(这个软件仅支持Windows,并且官网说暂无开发Linux和MacOS的计划)的软件,都是按照冯诺依曼架构设计的(好吧,Linux\MacOS\IOS\安卓等等貌似都是),软件启动时候将数据从速度较慢的外存储器调入速度较快的内存储器,然后再内存储器上运行……理解一下这个机制就明白了,除非机器能预测你今天会使用哪个软件,否则磁盘缓存的“预读”机制都是基于启动后的热数据,就是那些你会频繁读、写的数据块,然后适当“预读”相邻的数据块(之前已经简单描述了)。所有软件第一次启动,大多数情况下都必须从真实磁盘读取数据,读完已经在内存了,在此期间一般是没有缓存参与读取的。真正发挥作用的,是你之后反复开关这个软件,或者相关的文件,再或者修改、保存等操作。我觉得这个二级缓存最大的好处是意外断电的情况下,数据也许不会丢失,或者能找回来,因为毕竟是在固态磁盘里而不是内存里。用过DOS的人都知道,文件分配表(FAT\FAT32\NTFS\HDFS等等)是一种链表结构,一旦中间哪一环出现问题,整个链表都会失效的。所以如果真的电源不稳定,或者机器容易死机,还是老老实实不要用这个软件了。当然,相比而言,固态肯定比内存便宜,所以如果内存实在不够的情况下,有多余的固态,这不失为一种临时解决方案。如果内存足够大、不担心数据丢失,还是推荐一级缓存为主,毕竟内存和总线的速度不是吹的。至于二级缓存究竟是读还是写,我个人观点,可以根据使用情况设定,不清楚使用情况的就混合,除非你要保护固态寿命。
2023年02月10日 11点02分 8
level 2
白菜1199 楼主
前两天事情有点多(加班写了一个动态流压缩编码的东东),接着来说说PrimoCache的设置,此前说了一级和二级。今天聊聊设置窗体右边的事情。首先是缓存粒度,这个我测试过几个档次,4K\16K\32K\64K,再大就没有测试了,实际感受性能和命中率方面区别不大,但是在设为4K的情况下,机器长时间运行后(我办公的电脑是不关的,每晚有几个计划任务要跑),有明显的卡滞,比如打字,键盘输入后,出字(中文)会有点卡,不厉害,但是明显不够丝滑。至于这个多长时间会如此,不太好说,我测试的时候有时是十几个小时就会出现,有时大约两三天才会出现。改成16及以上就没有发先这个情况。目前使用32。这个值的设定在官方的网页上没有找到详细阐述,只有软件上简单做了说明,原则上越小越好,可以考虑与硬盘分区簇的大小一致,但是会额外增加内存消耗和CPU负担,实际测试,16G缓存设为4K的话,增加1G左右额外的内存消耗。至于CPU负担,可能就是为什么长时间运行会卡的原因。另外这个值的设定与硬盘分区大小也有关系,测试存储服务器上,40T的分区,最小只能使用64K(这其实取决于分区簇的大小)。其次说说延时写入,如果你对数据安全不是100%敏感(就是说完全不能接受任何一点点的数据丢失),那么我建议就不要使用这个软件了,用这个软件强烈建议打开延时写入。众所周知,磁盘的写速度远远低于读取,而磁盘IO资源是有限的,因此必然会有“竞争”(争用)。先说说什么是争用,现在的计算机都是多核多线程的,即便是早期的单核单线程,CPU的速度也远高于总线、外设的速度,所以一般CPU会将时钟周期切分为若干片段,形成多任务同时执行的“假象”。在这一情况下,由于磁盘的速度比较低,多个任务在同时需要使用磁盘IO的时候就会形成竞争(这一点其实也是为什么这个软件能加速的原因之一,内存的速度远高于磁盘)。磁盘缓写的实质就是把需要写入磁盘的数据先写入到内存,等磁盘空闲的时候(或者定时)再批量写入真实磁盘。这一方面能最大限度避免资源争用,另一方面大幅提高数据保存速度(操作系统可不管是不是真的写入了),系统的整体流畅度和性能提升幅度是及其明显的。官网的说明是如果不打开缓写,则一级缓存仅为读缓存。至于缓写的时间,其实就是每隔多少时间写一次真实磁盘,个人建议对数据安全不敏感的,可以设为60秒左右,对数据安全敏感的,可以设为10秒,不建议过小,否则写磁盘过于频繁,写缓存的加速效果就会打折扣了,个人推荐30~60秒,这样可以适当回避一些磁盘IO的高峰。
2023年02月16日 06点02分 9
level 3
主要还是固态加速机械用吧。w10开始就有内存缓读功能了(w11有些版本会失效)。如果系统缓存+额外缓存都要满足,那需求的内存就太大了,一般即使有内存空余也不会余下这么多。
2023年02月17日 03点02分 10
level 6
我是128g内存 个人电脑 不是服务器 以前开64g 但是会注意到内存被Windows的已缓存占满 所以现在只开32g了
primocache现在有个问题是 一级缓存的开机预读和关机写入 都是直接使用被缓存盘
而被缓存盘往往都是机械 速度感人 特别是在大内存的情况下 开机硬盘咔咔响半天 其他操作延迟极高
关机转圈半天
所以我觉得一级缓存应该在开关机的时候使用二级缓存的空间 据说这几天新版本会打开这个开关
2023年04月02日 00点04分 11
1