我在手册和信息页了解优化水平段的find
命令,我不明白为什么我不能用最积极的优化水平。
我发现的唯一相关的句子是(来自man find
版本4.4.2
):
相反,随着时间的流逝,可以以较低的优化级别启用被证明是可靠,强大和有效的优化。
findutils测试套件在每个优化级别上对find运行所有测试,并确保结果相同。
如果我理解得很好,那是关于find
通过findutils证明正确行为的证明,但是,该测试套件可确保所有优化级别都给出相同的结果。
您错过了这句话:
基于成本的优化器对任何给定测试成功的可能性有固定的认识。
这意味着如果你有高度非典型内容的目录(如大量的命名管道和极少数的“常规”文件),优化实际上可能恶化假设您的查询的性能(在这种情况下-type f
更可能比成功-type p
的时候反之亦然)。在这种情况下,最好不进行手动优化,这只有在-O1
或时才可能实现-O2
。
即使不考虑这个问题,基于成本的优化器的固定成本也很难确定。涉及多个硬件和软件(硬盘,内核,文件系统),它们各自进行一些缓存和优化。结果,很难预测不同操作的成本,即使相对于彼此而言也是如此(例如,我们知道readdir(2)
比便宜stat(2)
,但是我们不知道便宜多少)。这意味着即使假定典型的文件系统内容,也不总是保证基于成本的优化可以产生最佳的优化。较低的优化级别使您可以通过反复试验手动调整查询,这可能更加可靠(如果比较费力的话)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句