<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<TITLE>Performance Tuning Tips for Digital Unix</TITLE>
</HEAD>
<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
<BODY
 BGCOLOR="#FFFFFF"
 TEXT="#000000"
 LINK="#0000FF"
 VLINK="#000080"
 ALINK="#FF0000"
>
<!--#include virtual="header.html" -->
<H1 ALIGN="CENTER">Performance Tuning Tips for Digital Unix</H1>

Below is a set of newsgroup posts made by an engineer from DEC in
response to queries about how to modify DEC's Digital Unix OS for more
heavily loaded web sites.  Copied with permission.

<HR>

<H2>Update</H2>
From: Jeffrey Mogul &lt;mogul@pa.dec.com&gt;<BR>
Date: Fri, 28 Jun 96 16:07:56 MDT<BR>

<OL>
<LI> The advice given in the README file regarding the
        "tcbhashsize" variable is incorrect.  The largest value
        this should be set to is 1024.  Setting it any higher
        will have the perverse result of disabling the hashing
        mechanism.

<LI>Patch ID OSF350-146 has been superseded by
<BLOCKQUOTE>
                Patch ID OSF350-195 for V3.2C<BR>
                Patch ID OSF360-350195 for V3.2D
</BLOCKQUOTE>
        Patch IDs for V3.2E and V3.2F should be available soon.
        There is no known reason why the Patch ID OSF360-350195
        won't work on these releases, but such use is not officially
        supported by Digital.  This patch kit will not be needed for
        V3.2G when it is released.
</OL>
<HR>


<PRE>
From           mogul@pa.dec.com (Jeffrey Mogul)
Organization   DEC Western Research
Date           30 May 1996 00:50:25 GMT
Newsgroups     <A HREF="news:comp.unix.osf.osf1">comp.unix.osf.osf1</A>
Message-ID     &lt;4oirch$bc8@usenet.pa.dec.com&gt;
Subject        Re: Web Site Performance
References     1



In article &lt;skoogDs54BH.9pF@netcom.com&gt; skoog@netcom.com (Jim Skoog) writes:
&gt;Where are the performance bottlenecks for Alpha AXP running the
&gt;Netscape Commerce Server 1.12 with high volume internet traffic?
&gt;We are evaluating network performance for a variety of Alpha AXP
&gt;runing DEC UNIX 3.2C, which run DEC's seal firewall and behind
&gt;that Alpha 1000 and 2100 webservers.

Our experience (running such Web servers as <A
 HREF="http://altavista.digital.com">altavista.digital.com</A>
and <A HREF="http://www.digital.com"
    >www.digital.com</A>) is that there is one important kernel tuning
knob to adjust in order to get good performance on V3.2C.  You
need to patch the kernel global variable "somaxconn" (use dbx -k
to do this) from its default value of 8 to something much larger.

How much larger?  Well, no larger than 32767 (decimal).  And
probably no less than about 2048, if you have a really high volume
(millions of hits per day), like AltaVista does.

This change allows the system to maintain more than 8 TCP
connections in the SYN_RCVD state for the HTTP server.  (You
can use "netstat -An |grep SYN_RCVD" to see how many such
connections exist at any given instant).

If you don't make this change, you might find that as the load gets
high, some connection attempts take a very long time.  And if a lot
of your clients disconnect from the Internet during the process of
TCP connection establishment (this happens a lot with dialup
users), these "embryonic" connections might tie up your somaxconn
quota of SYN_RCVD-state connections.  Until the kernel times out
these embryonic connections, no other connections will be accepted,
and it will appear as if the server has died.

The default value for somaxconn in Digital UNIX V4.0 will be quite
a bit larger than it has been in previous versions (we inherited
this default from 4.3BSD).

Digital UNIX V4.0 includes some other performance-related changes
that significantly improve its maximum HTTP connection rate.  However,
we've been using V3.2C systems to front-end for altavista.digital.com
with no obvious performance bottlenecks at the millions-of-hits-per-day
level.

We have some Webstone performance results available at
        <A HREF="http://www.digital.com/info/alphaserver/news/webff.html"
        >http://www.digital.com/info/alphaserver/news/webff.html</A>
I'm not sure if these were done using V4.0 or an earlier version
of Digital UNIX, although I suspect they were done using a test
version of V4.0.

-Jeff

<HR>

----------------------------------------------------------------------------

From           mogul@pa.dec.com (Jeffrey Mogul)
Organization   DEC Western Research
Date           31 May 1996 21:01:01 GMT
Newsgroups     <A HREF="news:comp.unix.osf.osf1">comp.unix.osf.osf1</A>
Message-ID     &lt;4onmmd$mmd@usenet.pa.dec.com&gt;
Subject        Digital UNIX V3.2C Internet tuning patch info

----------------------------------------------------------------------------

Something that probably few people are aware of is that Digital
has a patch kit available for Digital UNIX V3.2C that may improve
Internet performance, especially for busy web servers.

This patch kit is one way to increase the value of somaxconn,
which I discussed in a message here a day or two ago.

I've included in this message the revised README file for this
patch kit below.  Note that the original README file in the patch
kit itself may be an earlier version; I'm told that the version
below is the right one.

