Meu entendimento da saída de livre é que os valores de buffer / cache são um verdadeiro reflexo da memória disponível.
Eu atribuí 512M ao cache opcode do PHP APC e, embora esteja utilizando tudo isso, a saída do free permanece a mesma.
Eu sei que a questão está no meu entendimento (ou falta dela) de gerenciamento de memória. Alguém pode me dar algumas dicas sobre isso?
ATUALIZAÇÃO:
Meu entendimento da memória vem do estudo de montagem que fiz. O que (pelo menos eu acho) eu não sei é como o kernel Linux gerencia a memória.
Desde postar a pergunta eu li mais e meu entendimento é que, no nível mais simples, eles são como seus nomes sugerem - cache é o kernel espelhando arquivos para RAM para acesso mais rápido e que buffers são bits transitórios de informação sendo usado por processos individuais.
APC em execução (512M totalmente utilizado):
total used free shared buffers cached
Mem: 1498 1452 46 0 36 796
-/+ buffers/cache: 619 879
Imediatamente após reiniciar o PHP FPM com o APC desativado:
total used free shared buffers cached
Mem: 1498 776 721 0 36 285
-/+ buffers/cache: 454 1043
Ignorando o espaço de troca conforme permaneceu inalterado:
A linha um faz sentido para mim, a memória é liberada tanto da APC (512M) quanto dos trabalhadores PHP (721-46-512 = 163M). A memória atribuída para o cache não tem mais o APC para lidar e reduz em 796-285 = ~ 512M (ou isso é apenas uma coincidência?).
É a segunda linha que está me confundindo. Esses números são apenas quanto o kernel reservou para buffers e o restante é alocado para o cache, mesmo que não seja realmente usado atualmente? Isso faria sentido porque cai a mesma quantia que calculei como sendo usada pelo PHP, refletindo os trabalhadores PHP.
Se eu estiver correto, surge outra pergunta. O que é refletido pelos "buffers" na linha um?