Things affecting on ZMailer performance
Things affecting on ZMailer performance
Some notes on things affecting ZMailer performance
These tidbits have been learned at various systems, when
trying to get an undersized machine to do amazing feats.
- NFS:
- If you for some obscure reason are mounting MAILBOXes
and/or POSTOFFICE hierarchies via NFS, do it with
options to disable various attribute caches:
actimeo=0
noac
The best advice is to not to mount anything over NFS,
but some people can't be persuaded...
Lots of things are done where file attributes play important
role, and they are extremely important to be in sync!
(Sure, the 'noac' slows down the system, but avoids errors
caused by bad caches..)
If you are mounting people's home directories ( .forward et.al. )
via NFS, consider the same rule!
- Router:
-
- DNS, and other database lookups (primarily the DNS!)
- If possible, do not do DNS lookups at the router at all.
Handle the DNS queries at the SMTP transporters
- Use of keyed databased (ndbm, gdbm) is way faster,
than unordered linear search, or even ordered binary
search as is used at some databases (aliases, for example.)
For small databases, an incore database is faster,
especially if its altered rarely. (Like a list of the
top-level domains)
- DNS server must have large caches, and be able to cache
negative answers / timeouts too!
- System speed on directory access (filesystem speed)
(scanning the directory, and doing stat() is SLOW
on some platforms! Especially if trying to have files
sorted into time-order before processing them...)
- Scheduler:
-
- System speed on directory access (filesystem speed)
(scanning the directory, and doing stat() is SLOW
on some platforms! ==> Can cause very slow startup
if queue is long..)
- Usage of hashed spool-areas ($POSTOFFICE/queue/X/file,
$POSTOFFICE/transport/X/file) shrinks the average size
of the directory, and thus access fill be faster
- Speed to do inter-process communication via PIPEs
( on platforms that can do it: socketpair() )
- Speed of filesystem access for message control file
parsing (on some systems apparenly equally "costly"
as simply doing a stat() on the file -- amazing ..
.. that is, the stat() is amazingly costly...)
- Speed of scheduler's mux() scanning thru all
transporter's reporting channels
(This can be alleviated by use of ``overfeed=nnn''
configuration option, and thus feeding the pipe
full of jobs..)
- Transporters:
-
- Speed to do IPC via PIPEs
- System speed on opening files
- DNS lookup for SMTP connection setups
- Remote IPC over TCP/IP
- Local filesystem access speed (read spool files,
write mailboxes..)
- Idleness in between scheduler passes at our report
channel, and before the scheduler feeds more jobs
96-Aug-09/mea@nic.funet.fi