我想测量Linux上C程序中文件I / O的执行时间。我发现了很多有关测量时间的问题和答案。
但是,我认为任何答案都无法达到我的目的。
与我的情况有关的实时时钟功能不正确因为我想排除其他进程消耗的时间。(例如gettimeofday
,clock_gettime(CLOCK_MONOTONIC_RAW)
)
在我看来,与CPU时间相关的功能也不正确,因为我想包括磁盘I / O的等待时间。(例如getrusage
,clock
,clock_gettime(CLOCK_PROCESS_CPUTIME_ID)
)
有什么建议吗?
同时阅读time(7)和page cache,然后读一本有关operating systems的教科书。
您的问题没有道理。磁盘I / O或file systems是整个计算机的活动,而不仅仅是由特定的process执行某些syscalls(2)来完成。
特别是内核将处理page faults(在处理器内部的MMU的帮助下,并且给定的页面可以由不同的进程多次进行mmap(2) -ed。
Drepper的论文How to write shared libraries和dynamic linker(请参阅ld.so(8) ...是相关的。
[实际上,在2020年,大多数ELF可执行文件都是动态链接的(例如,链接到libc.so
)。参见ldd(1)和pmap(1)。