|
I made a new MTA performance shootout to see how fast MTAs deliver in a LAN. The machines I used are shown below.
This is the machine that did the actual MTA load testing. /var/log/maillog was disabled in syslog.conf.
| CPU: | AMD K6-2, 300 MHz |
|---|---|
| Cache: | 1 MB, 100 MHz |
| RAM: | 128 MB SDRAM, 100 MHz, CL 2 |
| SCSI: | Tekram DC-390 (AMD Am53C974 "PCscsi II") |
| Drive: | Micropolis 4345WS (UWSCSI, 7200/min, 4.3 GB, Write Cache off) |
| Net: | 3C900 Combo |
| OS: | FreeBSD 4.3-RELEASE-p14 |
|---|---|
| MTA #1: | Sendmail 8.11.3 as part of FreeBSD 4.3-RELEASE-p14 Sendmail 8.11.6 as part of FreeBSD 4.4-RC |
| MTA #2: | Exim 3.33, built from port, configured for syslog without timestamp. |
| MTA #3: | Qmail 1.03, built from port |
| MTA #4: | Postfix 20010525, built from port |
| OS: | FreeBSD 4.4.RC |
|---|---|
| MTA #1: | Qmail 1.03, built from port |
| MTA #2: | Postfix 20010808_1, built from port with my qmqp fixes (see below for link to patch) |
syslog did not log mail locally, but just across the network to the helper machine that writes its mail log asynchronously.
In the qmail test cases, I ran qmail-smtpd or qmail-qmqpd from tcpserver as described in /var/qmail/doc/FAQ, I merely adjusted user and group ids as necessary. Inetd would have deactivated qmail-smtpd after a while.
In the Postfix QMQP test case, I enabled QMQP as described in QMQP_README.
I ran pidentd with -w -t120 rather than inetd's internal identd to prevent it from being disabled by inetd.
I recompiled my kernel to allow for more simultaneous connections, FreeBSD would run out of buffer space otherwise with several hundred sockets in TIME_WAIT state.
All tests were on the same /var partition with softupdates. If listed as "no softupdates", I unmounted the partition, switched off softupdates and remounted it.
This box provided DNS, is the loghost, and sinked and discarded the incoming test mail. It ran Wietse Venema's smtp-sink that comes with Postfix with a listen backlog of 1,000.
| CPU: | AMD Duron, 700 MHz |
|---|---|
| RAM: | 320 MB SDRAM, 100 MHz, CL 2 |
| IDE: | VIA KT133 South Bridge (UDMA 4 "UATA/66") |
| Drive: | Western Digital AC420400D (5400/min, ~ 20 GB, Write Cache off) |
| Net: | 3C900 Combo |
| OS: | hacked-up SuSE Linux 7.0, Linux Kernel 2.4.9 with ext3fs 0.9.6 |
|---|---|
| MTA: | smtp-sink -c 25 1,000 |
| DNS: | djbdns 1.05 providing all relevant DNS information to the other machine |
I ran smtp-source to inject mail addressed to the helper machine to localhost.
| software/figure | time to inject [s] | time to deliver [s] | sync writes [1] | async writes [1] | throughput [mail/s] | notes |
|---|---|---|---|---|---|---|
| Injecting 1,000 mails to 1 recipient with 20 threads, 50 mails per connection | ||||||
| unsafe exim | 56 | 262 | 6,621 | 6,785 | 3.8 | manual queue run (1) unsafe (2) |
| postfix | 49 | 62 | 1,898 | 4,110 | 16.1 | - |
| qmail | 138 | 310 | 14,138 | 16,420 | 3.2 | no softupdates |
| sendmail | 136 | 136 | 8,172 | 7,993 | 7.3 | no softupdates FreeBSD 4.4-RC |
| sendmail | 99 | 99 | 5,894 | 3,121 | 10.1 | - FreeBSD 4.4-RC |
| sendmail | 97 | 97 | 5,865 | 2,993 | 10.3 | - |
| remote smtp-sink | 5.4 | - | - | - | 185 | - |
| Injecting 1,000 mails to 1 recipient with 20 threads, 1 mail per connection, unless stated otherwise | ||||||
| unsafe exim | 373 | 373 | 4,647 | 4,457 | 2.7 | unsafe (2) |
| unsafe exim | 107 | 107 | 5,284 | 4,318 | 9.3 | injecting with 5 threads unsafe (2) |
| postfix | 69 | 100 | 9,852 | 1,545 | 10.0 | sync |
| postfix | 72 | 122 | 5,024 | 2,896 | 8.2 | no softupdates |
| postfix | 51 | 65 | 2,017 | 4,212 | 15.3 | - |
| qmail | 135 | 255 | 24,422 | 1,018 | 3.9 | sync |
| qmail | 136 | 308 | 14,136 | 16,422 | 3.2 | no softupdates |
| unsafe qmail | 68 | 154 | 7,851 | 7,695 | 6.5 | softupdates unsafe (2) |
| sendmail | 188 | 187 | 11,062 | 366 | 5.3 | sync |
| sendmail | 161 | 160 | 8,125 | 8,013 | 6.3 | no softupdates |
| sendmail | 161 | 161 | 5,896 | 2,937 | 6.2 | - questionable, times not verified on FreeBSD 4.4-RC |
| sendmail | 135 | 135 | 8,088 | 8,012 | 7.4 | no softupdates FreeBSD 4.4-RC |
| sendmail | 117 | 117 | 6,044 | 3,407 | 8.5 | - FreeBSD 4.4-RC |
| remote smtp-sink | 6.6 | - | - | - | 152 | - |
| remote smtp-sink | 8.4 | - | - | - | 119 | injecting with 5 threads |
| software/figure | time to inject [s] | time to deliver [s] | sync writes [1] | async writes [1] | throughput [mail/s] | notes |
| Injecting 100 mails to 10 recipients with 20 threads and connection caching | ||||||
| unsafe exim | 10 | 11 | 457 | 401 | 91 | unsafe (2) |
| postfix | 6 | 8 | 209 | 414 | 125 | - |
| qmail | 15 | 41 | 1,456 | 1,669 | 24 | no softupdates |
| sendmail | 18 | 18 | 963 | 464 | 56 | - |
| remote smtp-sink | 0.9 | - | - | - | 1111 | - |
Notes:
| software/figure | time to inject [s] | time to deliver [s] | sync writes [1] | async writes [1] | throughput [mail/s] | notes |
|---|---|---|---|---|---|---|
| Injecting 500 mails to 1 recipient with 1 thread, 1 mail per connection | ||||||
| postfix | 41 | 41 | 1,011 | 2,331 | 12.2 | softupdates |
| qmail | 143 | 153 | 7,000 | 8,187 | 3.3 | no softupdates |
| Injecting 500 mails to 1 recipient with 5 threads, 1 mail per connection | ||||||
| postfix | 28 | 32 | 1,093 | 2,119 | 15.6 | soft updates |
| postfix | 53 | 61 | 2,500 | 3,642 | 8.2 | no softupdates |
| postfix | 77 | 86 | 6,504 | 3,135 | 5.8 | sync |
| qmail | 78 | 151 | 7,040 | 8,199 | 3.3 | no softupdates |
| qmail | 111 | 193 | 14,047 | 6,272 | 2.6 | sync |
| Injecting 500 mails to 1 recipient with 20 threads, 1 mail per connection | ||||||
| postfix | 21 | 29 | 964 | 1,442 | 17.2 | softupdates |
| qmail | 66 | 151 | 7,044 | 8,217 | 3.3 | no softupdates |
| Injecting 100 mails to 10 recipients each with 5 threads, 1 mail per connection | ||||||
| postfix | 6 | 6 | 206 | 238 | 167 | softupdates |
| qmail | 17 | 40 | 1,408 | 1,669 | 25 | no softupdates |
2002-09-16: Came across André Oppermann's qmail-ldap and his and Claudio Jeker's EXTTODO patches and added links.
2001-11-29: Russell Nelson asked why only qmail was supposed to be unreliable on softupdates, so I checked again and figured Exim was also unreliable ("unsafe") on softupdates file systems. Tagged as "unsafe", so the figures shown for exim are probably better than those for production systems.
2001-09-01: I found an updated Postfix port for FreeBSD, and figured it didn't include qmqp. I fixed that, filed a problem report with my diff, and made a postfix-vs-qmail qmqpd shootout. I also fixed the W3C CSS logo to not use style-sheets but attributes for its size, this prevents Netscape 4.x from malformatting the page.
2001-08-31: I got a report from Claus Aßmann that my figures were low for softupdates and without connection caching, so I did the test again for sendmail with 20 threads injecting, this time with sendmail 8.11.6 on FreeBSD 4.4-RC. The figures are: softupdates: 117/99 s without/with connection caching. No softupdates: 135/136 s without/with connection caching.
What I cannot explain is that with softupdates, connection caching on the client side seems to help performance, while it makes no difference without softupdates.
| Matthias Andree Last modified: Mon Sep 16 12:17:45 CEST 2001 |