qmail送信パフォーマンス改善のテスト

前回のテストの中で、もうひとつ実験をしていました。
それは、qmailの配信速度改善です。

実験方法は単純で、concurrencylocal の数を 倍にすると、単純にローカル配送速度は倍になるのか?というものでした。

前回のテストの1回目(syslogの時)の concurrencylocal は 120 です。それを、240 にしたら配送時間は倍になるのでしょうか。qmail のインストール時に big-concurrency.patch を適用していますので、120以上に上げることができます。

同じ、syslogの状態のときに(multilogになる前に)、やってみました。

送信もしますが、受信もしますので、tcpserverの同時起動可能プロセス数(-c)は 480 に上げます。(ちなみに変更前は 240 です)


  • 設定の確認
# /var/qmail/bin/qmail-showctl | grep concurrencylocal
concurrencylocal: Local concurrency is 240.
# ps aux | grep tcpserver
qmaild   14158  0.0  0.0   1716   512 ttyp0    S    17:09   0:00 tcpserver -qv -l0 -HR -u 503 -g 502 -c 480 -x /etc/tcp.smtp.cdb 0 smtp qmail-smtpd dev_pv_web /bin/checkpassword /bin/true

では、同じように、rootからadminへ1万通送信してみましょう。何分かかるでしょうか。単純計算すると10分の半分 5 分程度で終わるような気がします。


実験結果

# sh mass_mail_test.sh
start : Tue Apr 21 17:13:40 JST 2009
end : Tue Apr 21 17:26:17 JST 2009

なんと、12分以上かかりました。送信処理の最大並列数を倍にしたのに、倍にする前より多くの時間がかかってしまいました。なぜでしょう。まず、sarの結果をみてみましょう。
ちなみに、OS自体のプロセス数上限は、 6144 ですので、問題ないと思います。

# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
max nice                        (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 6144
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
max rt priority                 (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 6144
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited


時間は、17:13:40〜17:26:17の部分です。(16:45前後のものはconcurrencylocal は 120のときのものです)







I/O負荷やプロセス数が下がっています・・・。送信処理の最大並列数を上げると、プロセス数は上がるような気はするが・・・なぜだ・・・・。


つっこみ大歓迎です><