From Wikitech
This page contains historical information. It may be outdated or unreliable.


This test was done in July 2008. The idea was to run a Squid proxy in front of the OSM tile servers, {a,b,c}.tiles.openstreetmap.org. As test server, knsq30 was used in KNAMS.

The system configuration:

1 Intel Xeon 5130, 2 GHz, DualCore
16 GB memory
4 Seagate ST973451SS 73GB SAS disks, 15krpm
1 GBit/s Ethernet port

General remarks

The backend was an Apache server using OSM's mod_tiles. It has its own disk cache for tiles and renders tiles on demand. Each request goes through the module. As far as I understood, there's a weekly database export from the core MySQL DB into Mapnik's PostgreSQL DB. Depending on the next scheduled DB export, the mod_tiles module decides whether the tile needs to be re-rendered and computes the Expires: header.

The module does not honor the If-modified-since: header, it always responds with returncode 200 and doesn't make use of code 304. Due to this, the refresh_pattern was tuned aggressively.

First test

The following squid config was used:

visible_hostname knsq30.knams.wikimedia.org
unique_hostname knsq30.knams.wikimedia.org
http_port 80 vhost
negative_ttl 0 minutes
request_header_max_size 15 KB
uri_whitespace deny
request_body_max_size 7 MB
half_closed_clients off
pipeline_prefetch on
read_timeout 1 minute
request_timeout 1 minute
persistent_request_timeout 1 minutes
quick_abort_min 0 KB
quick_abort_max 0 KB
cache_mem 3000 MB
maximum_object_size 600 KB
maximum_object_size_in_memory 150 KB
cache_dir coss /dev/sda6 30000 max-size=524288 max-stripe-waste=32768 block-size=2048
cache_dir coss /dev/sdb 30000 max-size=524288 max-stripe-waste=32768 block-size=2048
cache_dir coss /dev/sdc 30000 max-size=524288 max-stripe-waste=32768 block-size=2048
cache_dir coss /dev/sdd 30000 max-size=524288 max-stripe-waste=32768 block-size=2048
cache_swap_log /var/spool/squid/%s
refresh_pattern . 120 500% 6000 ignore-reload override-lastmod
dead_peer_timeout  10 seconds
client_db off
digest_generation off
error_directory /usr/share/squid/errors/Wikimedia
log_mime_hdrs off
logfile_rotate 1
strip_query_terms off
logformat wikimedia knsq30.knams.wikimedia.org %sn %ts.%03tu %tr %>a %Ss/%03Hs %<st %rm %ru %Sh/%<A %mt %{Referer}>h %{X-Forwarded-For}>h %{User-Agent}>h
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log none
acl all src
acl localsrc src
acl purge method PURGE
acl post method POST
acl tiertwo src
acl tile_openstreetmap_org dstdomain tile.openstreetmap.org
cache_peer parent 80 0 originserver no-query connect-timeout=5 login=PASS
cache_peer_access allow all
never_direct allow all
htcp_access allow all
htcp_clr_access allow tiertwo
htcp_clr_access deny all
http_access allow all

After a few days, the cache had a high hit ratio, serving about half of the cache hits from memory, the other half from disk. Depending on the time of day, about 5-10% of the requests were cache misses and had to be delivered from the master.

Connection information for squid:
	Number of clients accessing cache:	0
	Number of HTTP requests received:	46800892
	Number of ICP messages received:	0
	Number of ICP messages sent:	0
	Number of queued ICP replies:	0
	Number of HTCP messages received:	0
	Number of HTCP messages sent:	0
	Request failure ratio:	 0.00
	Average HTTP requests per minute since start:	5547.8
	Average ICP messages per minute since start:	0.0
	Select loop called: 251333892 times, 2.014 ms avg
Cache information for squid:
	Request Hit Ratios:	5min: 78.7%, 60min: 81.5%
	Byte Hit Ratios:	5min: 91.1%, 60min: 92.7%
	Request Memory Hit Ratios:	5min: 54.0%, 60min: 53.5%
	Request Disk Hit Ratios:	5min: 45.5%, 60min: 45.4%
	Storage Swap size:	36762950 KB
	Storage Mem size:	3072072 KB
	Mean Object Size:	4.31 KB
	Requests given to unlinkd:	0
Median Service Times (seconds)  5 min    60 min:
	HTTP Requests (All):   0.00286  0.00286
	Cache Misses:          0.01035  0.00919
	Cache Hits:            0.00179  0.00179
	Near Hits:             0.00000  0.00000
	Not-Modified Replies:  0.00091  0.00179
	DNS Lookups:           0.00000  0.00000
	ICP Queries:           0.00000  0.00000
Resource usage for squid:
	UP Time:	506159.565 seconds
	CPU Time:	7310.760 seconds
	CPU Usage:	1.44%
	CPU Usage, 5 minute avg:	2.72%
	CPU Usage, 60 minute avg:	2.28%
	Process Data Segment Size via sbrk(): 1034232 KB
	Maximum Resident Size: 0 KB
	Page faults with physical i/o: 10
Memory usage for squid via mallinfo():
	Total space in arena:  -1748292 KB
	Ordinary blocks:       1629838 KB      0 blks
	Small blocks:               0 KB      0 blks
	Holding blocks:             0 KB      0 blks
	Free Small blocks:     815713 KB
	Free Ordinary blocks:     460 KB
	Total in use:          1629838 KB -92%
	Total free:            816173 KB -46%
	Total size:            -1748292 KB
Memory accounted for:
	Total accounted:       4795460 KB
	memPoolAlloc calls: 230165238
	memPoolFree calls: 191604546
File descriptor usage for squid:
	Maximum number of file descriptors:   32768
	Largest file desc currently in use:    521
	Number of file desc currently in use:  430
	Files queued for open:                   0
	Available number of file descriptors: 32338
	Reserved number of file descriptors:   100
	Store Disk files open:                   0
	IO loop method:                     epoll
Internal Data Structures:
	8522920 StoreEntries
	531370 StoreEntries with MemObjects
	531367 Hot Object Cache Items
	8522892 on-disk objects

The squid process:

proxy     9229  1.4 40.7 6746012 6711288 ?     Sl   Jul09 122:21 (squid) -D -sYC -f /etc/squid/osm.conf

Disk I/O was very low.

# iostat -x 10
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.85    0.00    0.30    3.89    0.00   94.96

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda              40.12     3.89    6.19    0.60    92.61    35.93    18.94     0.02    3.24   3.09   2.10
sdb              38.22     0.00    6.49    0.00    89.42     0.00    13.78     0.03    4.15   3.38   2.20
sdc              47.01     0.00    7.68    0.00   109.38     0.00    14.23     0.03    3.77   3.77   2.89
sdd              27.15   101.20    4.39    1.00    63.07   204.39    49.63     0.03    5.19   2.96   1.60

Second test

The memory was increased to 8 GB:

cache_mem 8000 MB


to be updated


The CPU utilization was very low. The server would probably be able to run the mod_tiles apache in parallel to squid.

The overall network traffic of the OSM server farm was reduced significantly. Remaining network traffic was used for

  • serving cache misses to the squid server
  • API access to the OSM database
  • serving the Wiki, SVN, mailing lists
  • Tiles@Home, the second map renderer used by the OSM project