straceによると、getcwd()は時々0.5秒かかります。これはどのように可能ですか?

straceによると、getcwd()は時々0.5秒かかります。これはどのように可能ですか?

私が理解している限り、ファイルシステムも含まれていません。それでは、その理由は何ですかstrace -T

     0.481441 getcwd("/home/user/web/url.com/public_html", 4096) = some number

私はLinux 4.9.30を使用しています。

システムに奇妙な遅延が発生したことを確認したいと思います。 CPU、iowait、ロード、メモリなどすべてが大丈夫です。これはkvm仮想マシンですが、何かが変更された可能性があります。

答え1

ヒント:sudo perf record -agカーネルデバッグシンボルがインストールされている場合は、特定のカーネル機能に費やされた時間など、興味深い情報を入手できます。

それでも、

私が理解している限り、ファイルシステムも含まれていません。

これは正確ではありません。getcwdLinuxカーネルによって実装されているように、cwdがまだ存在していること、ファイルシステムがまだマウントされていること、およびファイルシステムのルートを繰り返してディレクトリにまだアクセスできることを確認する必要があります。

ファイルシステムがブロックされているため、副作用や遅延が発生する可能性があります。

ここで最も可能性の高い原因は、カーネルで非常に頻繁に実行されるメモリの回復によって維持されるRCUロックです。これは危険なドライバの問題かもしれませんが、非常に頻繁な名前空間の作成などの問題かもしれません。

答え2

私たちはこれが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

関連情報