本文主要是介绍5.28 BCC工具之readahead.py解读,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一,工具简介
操作系统的读预取机制通过预先读取一些页面来优化顺序操作,从而避免更昂贵的文件系统操作。readahead工具在给定的负载下显示系统上读预取缓存的性能,以调查任何缓存问题。它显示了缓存中未使用页面的数量,并打印了一个直方图,显示它们在缓存中停留的时间。
那readahead工具在什么应用场景下使用呢?
假设你正在开发一个React Native应用程序,该程序在重新编码本地存储中的视频时会进行大量读取。通常,这样的应用程序会是多层的,并具有过渡性的库依赖关系。实际的读取操作可能由一些未知的本地库执行,这些库可能会或可能不会向操作系统提供提示,例如madvise(p, LEN, MADV_SEQUENTIAL)。如果在此类应用程序中观察到高IOPS,运行readahead可能会更快地确定问题所在,因为开发人员会深入研究可能导致这种情况的原因。
注意!
此工具在以下内核函数上使用Kprobes,因此需要了解关于Kprobes使用的注意事项:
__do_page_cache_readahead()/do_page_cache_ra()(在内核版本5.10(包括)之后,__do_page_cache_readahead被重命名为do_page_cache_ra)
__page_cache_alloc()
mark_page_accessed()
由于该工具使用Kprobes,因此根据你的Linux内核的编译情况,这些函数可能会被内联,因此无法使用Kprobes。要查看你是否具有可用的函数,请检查vmlinux源代码和二进制文件,以确认是否进行了内联。你还可以在使用此工具之前检查主机上的/proc/kallsyms,并验证目标函数是否存在。
这篇关于5.28 BCC工具之readahead.py解读的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!