分页: 1 / 1

关于保持缓存活性的模式建议

发表于 : 周三 3月 20, 2019 5:16 pm
zths
zths 写了: 周日 3月 10, 2019 10:29 pm
xiaozuiba 写了: 周日 10月 14, 2018 9:17 pm 频度优化策略:
1.检测统计每个缓存区块的命中率,每命中一次就加1,无命中就减1
2.用户可以分别设定检测时段的间隔,如命中检测20分钟一次,无命中检测统计60分钟一次,并可设定清除命中率低的区块的值,如0,-1
3.清除命中率为低的区块,空出空间给新的数据进入
别了 直接存一个时间戳 或类似的的东西,用来记录最后读取命中的时间
为减少缓存盘读写次数 首先存在内存里积累一定时间更新一次到index里
然后保持缓存满或者空置10%(根据你们软件的设计)
在读取未命中缓存时 如果缓存已满 就从最老时间戳开始 清除 替换(根据你们软件的设计)
这里可以加入一个提醒 / 建议 若被清除的缓存的上次命中时间小于 半小时(或自定义) 就建议增加二级缓存(或一级缓存)。

这样就可以保证缓存的活性与有效性了。
我寻思好像不单开主题就没人看。
我寻思 这个思路应该挺清晰的。
而且运算模式简单不易出bug 数据结构可控,不需要变长结构 只增加一个DWORD(或更小)就足够
这样根本不需要关心缓存热度的问题 不活动的在碍事的时候就自动丢掉了 载入新的。永远保持活性.
还可以有效的推测建议缓存大小。 (清除计数/被清除的平均最后活动时间)

Re: 关于保持缓存活性的模式建议

发表于 : 周日 3月 24, 2019 10:59 pm
rome666
这软件的优化改进,感觉已经彻底停止了,将就着用吧。

Re: 关于保持缓存活性的模式建议

发表于 : 周一 3月 25, 2019 11:33 am
Support
@zths, 谢谢您的建议!您提到的这个算法其实是缓存FIFO算法,不过这个算法是不太适用于读缓存的。通常而言缓存相对于目标盘的容量总是很小的,不考虑频度的话,随便在目标盘扫一些文件就可能把所有缓存内容都冲掉。此外缓存也需要考虑效率和响应性,每处理一个读请求都需要尽快响应完成,所以在缓存块处理时包括清除替换时都不会进行大量的对比比较或者加入提示。
关于缓存算法,目前有诸多研究,我们也在针对不同的数据模式希望能自动匹配比较好的缓存算法,以提高命中率。
软件的其它优化也在进行中。

Re: 关于保持缓存活性的模式建议

发表于 : 周一 4月 01, 2019 8:49 pm
zths
support 写了: 周一 3月 25, 2019 11:33 am @zths, 谢谢您的建议!您提到的这个算法其实是缓存FIFO算法,不过这个算法是不太适用于读缓存的。通常而言缓存相对于目标盘的容量总是很小的,不考虑频度的话,随便在目标盘扫一些文件就可能把所有缓存内容都冲掉。此外缓存也需要考虑效率和响应性,每处理一个读请求都需要尽快响应完成,所以在缓存块处理时包括清除替换时都不会进行大量的对比比较或者加入提示。
关于缓存算法,目前有诸多研究,我们也在针对不同的数据模式希望能自动匹配比较好的缓存算法,以提高命中率。
软件的其它优化也在进行中。
因为我拿了一个1t的nvme给8t的机械做读写缓存,目前还没有遇到写满冲掉缓存的情况...
现在就想要个尽量奔放的缓存方法.

也可以试试把缓存清除单独拿一个线程出来做.. 然后就可以做多次命中后清除的工作了
读的时候写队列. 不过就是内存开销大...

还有我想知道那个空闲写入模式 是目标盘无读写操作一定时间后算是空闲 还是系统无操作时候算是空闲..

还是比较想要geek类的软件,拿参数模式都放出来手调....虽然这样不适合市场.

Re: 关于保持缓存活性的模式建议

发表于 : 周四 4月 04, 2019 12:28 pm
Support
如果您的缓存足够大,那么目前软件对这种情况的算法已经是最优的了,您可以看看读取命中率在多少?
软件判断空闲是会考虑CPU和目标盘的使用情况。

Re: 关于保持缓存活性的模式建议

发表于 : 周四 4月 04, 2019 8:28 pm
zths
support 写了: 周四 4月 04, 2019 12:28 pm 如果您的缓存足够大,那么目前软件对这种情况的算法已经是最优的了,您可以看看读取命中率在多少?
软件判断空闲是会考虑CPU和目标盘的使用情况。
嗯,命中在95+%。
我就是考虑写满后怎样。。