methaneのブログ

このブログに乗せているサンプルコードはすべてNYSLです。

<del datetime="2009-03-29T19:59:21+09:00">mod_wsgi の daemonモードは Linux では sendfile を使えない</del>

ソースコード読んでたら気づいた。
LinuxではUnix domain socketに対してsendfileできないから、daemonモードではsendfile使わないらしい。その場合に 'file_wrapper' 自体を提供していたかどうかは忘れた。

environ['wsgi.file_wrapper'] がsendfileを使ってくれることを期待して静的ファイルを送ってるwsgiアプリで、 'wsgi.file_wrapper' not in environ な場合に効率の悪い転送をしていないか確認するべきかもしれない。

modwsgi.c のコメントみてこんな勘違いしたんだけど、いろいろ調査不足だった。ためしに mpm worker と mod_wsgi をビルドして、daemonモードで動かして、 environ['wsgi.file_wrapper'](open('/path/to/file', 'rb')) してみたところ、mmap経由で転送してた。なんじゃそりゃ。

sendfileが使える状況って何なんだろうね…。でも、mmapでも十分高速だからそれでいーじゃん。