write はユーザプロセスを待たせない?の答え 2

Posted by Gosuke Miyashita Fri, 25 May 2007 11:03:00 GMT

前回のエントリ について、naoya さんから僕の期待以上の素晴らしい回答を頂きました。感謝感謝です。

詳細は上記エントリをじっくり読んで頂きたいのですが、僕の疑問への直接の答えとなるのが、まとめにある

  • write はプロセスを待たせない
  • ただし明示的に sync する場合は待たせる

ですね。「write はプロセスを待たせない」が正しい、というのは naoya さんの解説を読んで納得しました。プロセスが write するということと、それが実際にディスクに書き出されることを、区別しないで考えていたのが僕の敗因ですね。

また、こちらの環境で kjournald や qmail-queue プロセスが待たされていたのは、sync してるから、ということでした。kjournald は確かめていないのですが、qmail-queue のソースの中では確かに fsync() が実行されていました。考えてみれば当然ですよね。ジャーナルのメタデータやメールキューなど、大事なデータを write して sync しないなんてことはあり得ないでしょうし。

なので、id:hirose31さんからのコメント「fsync(2)のせい?」がずばり回答になっていました。ありがとうございます。今度カレーおごらせてください。

というわけで、「write はユーザプロセスを待たせない?」は「待たせない」が答え、ということで完結です。

あと、

ということですが free の結果では、プロセスに割り当てるためのメモリが足りてるかどうかはわかりますが、ページキャッシュ用にメモリが足りてるかどうかはわかりません。

実際そのサーバーが主な仕事で使っているデータは、合計でどのぐらいのサイズでしょう。おそらく、キューに溜まったメールその他 OS 上で必要なデータのサイズをあわせると 800MB を超えるんではないかなあと思います。外してたらごめん。

もおっしゃるとおりですね。プロセスに必要なメモリ容量と、キャッシュに必要なメモリ容量をちゃんと区別していませんでした。

となると、メモリを増やせば書き込み性能が向上する可能性があるのでは、と思ったのですが、今回のケースではおそらく向上することはなさそうです。というのも、iostat の値を見てると、avgqu-sz が 1 日平均でおよそ 5、短時間で見ると 10 とか 20 あるいはそれ以上ということがざらにあります。avgqu-sz はキューに入っていて待ちとなっている I/O リクエストの数なので、常に処理待ちとなっている I/O リクエストが存在する、ということなります。なので、ページキャッシュの容量の問題ではなく、ディスクの性能がボトルネックになっている、と言えそうです。(これも自分の勘違いなら恥ずかしいなー…メモリを簡単に増やせるなら、試してみたいんですけどね。)

naoya さん、詳細な解説ありがとうございました。大変勉強になりました。僕のために時間を割いて長文エントリ書いてくれた、と思うとちょっと萌えました。(べっ、別にあんたのために…、とか言われそうですが。)

Trackbacks

Use the following link to trackback from your own site:
http://blog.mizzy.org/articles/trackback/513

Comments

Leave a response

  1. Avatar
    koba 1 day later:

    初めまして。楽しく読ませていただいています。

    メモリを簡単に増やせるなら、試してみたいんですけどね。

    ふと思ったのですが、メモリを増やすのは大変ですが、減らすのはどうでしょうか。 kernelを起動するときにメモリサイズを明示的に指定することで、実際に搭載しているメモリよりも少ないメモリだけを使うように制限することができます。 これによる性能の悪化の様子を観測すれば、ボトルネックがディスクなのかページキャッシュ容量なのか推測できないでしょうか。あくまで推測ですが。

  2. Avatar
    mizzy 3 days later:

    はじめまして。

    そうですね。メモリ減らしても性能が悪化しないようであればディスクがボトルネック、更に悪化するようならページキャッシュ容量がネック、ということになりそうですね。

    ですが、メモリ増やす以上に、こちらも難しいですねー。本番稼動しているサーバで性能低下させるようなことをしたら、怒られてしまいます。

Comments