文件路径查找中的RCU-walk机制
两年多前我在一家游戏公司时遇到过一个High Sys CPU的问题,当时的排查显示SyS CPU都花在了link_path_walk()函数调用路径上的spin lock上。而导致这个问题的应用也是一个涉及到大量小文件频繁读写的应用。阅读了网上搜到的文档,当时的怀疑是在把系统从CentOS 6(大概是6.7)升级到CentOS 7.6后,文件路径的查找机制由原来的REF-walk切换到了“try RCU-Walk if not then Fall back to REF-walk”的机制,而这个机制和所用软件的版本估计不太兼容(同一软件较新版本没有类似问题),从而导致了大量CPU浪费在了spin lock上。
但由于知识和能力所限,一直无法证实(或证伪)这个猜测。而这个问题没多久我又换到了另外一家公司,便也没机会继续求证。但是对于系统的pathname lookup机制的兴趣却并未因此减退,或许内心深处还是想证实当时的猜测是否合理,同时也是一个学习内核机制的好机会。
一直到现在,还是未能完全理解这个机制。现在把找到的资料汇总一下,时间允许的情况下,我会继续学习,争取把这个坑早日填上。
RCU-walk: faster pathname lookup in Linux: https://lwn.net/Articles/649729/
Pathname lookup in Linux: https://lwn.net/Articles/649115/
RCU Intro – https://www.youtube.com/watch?v=–f3V-JLHt0
Lock-free multiprocessor coordination, Read-Copy-Update: https://www.youtube.com/watch?v=BcAED2f3z0I
RCU in 2019 – https://www.youtube.com/watch?v=bsyXDAouI6E
Kernel doc: pathname lookup : https://www.kernel.org/doc/html/latest/filesystems/path-lookup.html
Linux路径查找过程分析: https://blog.csdn.net/Cui_pc/article/details/106000967
Linux删除文件过程解析: https://cloud.tencent.com/developer/article/1143433
Path walking and name lookup locking: https://www.infradead.org/~mchehab/kernel_docs/filesystems/path-walking.html