2013-04-26 79 views
-1

我正在处理的项目包含一个固定大小的缓冲区FIFO):第一个输入第一个输出,其中客户端将其请求发送到该缓冲区,并由系统处理它们。当缓冲区满时,我必须应用以下超载策略之一(丢弃策略):
DRPH:从缓冲区头部删除一个请求。
DRPT:从缓冲区尾部删除一个请求。
DRPR:随机丢弃缓冲区中25%的元素。
BLCK:阻止新的连接,直到缓冲区中的空间可用。

我做了一个模拟测量性能使用Httperf每秒发送很多请求和测量响应时间,但我有不稳定的响应时间值,尤其是当请求数量很大时。所以通过模拟我无法得到最佳的下降策略。我每次重复模拟很多次,得到不同的值。

现在的问题是:
从理论上来说,什么是最好的缓存管理丢弃策略所提到的政策中? 。什么是最好的缓冲区管理丢弃策略?

+0

定义'最佳'。也许真正的解决方案是没有固定大小的缓冲区。不是一个真正的问题。 – EJP 2013-04-26 09:59:07

+0

@EJP:我的意思是:什么样的政策会取得最佳表现。它仅限于使用固定大小的缓冲区。 – houssam 2013-04-26 11:22:59

+1

这完全取决于客户没有得到回应时的行为,例如,他们是否重试,多久使用/不使用回退,多少次等等。如果没有重试,最佳性能将会达到总是放弃所有这些。你的项目*的目的肯定是评估这些政策?为什么这些具体的四个选择?仍然不是一个真正的问题。 – EJP 2013-04-26 23:34:15

回答

0

这绝对取决于您的数据和它需要的顺序。但通常,对于FIFO,缓冲区末尾的数据是最老的,因此最不可能再次需要的数据。所以DRPR可能是最好的解决方案。但是,只有当你能承受失去的数据(例如,因为它可以在以后重新插入)。如果不是这种情况,则必须阻止连接,直到缓冲区空间再次可用。

另一件事:我会争取一个动态的缓冲区。从合理的默认大小开始,看看它充满了多快。超过一定的速率会增加缓冲区的大小(并且低于某个阈值,您可以再次降低)达到某个最大值。

+0

谢谢,这是一个有用的答案,现在,但不是确切的想要的答案。 – houssam 2013-04-27 00:44:07