Como controlar o uso de RAM / swap

18

Existe uma maneira (aplicativo) de controlar a política de uso de RAM / swap no nível do aplicativo.

Eu tenho alguns aplicativos que eu uso o tempo todo e quero que eles permaneçam na RAM o tempo todo e também há aplicativos que eu uso muito raramente, e eles podem ser lançados para serem trocados por demanda. Sei que as janelas configuradas padrão devem me proporcionar o melhor desempenho, mas quero verificar se consigo mais :).

Eu uso o Windows 7.

Darqer
fonte
2
+1. Estou interessado em um método que funcione para o XP.
Xavierjazz 24/01

Respostas:

9

Sim, existe: faça o programa chamar a função VirtualLock :

As páginas bloqueadas por um processo permanecem na memória física até que o processo as desbloqueie ou termine. É garantido que essas páginas não sejam gravadas no arquivo de paginação enquanto estiverem bloqueadas.

Acredito que a função SetProcessWorkingSetSize também possa ser útil.


Para aquelas pessoas que pensam que sou herege por sugerir que isso pode ser útil:

Observe que existem motivos válidos para bloquear páginas na memória. Um motivo válido pode ser o fato de o usuário estar executando um gravador de CD, e o gravador de CD constantemente sai da página e, portanto, causa uma falha no buffer, criando uma montanha-russa. Nessa situação, seria válido bloquear os buffers de memória para que eles não sejam paginados, mesmo que isso signifique que o resto do computador diminua para um rastreamento, porque isso ainda é melhor do que oferecer ao usuário uma porta-copos. Também pode haver outros motivos válidos - o que quero dizer é que, embora geralmente não seja recomendado bloquear páginas na memória, situações válidas ainda existem, e eu não acho que matar a ideia ajudaria o OP aqui.


Update: Dê uma olhada em Process Hacker 's Reduce Working Setopção de menu.

Mehrdad
fonte
Talvez citar este trecho do artigo o contextualize: "O bloqueio de páginas na memória pode prejudicar o desempenho do sistema, reduzindo a RAM disponível e forçando o sistema a trocar outras páginas críticas pelo arquivo de paginação. Cada versão do Windows possui um limite para o número máximo de páginas que um processo pode bloquear. Esse limite é intencionalmente pequeno para evitar uma grave degradação do desempenho ". (Minha ênfase)
11
@ Randolph: Eu nunca o recomendei , apenas mencionei que, ao contrário do que a maioria das pessoas parece pensar, é possível . Pessoalmente, odeio dizer ao OP "Vamos matar sua idéia" - acho que o OP entendeu que ele não deveria fazer isso, mas se ele ainda quiser, acho que tem o direito de saber como fazê-lo. (Há uma razão eles criaram essas funções, e eu não sou a pessoa para julgar se o OP deve usá-los ou não.)
Mehrdad
Há muito código no Windows que foi deixado para compatibilidade com versões anteriores. Se há uma razão para tê-lo, seria isso. Pode-se compará-lo ao recurso Encolher do SQL Server, que não deve ser usado sob nenhuma circunstância, mas foi deixado por motivos de compatibilidade. O Windows 7 é um sistema operacional moderno com gerenciamento de memória adequado, e o arquivo de paginação não deve ser excluído, nem os programas devem tentar ficar na memória fora das "regras". É uma prática muito ruim e pode resultar em um sistema instável e / ou inutilizável.
11
@ Randolph: (vejo que você abandonou a analogia.:]) Faça um pequeno programa (não deve ter mais do que ~ 10 linhas) para abrir o outro processo e ligar SetProcessWorkingSetSize. Essa é uma maneira. Se é claro, se você não sabe o que isso significa, porque você não é um desenvolvedor, obviamente não há muito o que fazer. Mas ainda é possível, e dizer que é impossível ainda está incorreto, apenas requer mais conhecimento do que o OP pode ter.
21711 Mehrdad
11
@ Randolph, você pode baixar vários aplicativos freeware que forçam os aplicativos em execução a irem para o arquivo de paginação (chamando SetProcessWorkingSetSize em cada processo).
19411 Chris O
5

