jsaak Asked: 2022-05-28 08:01:43 +0800 CST2022-05-28 08:01:43 +0800 CST 2022-05-28 08:01:43 +0800 CST 根据 strace,getcwd() 怎么可能有时需要半秒钟? 772 据我了解,它甚至不涉及文件系统。那么,这可能是什么原因,使用strace -T: 0.481441 getcwd("/home/user/web/url.com/public_html", 4096) = some number 我正在使用 Linux 4.9.30。 系统有一些奇怪的滞后,我想识别它。cpu,iowait,load,memory,一切似乎都正常 是kvm虚拟机,可能会有所改变。 kvm kernel 2 个回答 Voted Marcus Müller 2022-05-28T08:49:58+08:002022-05-28T08:49:58+08:00 提示:sudo perf record -ag如果您安装了内核调试符号,可能会在这里为您提供有趣的信息,包括花在特定内核功能上的时间。 无论如何, 据我了解,它甚至不涉及文件系统。 这是不正确的。getcwd正如linux内核实现的那样,必须检查您的cwd是否仍然存在,它所在的文件系统是否仍然挂载,并迭代到文件系统的根目录以检查该目录是否仍然可以访问。 这可能会产生副作用,并且会因文件系统以某种方式处于被阻止的状态而延迟。 这里最可能的罪魁祸首是内核中非常频繁的内存回收运行所持有的 RCU 锁。这可能是一个危险的驱动程序问题,但也可能是非常频繁的命名空间创建等问题。 Best Answer jsaak 2022-06-12T22:19:38+08:002022-06-12T22:19:38+08:00 我们发现,这是一个有故障的 SSD。这些是有助于识别它的命令: $ ioping -c 20 /home/jsaak/temp/ min/avg/max/mdev = 1.00 ms / 5.71 ms / 29.3 ms / 7.62 ms $ fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=fiotest --filename=testfio --bs=4k --iodepth=64 --size=32M --readwrite=randrw --rwmixread=75 read : io=24608KB, bw=3136.8KB/s, iops=784, runt= 7845msec write: io=8160.0KB, bw=1040.2KB/s, iops=260, runt= 7845msec
提示:
sudo perf record -ag
如果您安装了内核调试符号,可能会在这里为您提供有趣的信息,包括花在特定内核功能上的时间。无论如何,
这是不正确的。
getcwd
正如linux内核实现的那样,必须检查您的cwd是否仍然存在,它所在的文件系统是否仍然挂载,并迭代到文件系统的根目录以检查该目录是否仍然可以访问。这可能会产生副作用,并且会因文件系统以某种方式处于被阻止的状态而延迟。
这里最可能的罪魁祸首是内核中非常频繁的内存回收运行所持有的 RCU 锁。这可能是一个危险的驱动程序问题,但也可能是非常频繁的命名空间创建等问题。
我们发现,这是一个有故障的 SSD。这些是有助于识别它的命令: