Next Previous Contents

10. The Cache Manager

Squid's cache manager interface can provide you with some helpful statistics as well, which you can access either with the cachemgr.cgi program and a browser, or with the client program on the command line.

10.1 Server List

The server list (a slight misnomer) will report statistics about your neighbour caches. To view this information from the command line, use:

        client cache_object://localhost/server_list | less
A subset of sample output is shown below.
        Parent     : uc.cache.nlanr.net/3128/3130
        Status     : Up
        AVG RTT    : 31 msec
        ACK DEFICIT:        0
        PINGS SENT :        0
        PINGS ACKED:    36133   0%
        FETCHES    :     9765  27%
        IGNORED    :     9193  25%
        Histogram of PINGS ACKED:
                ICP_HIT :     2421   7%
                ICP_MISS :    33712  93%
        Last failed connect() at: 18/Aug/1997:01:50:56 -0700
        DOMAIN LIST: com edu net org gov mil us 
        
        Parent     : sv.cache.nlanr.net/3128/3130
        Status     : Up
        AVG RTT    : 69 msec
        ACK DEFICIT:        0
        PINGS SENT :     1007
        PINGS ACKED:      964  96%
        FETCHES    :      398  41%
        IGNORED    :      322  33%
        Histogram of PINGS ACKED:
                ICP_HIT :       68   7%
                ICP_MISS :      896  93%
        DOMAIN LIST: au nz aq jp kr sg vn th tw lk

Squid will let you know if it thinks the neighbour is currently up or down. If a TCP connection attempt fails, Squid shows the time of the most recent failure near the bottom of this display. An important value to watch is the Average RTT, which is not simply a ping-based network RTT, but rather the average time taken to send an ICP query and receive an ICP reply. In other words, this value includes the time required by the peer to process the ICP message.

Ack Deficit is the number of consecutive unacknowledged ICP queries. If this number reaches 20, Squid will mark the peer as down. Pings Sent is the number of ICP queries sent to the peer, and Pings Acked is the number of replies received. Note that we are using multicast here, and Pings Sent only counts queries sent directly (via unicast) to the peer. Fetches is the number of HTTP requests forwarded to that neighbour. Ignored is the number of ICP replies that Squid has ignored, most likely because they arrived after Squid had already forwarded the request.

The histogram depicts the breakdown of the (non-ignored) ICP replies, with the percent based on the Pings Acked value, and not on the Pings Sent value.

Finally we display the domain list for each peer, as specified with the cache_host_domain directives. Note that we do not display the cache_host_acl configuration.

10.2 Client List

The client list tells you about your cache clients, including other caches using yours as a parent or sibling, although they are not identified as such because there is no easy way to identify that the request came from a browser versus another cache. This information is particularly useful if you have disabled ICP query logging. To view the client list, select the ``Client List'' menu option in the CGI program, or issue the following Unix command:

        client cache_object://localhost/client_list | less
Some sample output is shown below. For each client IP address, Squid counts the number of requests for each cache result code, and displays their percentages.

        Address: 205.17.46.36
        Name: 205.17.46.36
        ICP Requests 293995
                UDP_HIT                11879   4%
                UDP_HIT_OBJ            14513   5%
                UDP_MISS              267515  91%
                UDP_INVALID               39   0%
                UDP_MISS_NOFETCH          49   0%
        HTTP Requests 40068
                TCP_HIT                  798   2%
                TCP_MISS               30904  77%
                TCP_REFRESH_HIT         1894   5%
                TCP_REF_FAIL_HIT          36   0%
                TCP_REFRESH_MISS        1646   4%
                TCP_CLIENT_REFRESH      3116   8%
                TCP_IMS_HIT              818   2%
                ERR_READ_TIMEOUT          16   0%
                ERR_READ_ERROR            35   0%
                ERR_CLIENT_ABORT         257   1%
                ERR_CONNECT_FAIL         425   1%
                ERR_DNS_FAIL             106   0%
                ERR_ZERO_SIZE_OBJECT      17   0%
        
        Address: 195.30.27.114
        Name: 195.30.27.114
        HTTP Requests 1855
                TCP_HIT                  209  11%
                TCP_MISS                1295  70%
                TCP_REFRESH_HIT           95   5%
                TCP_REFRESH_MISS          90   5%
                TCP_CLIENT_REFRESH       106   6%
                TCP_IMS_HIT               35   2%
                ERR_CLIENT_ABORT          22   1%
                ERR_CONNECT_FAIL           2   0%
                ERR_DNS_FAIL               1   0%