A única maneira que encontrei é desativar o arquivo de paginação. No entanto, não é uma solução perfeita: você receberá mensagens de erro se ultrapassar ou ultrapassar o seu limite de RAM, e ele pode não salvar os despejos de memória corretamente, então ligue-o novamente se precisar solucionar problemas. Fora isso, uso o Win7 sem arquivo de paginação há meses sem problemas.

Minha experiência: eu tive esse problema com um software de piano (uso de 1 GB de RAM) que seria trocado depois de não ser usado por um tempo. Tocar uma tecla de piano algumas horas depois resultaria em uma confusão confusa, pois a troca não seria recarregada com rapidez suficiente para o som tocar. (Eu colocaria meu braço inteiro em todas as teclas para forçar uma recarga!)

Se a RAM é uma preocupação, sugiro que você compre mais (por exemplo, 8 a 12 GB no Windows 7 x64). Para os que têm consciência da RAM, ter bastante RAM é uma dádiva de Deus.

Mas antes, considere adquirir uma unidade SSD e colocar sua troca nela. Isso acelerará bastante a recuperação de troca, além de oferecer muitos outros benefícios do sistema. A RAM não oferece benefícios quando não está em uso.

mtone
fonte
3
Faz. Não. Excluir. O. Página. Arquivo. Sempre.
7
Eu tenho. Fui. Usando. Win7. Com. Não. Arquivo de paginação. Para. Meses. Sem. A. Hitch.
Mck
11
Eu também uso Win7 sem arquivo de página o tempo todo, no entanto, parece-me que isso pode não ser suficiente para o meu trabalho atual :(
Darqer
3
@ Randolph: A MS sabe do que está falando, porque sabe que seus clientes nem sempre são profissionais de informática. Mas para aquelas pessoas que realmente sabem exatamente o que o arquivo de paginação faz e o que não faz, não há razão para forçá-las a uma prática que não precisam.
21411 Mehrdad
2
@ Randolph: Se você ultrapassar o limite de velocidade sem cinto de segurança, poderá morrer e também matar outras pessoas, sem mencionar o aumento dos custos de seguro para outras pessoas. O pior que pode acontecer se o computador esgotar a memória é que você perderá um pouco de tempo, dependendo da situação. Você não vê algo um pouco (leia-se muito) errado com a analogia aqui? Além disso, você já usou Linux / Unix? Já reparou como eles oferecem corda mais do que suficiente para você se enforcar, ao contrário do Windows? As pessoas ainda as usam - é como dirigir sob influência ou algo assim?
Mehrdad
2

O uso do arquivo de paginação depende de vários fatores. Se você usa muitos programas e não tem RAM suficiente para todos eles ao mesmo tempo, partes deles (ou todos) podem ser trocados para o arquivo de paginação.

Se você possui 4 GB de RAM e, digamos, cerca de 3 GB estão disponíveis devido a placas de vídeo e outros usuários de recursos bloquearem partes dos 4 GB, e você usa apenas alguns programas que não ocupam muita memória, teoricamente você nunca deve precisar de um arquivo de troca. No entanto, o Windows Vista e o 7 são notoriamente agressivos na troca de programas para o disco.

Eu costumava ter uma configuração que reduzia a alternância do Windows 7 (alternância é um termo do Linux, mas também se aplica ao Windows) e, como existe uma configuração de registro para domesticar a agressividade de troca do Windows, parece que a Microsoft concorda de má vontade, embora de uma maneira boa. maneira oculta), mas não consigo mais encontrá-lo. Procurando por isso, acabei aqui. A melhor alternativa para essa configuração que encontrei é garantir que você use um arquivo de troca de tamanho fixo (eu uso 4096-4096 em sistemas operacionais de 32 bits e 12 GB em sistemas operacionais de 64 bits, pois tenho 6 GB de RAM do sistema) em uma partição dedicada. Tendo uma unidade sobressalente de 7200 rpm e 200 GB, coloco todas as minhas partições de troca (Windows XP, 7, 7 de 64 bits e vários Linux) nesta unidade. Parece funcionar para mim, mas YMMV.

Paulo
fonte
1

Vale ressaltar: quando o Windows detecta que você está usando freqüentemente determinados aplicativos, o superpetch coloca esses aplicativos na memória para que eles sejam carregados mais rapidamente. Penso que confie no Windows para fazer as suas coisas aqui.

CreeDorofl
fonte