测量搜索次数

Posted

技术标签:

【中文标题】测量搜索次数【英文标题】:Measure the number of seeks 【发布时间】:2018-10-22 23:53:20 【问题描述】:

给定一个密集读/写文件系统的进程,我们的目标是测量进程中调用的搜索次数?理想情况下,我们应该测量磁盘设备中的实际寻道操作。在 libc/syscall 中测量 lseek 就足够了。工作负载进程运行 C/C++ 程序。

是否有可行的方法进行测量?

【问题讨论】:

喜欢strace? 现在不支持执行逻辑 I/O 和智能访问的驱动器。 【参考方案1】:

要测量对lseek 或类似的调用,您可以使用 strace 命令(例如$ strace myprog - 并且可能将输出从 strace 重定向到某个文件,以便您可以计算给定类型的操作数)。或者,您可以通过编写一个计算包装器内部调用的包装器函数(或包装器类)来检测您的代码,但要使“一切”都能正常工作是一项相当大的工作。

现代硬盘驱动器中的实际磁头移动不容易(甚至不可能)计算,因为这发生在驱动器内部。在遥远的过去,硬盘接口接受物理扇区和磁道的请求,所以至少在理论上,你可以找出磁道号何时发生较大变化。这些天来,它只是请求扇区号 0 .. 扇区总数,并且每个磁道的扇区数通常是可变的(更多的扇区更远)。当然,除了这发生在操作系统驱动程序深处的明显因素之外,大多数人并不真的想要检测硬盘驱动程序 - 更改硬盘驱动程序是完全搞砸的一种相当肯定的方式你的磁盘......只有当你有(至少)两台机器时才这样做,其中一台是你尝试修改的驱动程序,另一台是你的开发机器。去过那里,做到了[虽然不是为了计算搜索次数-我需要修改硬盘驱动程序以使其在我拥有的古怪系统上工作]...;)

【讨论】:

以上是关于测量搜索次数的主要内容,如果未能解决你的问题,请参考以下文章

线性搜索优化 - 减少计算次数

百度地图怎么测量两地的直线距离和行车距离

如何用手机卫星定位测量地亩面积

计算二叉搜索树中项目的出现次数

如何在mongodb聚合中查找搜索字符串的出现次数?

搜索排序数组中出现次数超过一半的元素所需的最小比较