The above numbers are real, but the IP addresses have been changed. The first client is obviously a peer cache because it uses ICP. Note that 9% of the ICP replies are HITs; approximately the same percent of remote hits in the previous section.

The second client does not use ICP, but that doesn't necessarily mean it is not a cache. It might just be configured to use the no-query and default options.

The Name field will most often just show the IP address, unless Squid has been configured to lookup fully-qualified domain names with the log_fqdn option.

10.3 Network Probe Database

Normally you should not have much reason to examine the network probe database (aka ICMP measurements), other than to satisfy your own curiosity. It is actually quite interesting to look at the data. Select ``Network Probe Database'' from the cachemgr.cgi menu, or issue the following command from a Unix shell:

        client cache_object://localhost/stats/netdb | less

The output should resemble:

Network          recv/sent     RTT  Hops Hostnames
198.62.160.0        2/   2    22.0   7.0 www.jec.edu www.countrystars.com
    uc.cache.nlanr.net        82.0   9.0
    pb.cache.nlanr.net        84.0   9.0
    sd.cache.nlanr.net        85.0  16.0
128.2.194.0         2/   2    41.5   6.0 tom.cs.cmu.edu robotweb.ri.cmu.edu
    pb.cache.nlanr.net         7.0   5.0
203.183.232.0       1/  69   229.9   8.5 bbw.tokyoweb.or.jp powerhouse.co.jp
    sv.cache.nlanr.net       184.0   8.0
194.77.86.0         9/  23   466.9   9.6 www.ghg-verlag.com www.dom.de
    pb.cache.nlanr.net       283.0  12.0
    it.cache.nlanr.net       366.0  12.0
    sd.cache.nlanr.net       388.0  11.0
    uc.cache.nlanr.net       419.0  13.0

First of all note that hostnames are aggregated by ``/24'' networks. We assume that all hosts whose IP addresses have the same first three octets will have similar network measurements. In the example above we have only shown two hostnames per network, but in practice you will often see tens or hundreds of names per entry.

The lines starting with IP networks hold measurement data from your local cache. We also count the number of pings sent and received, although this information is not currently used in the neighbour selection process. We calculate decaying averages for the measured round trip time, and the estimated hop count. The RTT measurements are straightforward. Squid estimates hop counts by looking at the ip->ttl field of the ICMP reply packet, and guessing at its initial value when sent from the originating host. Because the hop count is averaged over time, and for different hosts, we may end up with non-integer values. Recall that we only use the RTT values in determining proximity, and not the hop counts.

The indented lines represent measurements returned by your neighbour caches in their ICP replies. These are listed in order of increasing RTT. Note that we won't necessarily have measurements for every peer cache. The measurements may time out, or may have failed to arrive.

The data above was taken from bo.cache.nlanr.net. For the first entry (e.g. www.countrystars.com) we can see that `BO' is closer than any of the listed neighbours. Even so, we will still use ICP for a subsequent request. However, unless one of the neighbours returns a RTT measurement lower than 22 milliseconds, `BO' would forward the request directly to the origin server.

The second entry shows that `PB' is closer than `BO' for some servers in the cmu.edu domain. Similarly, the third entry shows that `SV' is closer for some servers located in Japan, reasonable since traffic from `BO' to Japan likely routes through FIX-West anyway.

The final entry is interesting because `BO' has the lowest estimated hop count, but the largest measured RTT. Because we only use RTT to select, a request to one of those domains would very likely be forwarded to `PB'.

By default Squid keeps track of approximately 1000 networks in this database. For large caches, this value is probably too small, and you can configure its range yourself with the netdb_low and netdb_high configuration directives. The NLANR caches use values of 9900 and 10000 respectively. Also, the default netdb_ping_period is conservatively set at 5 minutes. You may want to increase the period to every one minute.


Next Previous Contents