On 13/01/11 00:57, Víctor José Hernández Gómez wrote:
Hi all,

I am using one box (4Gb RAM, modern multicore CPU) for a mono-instance
proxy-only (non-caching) squid 3.1.9 version, serving about 2500 clients .

CPU is never over 30%, and vmstat output does not show any swapping.

1) The configuration of the instance is very simple indeed:

# ----------------------------------
# Recommended minimum configuration:
# Recommended access permissions, acls, ... etc...
........
........
#
# We recommend you to use at least the following line.
hierarchy_stoplist cgi-bin ?

cache_dir aufs /san/cache 241904 64 512 <- NOt used
cache deny all

NP: with a cache_dir configured it *is* used. The "cache deny all" means that new data will not be added AND that existing data will be removed when detected as stale or a variant collision.


# Add any of your own refresh_pattern entries above these.
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320

# More rules
cache_mem 512 MB
# ----------------------------------

2) TCP is also tuned for performace, timeout optimization, etc..

3) On a high load moment I invoke the following command.

squidclient -p 8080 mgr:60min

which shows:

sample_start_time = 1294827593.936461 (Wed, 12 Jan 2011 10:19:53 GMT)
sample_end_time = 1294831195.510801 (Wed, 12 Jan 2011 11:19:55 GMT)
client_http.requests = 176.550847/sec
client_http.hits = 0.000000/sec
client_http.errors = 0.337075/sec
client_http.kbytes_in = 401.282290/sec
client_http.kbytes_out = 4950.528662/sec
client_http.all_median_svc_time = 0.121063 seconds
client_http.miss_median_svc_time = 0.121063 seconds
client_http.nm_median_svc_time = 0.000000 seconds
client_http.nh_median_svc_time = 0.000000 seconds
client_http.hit_median_svc_time = 0.000000 seconds
server.all.requests = 175.215042/sec
server.all.errors = 0.000000/sec
server.all.kbytes_in = 4939.614269/sec
server.all.kbytes_out = 226.921319/sec
server.http.requests = 167.784681/sec
server.http.errors = 0.000000/sec
server.http.kbytes_in = 4441.452123/sec
server.http.kbytes_out = 167.159676/sec
server.ftp.requests = 0.033319/sec
server.ftp.errors = 0.000000/sec
server.ftp.kbytes_in = 24.191365/sec
server.ftp.kbytes_out = 0.001944/sec
server.other.requests = 7.397043/sec
server.other.errors = 0.000000/sec
server.other.kbytes_in = 473.970780/sec
server.other.kbytes_out = 59.759977/sec
icp.pkts_sent = 0.000000/sec
icp.pkts_recv = 0.000000/sec
icp.queries_sent = 0.000000/sec
icp.replies_sent = 0.000000/sec
icp.queries_recv = 0.000000/sec
icp.replies_recv = 0.000000/sec
icp.replies_queued = 0.000000/sec
icp.query_timeouts = 0.000000/sec
icp.kbytes_sent = 0.000000/sec
icp.kbytes_recv = 0.000000/sec
icp.q_kbytes_sent = 0.000000/sec
icp.r_kbytes_sent = 0.000000/sec
icp.q_kbytes_recv = 0.000000/sec
icp.r_kbytes_recv = 0.000000/sec
icp.query_median_svc_time = 0.000000 seconds
icp.reply_median_svc_time = 0.000000 seconds
dns.median_svc_time = 0.030792 seconds
unlink.requests = 0.000000/sec
page_faults = 0.000278/sec
select_loops = 7354.368257/sec
select_fds = 6158.774443/sec
average_select_fd_period = 0.000000/fd
median_select_fds = 0.000000
swap.outs = 0.000000/sec
swap.ins = 0.000000/sec
swap.files_cleaned = 0.000000/sec
aborted_requests = 3.468483/sec
syscalls.disk.opens = 0.187418/sec
syscalls.disk.closes = 0.185474/sec
syscalls.disk.reads = 0.000000/sec
syscalls.disk.writes = 0.101622/sec
syscalls.disk.seeks = 0.000000/sec
syscalls.disk.unlinks = 0.101622/sec
syscalls.sock.accepts = 73.385407/sec
syscalls.sock.sockets = 63.842636/sec
syscalls.sock.connects = 63.166821/sec
syscalls.sock.binds = 63.842636/sec
syscalls.sock.closes = 102.078415/sec
syscalls.sock.reads = 3467.104333/sec
syscalls.sock.writes = 2584.626089/sec
syscalls.sock.recvfroms = 20.185062/sec
syscalls.sock.sendtos = 12.178285/sec
cpu_time = 709.070205 seconds
wall_time = 3601.574340 seconds
cpu_usage = 19.687785%

So, the system is serving 175 Request per Second (60 min. average), if I
am understanding well the output.

Well ... client_http.requests = 176.550847/sec


4) Looking the actual connections, I found (extracted from netstat output)
8 CLOSE_WAIT
3 CLOSING
4216 ESTABLISHED
100 FIN_WAIT1
24 FIN_WAIT2
45 LAST_ACK
5 LISTEN
43 SYN_RECV
46 SYN_SENT
2273 TIME_WAIT

there are many connections, but not so many that cannot be handled for
the system, I guess.

However, network throughput is about 50 Mbps. Let us look, iptraf output
(general statistic for my 1 Gb eth0 interface):

Total rates: 92146,8 kbits/sec and 13393.6 packets/sec
Incoming rates: 43702,1 kbits/sec and 7480 packets/sec
Outgoing rates: 48464,k ktis/sec and 5913.6 packets/sec

The users, however, does not get a really good navigation experience
when reaching these values (on high load moments).. and I am not able to
discover where the bottleneck is (Squid itself, SO, network, drivers,
parameter tuning)..

Any idea on how to get a better throughput with this equipment. Any idea
about subsytems configuration, or general configuration of squid software?

3.1.10 may be worth trialling. We have just had some surprising benchmarks submitted for it. On a basic config it seems to perform a few dozen % RPS faster than 3.1.9. Reason unclear, but the big change between them was better memory management and better validation support.

I say trial because under high load the benchmarker found some CPU problems we have not yet isolated and fixed. I hope you will experience a similar improvement without the problems.


Thank you in advance for your help, and congratulations for your great
work..

Thank you for your thanks.

Amos
--
Please be using
  Current Stable Squid 2.7.STABLE9 or 3.1.10
  Beta testers wanted for 3.2.0.4

Reply via email to