tl; dr:我想预测文件复制完成。考虑到开始时间和当前进度,有哪些好的方法?
首先,我知道这根本不是一个简单的问题,预测未来很难做好。对于上下文,我试图预测一个长文件复制的完成。
当前方法:
目前,我正在使用我自己提出的一个相当幼稚的公式:(ETC 代表预计完成时间)
ETC = currTime + elapsedTime * (totalSize - sizeDone) / sizeDone
这是假设要复制的剩余文件将以迄今为止的平均复制速度进行复制,这可能是也可能不是一个现实的假设(此处处理磁带存档)。
- PRO: ETC 会逐渐变化,并且随着过程接近完成而变得越来越准确。
- 缺点:它对意外事件反应不佳,例如文件副本卡住或加速过快。
另一个想法:
我的下一个想法是记录最后n秒(或几分钟,因为这些档案应该需要几个小时)的进度,然后执行以下操作:
ETC = currTime + currAvg * (totalSize - sizeDone)
这与第一种方法相反:
- PRO:如果速度变化很快,ETC 将快速更新以反映当前的事务状态。
- CON:如果速度不一致,ETC 可能会跳动很多。
最后
我想起了我在 uni 学过的控制工程科目,其目标本质上是试图让系统对突然的变化做出快速反应,但又不会不稳定和疯狂。
话虽如此,我能想到的另一个选择是计算上述两者的平均值,也许有某种加权:
- 如果副本具有相当一致的长期平均速度,则对第一种方法的权重更大,即使它在局部跳跃一点。
- 如果复制速度不可预测,并且可能会长时间加速/减速或长时间完全停止等操作,则更加重视第二种方法。
我真正要求的是:
- 我给出的两种方法的任何替代方法。
- 如果以及如何结合几种不同的方法来获得最终预测。