With Postfix 2.5 I introdoced stress-dependent behavior in the SMTP
server, but this was left turned off by default.

I'm thinking of turning on some stress-dependent behavior by default
in Postfix 2.6, to make Postfix look better in stupid benchmarks
(just like in_flow_delay and smtpd_client_connection_count_limit).

While I am reluctant to make the default SMTP server timeouts
drastically shorter, I am inclined to ship Postfix 2.6 with settings
that will be relatively safe under conditions of overload.

Something that will drastically cut the time per session:

smtpd_timeout = ${stress?10s}${stress:300s}
smtpd_hard_error_limit = ${stress?2}${stress:20}

This would affect clients that cannot send SMTP commands within
10s from each other (i.e. round-trip time >5s) or cannot send blocks
of message content within 10s from each other (i.e. an effective
bit rate of < 1500 bits/second).

Keep in mind that we're doing this only when the server is saturated.
By not receiving very slow mail, we create more opportunities to
receive other mail that arrives in less time. This assumes that
the condition is temporary, and that some bit rates will stay above
1500 bps.

Another issue is smtpd_timeout granularity. Currently it is the
same for all SMTP commands, but some suggested it makes sense to
distinguish between some of the SMTP stages.

Suppose we have two settings, one for the DATA stage where we have
valid recipients, and one for the non-DATA stages.

Then, the default settings would look like this:

smtpd_timeout = ${stress?10s}${stress:300s}
smtpd_data_timeout = $smtpd_timeout
$smtpd_non_data_timeout = $smtpd_timeout
smtpd_hard_error_limit = ${stress?1}${stress:20}

I would not make different stress dependencies for _data_timeout
and _non_data_timeout, but people would be welcome to use the extra
rope and shoot themselves into the foot.

        Wietse

Reply via email to