[Server-devel] Squid tuning recommendations for OLPC School Server tuning...
Martin Langhoff
martin.langhoff at gmail.com
Mon Sep 22 19:24:57 EDT 2008
Hi!
I am working on the School Server (aka XS: a Fedora 9 spin, tailored
to run on fairly limited hw), I'm preparing the configuration settings
for it. It's a somewhat new area for me -- I've setup Squid before on
mid-range hardware... but this is... different.
So I'm interested in understanding more aobut the variables affecting
memory footprint and how I can set a _hard limit_ on the wired memory
that squid allocates.
In brief:
- The workload is relatively "light" - 3K clients is the upper bound.
- The XS will (in some locations) be hooked to *very* unreliable
power... uncontrolled shutdowns are the norm. Is this ever a problem with Squid?
- After a bad shutdown, graceful recovery is the most important
aspect. If a few cached items are lost, we can cope...
- The XS hardware runs many services (mostly webbased), so Squid gets
only a limited slice of memory. To make matters worse, I *really*
don't want the core working set (Squid, Pg, Apache/PHP) to get paged
out. So I am interested in pegging the max memory Squid will take to itself.
- The XS hw is varied. In small schools it may have 256MB RAM (likely
to be running on XO hardware + usb-connected ext hard-drive).
Medium-to-large schools will have the recommended 1GB RAM and a cheap
SATA disk. A few very large schools will be graced with more RAM (2 or
4GB).
... so RAM allocation for Squid will prob range between 24MB at the
lower-end and 96MB at the 1GB "recommended" RAM.
My main question is: how would you tune Squid 3 so that
- it does not allocate directly more than 24MB / 96MB? (Assume that
the linux kernel will be smart about mmapped stuff, and aggressive
about caching -- I am talking about the memory Squid will claim to
itself).
- still gives us good thoughput? :-)
So far Google has turned up very little info, and it seems to be
rather old. What I've found can be summarised as follows:
- The index is malloc'd, so the number of entries in the index will
be the dominant concern WRT memory footprint.
- Each index entry takes between 56 bytes and 88 bytes, plus
additional, unspecificed overhead. Is 1KB per entry a reasonable
conservative estimate?
- Discussions about compressing or hashing the URL in the index are
recurrent - is the uncompressed URL there? That means up to 4KB per
index entry?
- The index does nto seem to be mmappable or otherwise
We can rely on the (modern) linux kernel doing a fantastic job at
caching disk IO and shedding those cached entries when under memory
pressure, so I am likely to set Squid's own cache to something really
small. Everything I read points to the index being my main concern -
is there a way to limit (a) the total memory the index is allowed to
take or (b) the number of index entries allowed?
Does the above make sense in general? Or am I barking up the wrong tree?
cheers,
martin
--
martin.langhoff at gmail.com
martin at laptop.org -- School Server Architect
- ask interesting questions
- don't get distracted with shiny stuff - working code first
- http://wiki.laptop.org/go/User:Martinlanghoff
More information about the Server-devel
mailing list