A troca aparentemente aconteceu quando as páginas de RAM inativas estavam realmente ativas.
( Atualização: como foi esclarecido em um comentário, este não é o seu caso. Assim, pessoas com o mesmo problema podem avançar para a regra horizontal .)
Ou seja. você tinha muitos programas em execução e o kernel trocava algumas páginas. Então você saiu de alguns programas. O kernel marca suas páginas de RAM como inativas. Mas isso não trará as páginas de volta à RAM até que essas páginas sejam necessárias. Isso resulta em páginas inativas e trocadas.
Por que não trocar páginas preventivamente? Porque isso estaria apostando contra as probabilidades: no longo prazo você perde. Vamos pensar em um exemplo simplificado: dois programas A e B que não cabem na RAM ao mesmo tempo. O programa A ainda está em execução e todas as páginas trocadas pertencem a A. O programa B foi encerrado e todas as páginas inativas pertencem a B.
Se o kernel preventivamente trocar as páginas de A e imediatamente após:
- o programa A precisa acessar suas páginas - > Você ganha - as páginas já estão na RAM.
- você inicia o B novamente - > Você perde - você "paga" o custo de trazer as páginas para a RAM e agora você precisa enviá-las de volta.
- você lança outro programa C - > Você perde se A e C não couberem na RAM ao mesmo tempo. Se eles se encaixam, você é mesmo.
Considere também que a troca (gravação em disco) é mais cara que a troca (leitura do disco). O que torna essa "aposta" ainda mais sem atrativos.
Resumindo: confie no seu kernel e não tente enganá-lo.
Atualização: Acontece que a memória inativa não funciona, pois o artigo Usando o Activity Monitor para ler a Memória do Sistema levou muitas pessoas a acreditarem trabalho. A definição dada no artigo para memória inativa está correta:
This information is in RAM but it is not actively being used, it was recently used.
Mas o exemplo a seguir é totalmente enganoso e simplificado (como meu exemplo para ser franco):
For example, if you've been using Mail and then quit it, the RAM that Mail was using is marked as Inactive memory. Inactive memory is available for use by another application, just like Free memory. However, if you open Mail before its Inactive memory is used by a different application, Mail will open quicker because its Inactive memory is converted to Active memory, instead of loading it from the slower drive.
Pesquisei mais recursos on-line e terminei para este tópico a lista de discussão do kernel do darwin, que é bastante informativa. Citando Jim Magee (da equipe de Darwin - eu acho):
In short, the kernel VM system when dealing with memory pressure scans through in-use pages and tries to keep them in a balance between active and inactive markings. The inactive pages are scanned for reuse while marked as inactive. If they have been reused, they are marked as active and some other page must move from active to inactive state to detect if it is in active use. So, inactive is a misnomer. It is shorthand for "possibly inactive, lets try to verify that."
As you discovered, the internal balance we (currently) strive for is approximately 2/3 active vs 1/3 inactive...
Isso explica o comportamento que você observa. Ou seja as páginas inativas que você vê pertencem a programas em execução que não foram usados recentemente. Então, quando você inicia um novo programa, as páginas inativas são trocadas. Ao mesmo tempo, as páginas de outros programas são marcadas como inativas para manter a proporção de 2/1 entre ativo e inativo.
O tópico também contém algumas sugestões para saber mais sobre os componentes internos da darwin . Há também algumas sugestões no caso de você começar a investigar o uso de memória por causa de problemas de beachball (que geralmente têm pouco a ver com isso).
A conclusão continua a mesma: confie no seu kernel e não tente enganá-lo. : -)