鉴于一个集中读/写文件系统的过程,我们的目标是衡量过程中调用的查找次数?理想情况下,我们应该测量磁盘设备中的实际搜索操作。在libc / syscall中测量lseek就足够了。工作负载过程运行C / C ++程序。
是否有可行的方法进行测量?
答案 0 :(得分:0)
要测量对lseek
或类似的调用,可以使用strace命令(例如$ strace myprog
- 并可能将strace的输出重定向到某个文件,这样您就可以计算给定的操作数类型)。或者,您可以通过编写包装器函数(或包装器类)来对代码进行检测,这些函数会对包装器内的调用进行计数,但是为#34;所有事情做好工作是很有意义的。 / p>
现代硬盘中的实际头部移动并不容易(甚至可能)计数,因为这种情况发生在驱动器内部。在遥远的过去,硬盘接口接受了物理扇区和跟踪的请求,所以至少在理论上你可以找出轨道数量发生重大变化的时候。目前,它只是扇区号0 ..所请求的扇区总数,每个磁道的扇区数通常是可变的(更多扇区更远)。当然,除了明显的因素,这种情况发生在操作系统驱动程序的深层,当然,大多数人并不真的想要检测硬盘驱动程序 - 改变硬盘驱动程序是完全可靠的方法。弄乱你的磁盘...只有你有(至少)两台机器,其中一台你尝试修改过的驱动程序,一台是你的开发机器。在那里,完成了[虽然不是为了计算搜索 - 我需要修改硬盘驱动程序,使其在我所拥有的古怪系统上工作] ...;)