缓存的智能处理

这里报告PrimoCache软件的Bug或建议,
非常感谢您的支持!
回复
suge940322761
3级用户
3级用户
帖子: 15
注册时间: 周一 4月 11, 2016 11:12 am

缓存的智能处理

帖子 suge940322761 »

开启缓读写的情况下:选择a文件右键复制(a文件100m)粘贴,即在当前目录下生成a-副本文件,我们为了方便叫它b文件;这个过程中我们查看primeCache的监视窗口,读取总计100m,读取缓存0,请求写入100m,实际写入0,空闲缓存减少200m.
然后继续粘贴生成a-副本2文件,简称c文件。这个过程中我们查看primeCache的监视窗口,读取总计100m,读取缓存0,请求写入200m,实际写入0,空闲缓存减少300m.

现在分析:在粘贴时是一闪即过的,我们知道这是因为该文件已经缓读了,而且也开启了缓写,但是这个请求写入是动态变化的,默认的监视刷新是1s,我们由此判断,primeCache是从内存中a缓存拷贝数据的。此时内存中存在a文件的缓读,b,c文件的缓写,但是其实三个内容是一模一样的。

不久浪费了内存,而且还多了读取,写入的操作,即使这个读写是在内存中也是浪费了cpu。

程序员都知道有个东西叫写时拷贝,即如果只是读取而没有产生写或者修改操作时是不会生成拷贝的。

建议此处用上写时拷贝,只有修改b,c文件才在内存中拷贝一份。而缓写时间到了的时候直接使用a缓读内容写入磁盘就好了。


同时我还有个疑问希望开发者回答:你们在截获系统api后发现要读取的文件存在于缓存中,会不会和磁盘上的文件进行校验。比如以下情况:
在缓存中存在a文件,然后我暂停了缓存,修改了a文件的内容,之后继续使用缓存,那么下次读取a文件会不会进行校验。因为如果不校验有可能还是获取到未修改前的文件。如果校验了,是基于什么方法?是对比最后修改日期吗?那如果我连最后修改日期也修改了...
不测试了,直接给答案吧,管理员。
头像
Support
技术支持组
技术支持组
帖子: 2667
注册时间: 周日 12月 21, 2008 10:42 am
联系:

Re: 缓存的智能处理

帖子 Support »

suge940322761 写了:建议此处用上写时拷贝,只有修改b,c文件才在内存中拷贝一份。而缓写时间到了的时候直接使用a缓读内容写入磁盘就好了。
PrimoCache并不知道用户对文件的任何操作,它仅仅接收Windows请求的读数据或写数据命令并进行处理,但是不会去分析数据的具体内容。
您提到的这个基于数据内容的缓存处理,其实相当复杂。Windows在最近的服务器版本才支持有这类似的特性。
suge940322761 写了:同时我还有个疑问希望开发者回答:你们在截获系统api后发现要读取的文件存在于缓存中,会不会和磁盘上的文件进行校验。比如以下情况:
在缓存中存在a文件,然后我暂停了缓存,修改了a文件的内容,之后继续使用缓存,那么下次读取a文件会不会进行校验。因为如果不校验有可能还是获取到未修改前的文件。如果校验了,是基于什么方法?是对比最后修改日期吗?那如果我连最后修改日期也修改了...
PrimoCache不是基于文件的缓存系统,它是位于磁盘级的处理软件。因此没有任何文件信息,只有原始的数据。这原始的数据可能是文件系统的元数据,也可能是文件的某个片段数据。
Primo Ramdisk | PrimoCache
Romex Software 技术支持组
回复