詳解システムパフォーマンス 8章ファイルシステム メモ

今回も章末の練習問題をみながら、みんなで議論をしていた。

アプリケーションの I/O パフォーマンスを解析するときには、ファイルシステムのパフォーマ ンスの方がディスクパフォーマンスよりも大きな問題になる。ファイルシステムは、アプリケー ションがディスクレベル(またはリモートシステムレベル)のレイテンシの影響を被らないように するために、キャッシング、バッファリング、非同期 I/O を使っている。それにもかかわらず、 パフォーマンス分析やツールセットは、伝統的にディスクパフォーマンスに重点を置いてきた。

Brendan Gregg,西脇靖紘,長尾高弘「詳解システム・パフォーマンス」, オライリージャパン p.337

この章では、アプリケーションからディスクまでのスタックのうち、ファイルシステムの層でなにが起きているかを大まかなモデルにしたがって説明してくれている。この章まで読むと、例えば read(2) vs mmap(2) の迷信 に書かれた内容がだいたい理解できるようになる。

議論していた内容は、主に以下のような内容。

メモ

チューニングの節で、前回の 詳解システムパフォーマンス 7章「メモリ」メモ - ゆううきメモ でも書いたposix_fadvise(2)の話があり、以下のようにcatコマンドをstraceすると、catのファイルアクセスパターンはシーケンシャルであることから、POSIX_FADV_SEQUENTIALにより先読みページ数をデフォルトの2倍にすることで最適化されているといった話をした。

|| [y_uuki@yuuki~]$ sudo strace cat /var/log/messages 2>&1 | grep -5 fadvise brk(0) = 0xc14000 brk(0xc35000) = 0xc35000 fstat(1, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0 open("/var/log/messages", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0640, st_size=10088, ...}) = 0 fadvise64(3, 0, 0, POSIX_FADV_SEQUENTIAL) = 0 mmap(NULL, 139264, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fc24d24b000 read(3, "Oct 29 06:25:11 yuuki rsysl"..., 131072) = 10088 ||<

詳解 システム・パフォーマンス

詳解 システム・パフォーマンス