测量搜索次数
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 .. 扇区总数,并且每个磁道的扇区数通常是可变的(更多的扇区更远)。当然,除了这发生在操作系统驱动程序深处的明显因素之外,大多数人并不真的想要检测硬盘驱动程序 - 更改硬盘驱动程序是完全搞砸的一种相当肯定的方式你的磁盘......只有当你有(至少)两台机器时才这样做,其中一台是你尝试修改的驱动程序,另一台是你的开发机器。去过那里,做到了[虽然不是为了计算搜索次数-我需要修改硬盘驱动程序以使其在我拥有的古怪系统上工作]...;)
【讨论】:
以上是关于测量搜索次数的主要内容,如果未能解决你的问题,请参考以下文章