Search squid archive

Re: Two Squid with common cache

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Linux Audio Users]     [Samba]     [Big List of Linux Books]     [Linux USB]     [Yosemite News]

  Powered by Linux