Sorry, this patch kit is NOT available for other versions of Digital
UNIX.  Most (but not quite all) of these changes also made it into V4.0,
so the description of the various tuning parameters in this README
file might be useful to people running V4.0 systems.

This patch kit does not appear to be available (yet?) from
        <A HREF="http://www.service.digital.com/html/patch_service.html"
        >http://www.service.digital.com/html/patch_service.html</A>
so I guess you'll have to call Digital's Customer Support to get it.

-Jeff

DESCRIPTION: Digital UNIX Network tuning patch

             Patch ID: OSF350-146

             SUPERSEDED PATCHES: OSF350-151, OSF350-158

        This set of files improves the performance of the network
        subsystem on a system being used as a web server.  There are
        additional tunable parameters included here, to be used
        cautiously by an informed system administrator.

TUNING

        To tune the web server, the number of simultaneous socket
        connection requests are limited by:

        somaxconn               Sets the maximum number of pending requests
                                allowed to wait on a listening socket.  The
                                default value in Digital UNIX V3.2 is 8.
                                This patch kit increases the default to 1024,
                                which matches the value in Digital UNIX V4.0.

        sominconn               Sets the minimum number of pending connections
                                allowed on a listening socket.  When a user
                                process calls listen with a backlog less
                                than sominconn, the backlog will be set to
                                sominconn.  sominconn overrides somaxconn.
                                The default value is 1.

        The effectiveness of tuning these parameters can be monitored by
        the sobacklog variables available in the kernel:

        sobacklog_hiwat         Tracks the maximum pending requests to any
                                socket.  The initial value is 0.

        sobacklog_drops         Tracks the number of drops exceeding the
                                socket set backlog limit.  The initial
                                value is 0.

        somaxconn_drops         Tracks the number of drops exceeding the
                                somaxconn limit.  When sominconn is larger
                                than somaxconn, tracks the number of drops
                                exceeding sominconn.  The initial value is 0.

        TCP timer parameters also affect performance. Tuning the following
        require some knowledge of the characteristics of the network.

        tcp_msl                 Sets the tcp maximum segment lifetime.
                                This is the maximum lifetime in half
                                seconds that a packet can be in transit
                                on the network.  This value, when doubled,
                                is the length of time a connection remains
                                in the TIME_WAIT state after a incoming
                                close request is processed.  The unit is
                                specified in 1/2 seconds, the initial
                                value is 60.

        tcp_rexmit_interval_min
                                Sets the minimum TCP retransmit interval.
                                For some WAN networks the default value may
                                be too short, causing unnecessary duplicate
                                packets to be sent.  The unit is specified
                                in 1/2 seconds, the initial value is 1.

        tcp_keepinit            This is the amount of time a partially
                                established connection will sit on the listen
                                queue before timing out (e.g. if a client
                                sends a SYN but never answers our SYN/ACK).
                                Partially established connections tie up slots
                                on the listen queue.  If the queue starts to
                                fill with connections in SYN_RCVD state,
                                tcp_keepinit can be decreased to make those
                                partial connects time out sooner.  This should
                                be used with caution, since there might be
                                legitimate clients that are taking a while
                                to respond to SYN/ACK.  The unit is specified
                                in 1/2 seconds, the default value is 150
                                (ie. 75 seconds).

        The hashlist size for the TCP inpcb lookup table is regulated by:

        tcbhashsize             The number of hash buckets used for the
                                TCP connection table used in the kernel.
                                The initial value is 32.  For best results,
                                should be specified as a power of 2.  For
                                busy Web servers, set this to 2048 or more.

        The hashlist size for the interface alias table is regulated by:

        inifaddr_hsize          The number of hash buckets used for the
                                interface alias table used in the kernel.
                                The initial value is 32.  For best results,
                                should be specified as a power of 2.

        ipport_userreserved     The maximum number of concurrent non-reserved,
                                dynamically allocated ports.  Default range
                                is 1025-5000.  The maximum value is 65535.
                                This limits the numer of times you can
                                simultaneously telnet or ftp out to connect
                                to other systems.

        tcpnodelack             Don't delay acknowledging TCP data; this
                                can sometimes improve performance of locally
                                run CAD packages.  Default is value is 0,
                                the enabled value is 1.

                           Digital UNIX version:

                                  V3.2C
Feature                    V3.2C  patch  V4.0
=======                    =====  =====  ====
somaxconn                   X      X      X
sominconn                   -      X      X
sobacklog_hiwat             -      X      -
sobacklog_drops             -      X      -
somaxconn_drops             -      X      -
tcpnodelack                 X      X      X
tcp_keepidle                X      X      X
tcp_keepintvl               X      X      X
tcp_keepcnt                 -      X      X
tcp_keepinit                -      X      X
TCP keepalive per-socket    -      -      X
tcp_msl                     -      X      -
tcp_rexmit_interval_min     -      X      -
TCP inpcb hashing           -      X      X
tcbhashsize                 -      X      X
interface alias hashing     -      X      X
inifaddr_hsize              -      X      X
ipport_userreserved         -      X      -
sysconfig -q inet           -      -      X
sysconfig -q socket         -      -      X

</PRE>
<!--#include virtual="footer.html" -->
</BODY>
</HTML>
