Re: [squid-users] Two Squid with common cache

From: Amos Jeffries <squid3_at_treenet.co.nz>
Date: Tue, 10 Mar 2009 01:05:20 +1300

Nyamul Hassan wrote:
>>>>> This thread just raised another question on my mind. How would
>>>>> adding another instance (in the same box) with "null cache_dir"
>>>>> improve my performance? I'm a bit confused. Could you please
>>>>> explain a bit more?
>>>>
>>>> I don't think it would improve performance per-se. It would meet
>>>> your criteria of "i would like the cache_dir to be common between
>>>> the 2 squid".
>>>>
>>>
>>> Exactly, as on-disk objects will be served by Squid A alone. And,
>>> but objects in Cache_Mem will be served by Squid A or B from their
>>> own respective memory allocations, and TCP_MISS entirely served from
>>> the Internet (assuming Squid A is not configured to fetch from
>>> internet for ICP_MISS).
>>>
>>>> Two squid running on the same box:
>>>> Squid-A has a large on-disk cache_dir
>>>> Squid-B has no disk cache, and sources all requests from Squid-A.
>>>>
>>>> The overall effect is that only one copy of each cached object is
>>>> held on disk at that machine (in Squid-A's cache).
>>>>
>>>> Since Squid-B passes on most requests to Squid-A, the actual
>>>> response is less than 2x, more like: up to 1.5x capacity of only
>>>> squid-A.
>>>>
>>>
>>> I didn't get this increase of "Capacity". Also, what do you mean by
>>> "response"? Response Time? Can you explain a bit more?
>>
>> "request capacity" On a given CPU squid has a maximum absolute number
>> of requests per second it can process.
>>
>> Using two squid in parallel load-balanced doubles that maximum
>> req/sec, assuming the load balancer can handle it too. This setup with
>> one as parent gets less than 1.5x (half-again) instead of 2x (double).
>>
>
> Is there a measure on this "Maximum Absolute Number" of requests?

Not really. Benchmarking info has been hard to come by. I guess any
given machine and squid version would fit somewhere between 600rps and
5,000 rps in one Squid.

>
>>>
>>>> It's up to you if the loss of ~25% response capacity is worth the
>>>> duplicate object removal.
>>>>
>>>
>>> I'm stumped on this one too. Can you please also educate me on
>>> "Response Capacity" and "Duplicate Object Removal"?
>>
>> capacity as above.
>> "duplicate object removal" having only one cache of objects instead of
>> two.
>>
>
> On the "duplicate" note, if you've got sibling proxies configured as
> "proxy-only", that should minimize duplication, as anything that Squid A
> sees on Squid B is served from Squid B, with Squid A not doing any
> caching of that content. The only duplicate that I can think of can
> happen in case of simultaneous requests of the same object to both Squid
> A and Squid B, and which is not yet cached in either of them, which
> shouldn't be much.
>
>>>
>>>> There is no net gain in response timing, since the Squid-B ->
>>>> Squid-A request + Squid-A disk read, is usually slower than a disk
>>>> read.
>>>>
>>>
>>> This I understand clearly.
>>>
>>>> Off to performance:
>>>> for best performance, you cache small objects into COSS
>>>> directories and tune AUFS/DiskD to the OS type you are running on.
>>>> Ensuring only one disk spindle is used per cache_dir with as fast
>>>> disks as you can buy. Size doesn't matter, speed does.
>>>>
>>>
>>> Yes, exactly as you and other gurus in the forum have said that in
>>> numerous posts. On this note, I have seen that COSS has minimal
>>> impact on disk usage, almost negligible. And, I also read somewhere,
>>> that Linux usage of in-memory disk buffers is quite efficient. So,
>>> which is more efficient - Squid's "cache_mem" or OS's in-memory disk
>>> buffer?
>>
>> Ah, one of the really big questions.
>>
>
> Looks like we have yet to find out a suitable answer to that! Is there
> a way to test this? Like say, having no "cache_mem", and seeing how far
> we can push this, and getting comparable readings on IO_Wait and sevice
> timers?

Indeed. I'm hoping that a lot of things like this will be easier to test
in isolation once they have been broken out of the current mesh of code
and into sub-libraries. The SourceLayout project is working towards that
right now.
Someone should be able to begin some serious performance testing of
components in 3.2.

>
>>>
>>>> Then pump up the machine memory as far as it can go and allocate as
>>>> said
>>>> many bytes to cache_mem as possible without causing any memory
>>>> swapping (particularly prevent swapping when under highest load).
>>>>
>>>
>>> How do you find out if the system is "swapping"? We already have
>>> configured the Linux box to have NO swap space.
>>
>> Now that I'm not sure of myself. Never having faced that much server
>> load.
>>
>
> Well, in our case we've got only 8 GB of RAM, and cache_mem is set to
> 3GB. Squid process shows it is consuming ~4GB of memory (in top).
>
>>>
>>> We have the following in each of our Squid boxes:
>>> 4 x 250 GB SATA HDDs each having:
>>> - 20 GB COSS with max-size=1000000 maxfullbufs=32 membufs=256
>>> block-size=2048 max-size=65536
>>> - 160 GB aufs with min-size=65537
>>>
>>> So, does that mean the Squid process needs 10 GB [(14MB / GB) x (180
>>> GB per disk) x 4 disks] of memory just to maintain the index? And,
>>> on top
>>> of that the size of "cache_mem" that we specify in our config? And,
>>> also on top of these, some space for disk buffers?
>>
>> I believe so. Yes.
>>
>
> Looks like we really need to move to 16 GB of memory!
>
> Regards
> HASSAN
>

Amos

-- 
Please be using
   Current Stable Squid 2.7.STABLE6 or 3.0.STABLE13
   Current Beta Squid 3.1.0.6
Received on Mon Mar 09 2009 - 12:04:46 MDT

This archive was generated by hypermail 2.2.0 : Mon Mar 09 2009 - 12:00:01 MDT