为什么我不应该使用查找优化?

时间:2015-10-15 05:17:03

标签: unix optimization find

我在手册和信息页面中阅读了find命令中有关优化级别的部分,我无法理解为什么使用最积极的优化级别。

我找到的唯一相关句子是(来自man find版本4.4.2):

  

相反,随着时间的推移,可以在较低的优化级别上实现可靠,稳健和有效的优化。

     

findutils测试套件在每个优化级别运行find的所有测试,并确保结果相同。

如果我理解得很好,那就是通过findutils证明find的正确行为,但是,这个测试套装确保所有的otimization级别都给出相同的结果。

1 个答案:

答案 0 :(得分:2)

你错过了这句话:

  

基于成本的优化工具可以确定任何特定测试成功的可能性。

这意味着如果你有一个具有高度非典型内容的目录(例如很多命名管道和极少数"普通"文件),优化器实际上可能恶化的性能您的查询(在这种情况下,当反向为真时,假设-type f-type p更有可能成功)。在这种情况下,您最好不要手动优化它,这只能在-O1-O2实现。

即使忽略了这个问题,基于成本的优化器的固定成本也难以实现。涉及多个硬件和软件(硬盘,内核,文件系统),它们都进行了一些缓存和优化。因此,很难预测不同的操作会有多么昂贵,甚至相对于彼此(例如我们知道readdir(2)stat(2)便宜,但我们不知道便宜多少)。这意味着即使假设典型的文件系统内容,也不能始终保证基于成本的优化能够产生最佳的优化。较低的优化级别允许您通过反复试验来手动调整查询,如果更费力,这可能更可靠。