A tabela do Squid na memória RAM funciona como um índice. Pense no índice de objetos do Squid como se fosse o índice de páginas de um livro. Quanto maior o livro, maior o índice e, logicamente, mais tempo se levará na busca de uma página específica.
Quanto mais objetos o Squid tem armazenado no disco rígido, mais espaço de memória RAM ele alocará. Porém, isto não significa que você deve esvaziar o cache do Squid com frequência.
O ideal é calcular bem o "cache_dir" e o "cache_mem" para somente ter que limpar o cache do Squid em caso de problemas, pois quando o "cache_dir" lota, o Squid automaticamente apaga os objetos mais antigos e grava os mais novos.
Uma pequena quantidade de metadados para cada objeto em cache é mantida na memória. Esta estrutura de dados é conhecida como StoreEntry. São 56 bytes em arquiteturas de 32 bits e 88 bytes em arquiteturas de 64 bits.
Além disso, existe um cache de 16 bytes (MD5) associado a cada StoreEntry. Isto significa que existem 72 ou 104 bytes de metadados na memória para cada objeto no cache. Um cache com 1.000.000 de objetos, portanto, requer 72 MB de memória apenas para os metadados.
O Squid utiliza 10 MB de memória RAM para cada 1 GB no disco em sistemas de 32 bits e 14 MB de memória RAM para cada 1 GB em sistemas de 64 bits. A FAQ do Squid aconselha utilizar um terço da memória total da máquina somado às regras anteriores.
Cálculo do "cache_mem" total utilizando 5 GB como exemplo e tomando-se, por exemplo, 3 gigabytes como total da memória RAM da máquina:
Para sistemas de 32 bits:
- 10 x 5 = 50 MB
- 1/3 de 3 GB = 1 GB (1024 MB)
- 1024 + 50 = 1074 MB
Para sistemas de 64 bits:
- 14 x 5 = 70 MB
- 1024 + 70 = 1094 MB
* Lembre que os 5 GB acima utilizados no cálculo, não se referem à quantidade colocada no "cache_dir" e sim à quantidade que o Squid TEM armazenado dentro do espaço total destinado ao "cache_dir".
A coisa toda se processa assim: você pode colocar 500 mil GB de "cache_dir" (se tiver um HD desse tamanho), mas o Squid irá aumentando o índice de acordo com o que for armazenando no disco e, consequentemente, ocupará mais espaço na memória RAM. Quando ele "encher" os 500 mil GB, ele mesmo excluirá os objetos mais antigos do cache.
O confuso "squid.conf" nos diz que para o "cache_dir" é uma boa prática utilizar o espaço total da partição destinada para o cache_dir menos 20%.
Para o cálculo efetivo do "cache_dir" e do "cache_mem", é importante analisar a quantidade de tráfego da sua rede. Basicamente, quanto maior a rede (número de computadores), maior o tráfego.
Um adendo deve ser feito agora em caso de se utilizar cache de vídeos: deve ter-se um HD de tamanho generoso e deve-se aumentar o maximum_object_size para um tamanho ideal.
Donde conclui-se: o tamanho do "cache_dir" é proporcional ao tamanho do "cache_mem". Quanto mais aumenta o espaço utilizado no "cache_dir" mais aumenta o espaço utilizado no "cache_mem".
Resumindo
As quantidades colocadas no "cache_dir" e no "cache_mem", são quantidades totais que irão sendo preenchidas de acordo com o uso do Squid. Você deve ir "jogando" com o "cache_dir" e com o "cache_mem" se acontecerem problemas de lentidão ou travamento, e deve verificar se as ACLs (fast ou slow) não estão causando essa lentidão ou travamento.
A escolha do tamanho ideal para o "cache_dir" e para o "cache_mem" deve levar em conta o tráfego dentro da rede. Mas lembre-se, colocar muito "cache_dir" e pouco "cache_mem" poderá tornar o Squid lento e, por conseguinte, o sistema operacional.
E colocar pouco "cache_dir" e muito "cache_mem", representa um desperdício de memória e poderá faltar memória para o sistema operacional e/ou para os outros serviços instalados na máquina, pois o Squid reserva o espaço do "cache_mem" e poderá causar, de novo, lentidão ou travamento.
Eu, pessoalmente, acredito que utilizar um "cache_dir" de 5 GB (cinco gigabytes) é o ideal, quando não se fizer cache de vídeos. Lembre-se da analogia do índice do Squid: quanto mais páginas no livro, maior o índice e, consequentemente, mais tempo o Squid leva na busca dentro do cache.
Porém, polêmicas à parte, torno a repetir, isso depende da quantidade de tráfego que você tem na sua rede e da configuração de hardware que você tem disponível.
Uma configuração ideal de máquina (opinião minha) é colocar o sistema operacional com IPtables, Squid (com Sarg) e DHCP com compartilhamento.
Lógico que aí está incluída a escolha do tamanho do HD, do processador, da quantidade de memória RAM, da placa-mãe etc; e da disponibilidade financeira para se montar o hardware. Essa configuração fica melhor até para gerenciamento do servidor.
Se você utilizar o Squid com Windows (Squid-NT ou WinSquid), deve colocar uma boa quantidade de memória RAM, pois o sistema operacional Windows, além de consumir muita memória RAM, não tem um bom gerenciamento dela.