6.5 Use Multiple Queues

Operations that cause disk heads to move, such as file creation and removal, are called IOPs. Under Unix, inodes contain information about files, such as permissions, size, and lists of data blocks. A file itself (its data) is rarely, if ever, located on the same track as its inode. To write and sync a file to disk causes data blocks to be allocated and written to, the file's inode to be written, the directory containing the file's name to be written, and the inode for the directory to be written. Deleting the file causes just as many updates to the disk.

Hard disks are typically limited to about 120 IOPs per second. When sendmail successfully delivers a message, it can consume from 10 to 13 IOPs per message. One way to increase the IOPs per second is to install a RAM disk (no head to move). Such solid-state disks often support upward of 14,000 IOPs per second.

Another way to increase the IOPs per second is to spread the queue over many disks and many disk controllers. This is done by using sendmail's built-in support for multiple-queue directories (Section 11.3).

Consider, for example, a major mail-sending machine that has six disks available for use as sendmail's queues:

/queues      not mounted, part of the root filesystem
/queues/q.1  not mounted, part of the root filesystem
/queues/q.1/qf   first disk
/queues/q.1/df   fourth disk
/queues/q.1/xf   mounted as a tmpfs or mfs filesystem
/queues/q.2  not mounted, part of the root filesystem
/queues/q.2/qf   second disk
/queues/q.2/df   fourth disk
/queues/q.2/xf   mounted as a tmpfs or mfs filesystem
/queues/q.3  not mounted, part of the root filesystem
/queues/q.3/qf   third disk
/queues/q.3/df   fourth disk
/queues/q.3/xf   mounted as a tmpfs or mfs filesystem

Note two special characteristics about this arrangement. First, the actual queue directories q.1, q.2, and q.3 need not be mount points for disks. That is because, beginning with V8.10 sendmail, the separate parts that compose an email message can be placed in separate subdirectories corresponding to those parts (specifically, the qf, df, and xf subdirectories).

Second, note that qf files are rewritten each time delivery is tried, whereas df files are written once and only read again during actual delivery. Consequently all the df files could be located on a single disk, with the qf files spread over multiple disks. If you choose this arrangement, you should ensure that the df disk is large enough to hold many very large files.

Third, note that the xf subdirectories are mounted as memory-based filesystems. Under Solaris, for example, they can be mounted as tmpfs filesystems. Under Free BSD they can be mounted as mfs filesystems. In either event, the xf subdirectories are volatile and any files in them will vanish if the machine reboots. This does not matter, however, because the xf files are re-created with each delivery attempt.

Finally, note that symbolic links are legal in the queue directory, so a common area for mounts is not really necessary. You could, for example, change all the df mount points onto symbolic links to a single disk mounted elsewhere (such as /disks/df). Or, at sites that mount all disks generically, all the directories could be symbolic links to that farm of generic disks.

With this multidisk arrangement, we have increased the IOP capacity of the queueing disk system by a factor of six. Even with fast/wide SCSI, six disks are probably the maximum you would want to place on a single controller.

The configuration mc file line that supports this setup looks like this:


There is no need to define the qf, df, and xf subdirectories in the configuration file. The sendmail program automatically detects and uses them if they exist.

By using many disks for the queue, you reduce the likelihood that any given disk will ever get too full of messages. Because any queue will remain small, small disks can be used. Many small disks means many cheap disks. Although multiple queues over multiple disks can increase the overall number of IOPs available, there will come a point where the high expense of solid-state disks buys more improvement than the equivalent number of cheap disks and controllers.

    Part I: Build and Install
    Part II: Administration
    Part III: The Configuration File