Consegui mover os arquivos de troca de memória virtual da Apple para uma partição dedicada no meu disco rígido até agora. A técnica que estou usando é descrita em um tópico no forums.macosxhints.com.
No entanto, com a visualização do desenvolvedor do Snow Leopard, esse método não funciona mais. Alguém sabe como isso poderia ser feito com o novo sistema operacional?
Update: Eu marquei a resposta de dblu como aceite, mesmo que não muito trabalho, porque ele deu instruções excelentes, detalhado e porque sua sugestão para usar plutil
em última análise, apontou-me na direção certa. A solução completa e útil está postada aqui na pergunta porque não tenho reputação suficiente para editar a resposta aceita.
Atualização 2: Foi alterado o procedimento para ilustrar a técnica do ekl , que simplifica bastante a coisa toda, eliminando a necessidade de um script de shell intermediário:
Solução completa:
1.
Abra o Terminal e faça uma cópia de backup do dynamic_pager.plist padrão da Apple:
$ cd /System/Library/LaunchDaemons
$ sudo cp com.apple.dynamic_pager.plist{,_bak}
2.
Converta o plist de binário em XML simples:
$ sudo plutil -convert xml1 com.apple.dynamic_pager.plist
3.
Abra o plist convertido com o seu editor de texto de sua escolha. (Eu uso pico
, veja a resposta do dblu para um exemplo usando vim
):
$ sudo pico -w com.apple.dynamic_pager.plist
Deve ter a seguinte aparência:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs$
<plist version="1.0">
<dict>
<key>EnableTransactions</key>
<true/>
<key>HopefullyExitsLast</key>
<true/>
<key>Label</key>
<string>com.apple.dynamic_pager</string>
<key>OnDemand</key>
<false/>
<key>ProgramArguments</key>
<array>
<string>/sbin/dynamic_pager</string>
<string>-F</string>
<string>/private/var/vm/swapfile</string>
</array>
</dict>
</plist>
4.
Modifique a matriz ProgramArguments (linhas 13 a 18) para usar o comando shell wait4path (conforme sugerido pelo ZILjr ) antes de iniciar o dynamic_pager. Veja a nota 1 para detalhes sobre por que isso é necessário. No exemplo a seguir, minha partição é chamada 'Swap' e escolhi colocar os arquivos de swap em um diretório oculto nessa partição, chamada '.vm', para ter certeza de que o diretório especificado realmente existe . O XML deve ter a seguinte aparência:
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>-c</string>
<string>/bin/wait4path /Volumes/Swap/ &&
/sbin/dynamic_pager -F /Volumes/Swap/.vm/swapfile</string>
</array>
5.
Salve o plist e retorne ao prompt do terminal. Usando pico
, os comandos seriam:
<ctrl+o> to save the file
<enter> to accept the same filename (com.apple.dynamic_pager.plist)
<ctrl+x> to exit
6.
Converta o plist modificado novamente em binário:
$ sudo plutil -convert binary1 com.apple.dynamic_pager.plist
7.
Reinicie o seu Mac. Se você tiver problemas, alterne para o modo de inicialização detalhado, mantendo pressionada a tecla Command-v imediatamente após o toque de inicialização. Isso permitirá que você veja todas as mensagens de inicialização que aparecem durante a inicialização. Se você tiver problemas ainda piores (ou seja, nunca verá a tela de login), mantenha pressionada a tecla Command-s. Isso inicializará o computador no modo de usuário único (sem interface gráfica do usuário, apenas um prompt de comando) e permitirá restaurar a cópia de backup de com.apple.dynamic_pager.plist que você fez na etapa 1.
8.
Depois que o computador inicializar, inicie o Terminal e verifique se os arquivos de troca foram realmente movidos:
$ cd /Volumes/Swap/.vm
$ ls -l
Você deve ver algo assim:
-rw------- 1 someUser staff 67108864 18 Sep 12:02 swapfile0
9.
Exclua os arquivos de troca antigos:
$ cd /private/var/vm
$ sudo rm swapfile*
10.
Lucro!
Nota 1
Modificar os argumentos para dynamic_pager no plist sem usar wait4path
nem sempre funciona e, quando falha, ocorre de maneira espetacularmente silenciosa. O problema decorre do fato de o dynamic_pager ser iniciado muito cedo no processo de inicialização. Se sua partição de troca ainda não foi montada quando o dynamic_pager é carregado pela primeira vez (na minha experiência, isso acontece 99% do tempo), o sistema irá falsificar seu caminho. Ele criará um link simbólico no diretório / Volumes que tem o mesmo nome que sua partição de troca, mas aponta para o local padrão do arquivo de troca (/ private / var / vm). Então, quando sua partição de troca real for montada, ele receberá o nome Swap 1
(ou YourDriveName 1
). Você pode ver o problema abrindo o Terminal e listando o conteúdo do seu diretório / Volumes:
$ cd /Volumes
$ ls -l
Você verá algo assim:
drwxrwxrwx 11 yourUser staff 442 16 Sep 12:13 Swap -> private/var/vm
drwxrwxrwx 14 yourUser staff 5 16 Sep 12:13 Swap 1
lrwxr-xr-x 1 root admin 1 17 Sep 12:01 System -> /
Observe que essa falha pode ser muito difícil de detectar. Se você fosse procurar os arquivos de troca como mostro na etapa 12, ainda os veria ! O link simbólico faria parecer que seus arquivos de troca foram movidos, mesmo que eles estivessem realmente sendo armazenados no local padrão.
Nota 2
Inicialmente, não consegui fazer isso funcionar no Snow Leopard porque o com.apple.dynamic_pager.plist estava armazenado em formato binário. Fiz uma cópia do arquivo original e abri-o com o Editor de lista de propriedades da Apple (disponível com o Xcode) para fazer alterações, mas esse processo adicionou alguns atributos estendidos ao arquivo plist, o que fez com que o sistema o ignorasse e apenas usasse os padrões . Como o dblu apontou, usar plutil
para converter o arquivo em XML simples funciona como um encanto.
Nota 3
Você pode verificar o aplicativo Console para ver as mensagens que dynamic_pager_init ecoam na tela. Se você vir as seguintes linhas repetidas vezes sem conta, há um problema com a instalação. Encontrei essas mensagens porque esqueci de criar o diretório '.vm' especificado em dynamic_pager_init.
com.apple.launchd[1] (com.apple.dynamic_pager[176]) Exited with exit code: 1
com.apple.launchd[1] (com.apple.dynamic_pager) Throttling respawn: Will start in 10 seconds
Quando tudo estiver funcionando corretamente, você poderá ver a mensagem acima apenas algumas vezes e, em seguida, não haverá mais as mensagens "Aceleração do reaparecimento". Isso significa que o sistema precisou esperar o carregamento da partição, mas no final foi bem-sucedida.
fonte
wait4path
exigidas pelo estado protegido) , mas encontrei uma não solução, graças ao que o Applicorn's Xupport modificado para mim. Vou postar uma resposta completa assim que descobrir como, mas o mais curto é mudar o último argumento do programa para apenas o novo caminho (por exemplo<string>/Volumes/swap/.vm/swapfile</string>
), alterar aOnDemand
chave para<true/>
e adicionar umaStartOnMount
chave ao final com um valor de<true/>
. PS Esta solução funciona bem no Lion (pelo menos para mim).StartOnMount
bandeira foi adicionada na versãoRespostas:
NOTA : Veja (também) uma resposta corrigida / aprimorada na própria pergunta.
A seguinte solução funcionou para mim:
Abra um terminal e faça backup de com.apple.dynamic_pager.plist que você mudará em um segundo:
converter plist binário em xml:
e abra-o com seu editor de texto favorito
será algo como isto:
Na linha 17, modifique / private / var / vm / swapfile (por exemplo, / Volumes / partition2 / swapfile), salve e feche seu editor (": x" fará as duas coisas no vim).
converta o arquivo plist novamente em binário:
Depois de reiniciar o seu Mac, você deve encontrar os arquivos de troca no diretório especificado.
Se você tiver algum problema, poderá restaurar o backup criado na primeira etapa com:
fonte
plutil
nas conversões. Postei a solução completa na pergunta (já que não tenho representante suficiente para adicioná-la à sua resposta). Veja minha nota 1 para obter uma descrição detalhada dos problemas com os quais eu apenas modifiquei o plist.Adotei essa idéia e fui um pouco mais longe, abordando as estratégias de crescimento e recuperação.
Detalhes em http://www.crypticide.com/dropsafe/article/3848 ; Eu postaria um link para a página de projeto do GoogleCode "dynamicpagerwrapper", mas o blog me diz que não tenho pontos de reputação suficientes ...
fonte
apenas uma pergunta: por que não apenas editar o arquivo .plist adicionando
wait4path
, em vez de usar o intermediáriodynamic_pager_init
?algo assim:
EDIT: como explicado no comentário de e.James e no meu comentário a seguir, o bloco XML imediatamente a seguir não é bom, tanto porque há um erro (ausente &&) quanto porque apenas o primeiro argumento da matriz
ProgramArguments
é analisado como o programa a ser executado !mas .. (role para baixo)
final do bloco xml errado
este bloco XML deve funcionar:
lembre-se de que ainda não tive tempo suficiente para tentar com segurança essa configuração, mas tentei executar vários outros comandos do shell iniciados da mesma maneira e tudo deve funcionar conforme o esperado
Como funciona:
base: executando
wait4path /path && command
significa quecommand
é executado apenas sewait4path
termina e sai sem erros, e isso acontece apenas quando/path
há um caminho disponível, para que possamos dizerdynamic_pager
com segurança para usar esse volume para arquivos de troca1) conforme escrito na página de
launchd.plist
manual, as chavesProgram
eProgramArguments
são mapeadas para umaexecvp
chamada, isso significa que tudo, exceto a primeira string da matriz, é tratado como um argumento para a primeira string da matriz, o programa a ser executado;2) conforme escrito na página de
bash
manual, existe umabash -c <string>
opção para executar a sequência passada como comandos1 + 2 = 3) o que acontece usando essa linha de comando em um launchd plist ??
/bin/bash -c "wait4path /Volumes/Swap/ && /sbin/dynamic_pager -F /Volumes/Swap/.vm/swapfile"
/bin/bash
é o programa a ser executado,-c
é o primeiro argumento e a cadeia de caracteres entre aspas duplas é o segundo argumentoEu acho que deve funcionar exatamente como sua solução, sem o script intermediário:
launchd
iniciará o serviço, que aguardará o caminho especificado e será iniciadodynamic_pager
..Por favor, note que:
* a string que você quer executar deve ser dupla citado se você executar
bash -c
no Terminal, mas é não double citado no arquivo plist! (eu acho que porque ele já está declarado como uma string com a tag apropriada)* os dois
&
na string devem ser alterados para&
no arquivo plistPS: como sempre, proceda por sua conta e risco, não me responsabilizo por problemas que você possa ter usando essa configuração!
Obrigado por compartilhar seu trabalho conosco
fonte
ProgramArguments
matriz, mas certamente vale a pena tentar. Voce já experimentou?:)
Eu sei que já faz um tempo desde que este artigo foi escrito, mas pensei em adicionar meu pequeno item aqui para aqueles que querem fazer isso também…
Eu usei o truque acima para mover meus arquivos de swap para outra unidade interna (minha unidade de inicialização é SSD com chips MLC, portanto, a remoção de vm pode salvar a expectativa de vida). De qualquer forma, depois de criar o novo volume, eu tinha um volume de Troca no Finder que nunca vou usar no próprio Finder, então decidi tornar o volume invisível para o Finder. Você precisa do Developer Toolkit da Apple instalado. Então digite:
… E substitua / Volumes / Troque pelo nome que você deu ao seu volume. Reinicie o Finder e pronto, não haverá mais troca de volume no Finder!
fonte
Você pode usar wait4path para aguardar a montagem do volume; caso contrário, o launchd reiniciará seu script dynamic_pager_init repetidas vezes até que isso aconteça ...
fonte
wait4path
vez da combinaçãoif
/grep
, e isso limpa as coisas muito bem. Obrigado pela dica.Talvez possamos usar o Xupport para fazer esses trabalhos sujos para nós :) http://www.applicorn.com/
Otimizador de memória virtual:
Alterar o local dos arquivos de troca No Mac OS X, as informações da memória virtual são armazenadas nos chamados "Swapfiles". Como os arquivos de troca são os arquivos de sistema mais interativos, faz sentido colocá-los em uma partição separada. É recomendável armazenar os arquivos de troca na primeira partição do seu disco rígido interno mais rápido. O tamanho mínimo recomendado da partição deve ser cerca de 3 ou 4 vezes mais que o tamanho da memória física incorporada (por exemplo, 1 GB de memória física = partição de troca de 4 GB). Recomendações e instruções para um ótimo desempenho do sistema:
1. Divida novamente o disco rígido com um volume de troca como PRIMEIRA partição (usando o DVD de instalação do Mac OS X). AVISO: REPARTICIONAR UM DISCO RÍGIDO APAGARÁ TODOS OS DADOS EXISTENTES!
2. Restaure os dados do sistema ou instale um novo sistema na partição do sistema.
3. Inicialize a partir da partição do sistema.
4. Se você deseja que seu volume de swap fique invisível para o Finder: • Inicie o Xupport e escolha "Configurações" • Ative "Mostrar arquivos e pastas ocultos" e reinicie o Finder • Renomeie o volume de swap de "swap" para ".swap" (O ponto o torna invisível para o Finder) • Desative "Mostrar arquivos e pastas ocultos" e reinicie o Finder novamente
5. Selecione a nova partição de troca em "Swap Storage Volume". Em seguida, pressione o botão "Definir" para aplicar as novas configurações de localização do arquivo de troca (é necessário reiniciar).
BTW, funciona para mim. Snow Leopard 10.6.2 @ MacBook Pro de 2,4 GHz, 4 GB de RAM, 500 GB HD
fonte
É provavelmente uma resposta indesejada (já que não posso comentar depois de Diago), mas por que você realmente insiste que isso trará pequenos ganhos de desempenho? Eu passei por uma discussão nos fóruns da apple e concluí que isso não é uma boa ideia. E eu fui muito resistente em abandoná-lo. Você poderia criar dados que provassem isso, pelo menos para você, ou é apenas um "sentimento"?
De todas as vezes que eu usei swap, mesmo no linux, há 10 anos atrás, e hoje em dia no ubuntu, eu nunca via melhorias no desempenho. Minha razão para querer isso foi evitar problemas com espaço livre no OSX e, no Linux, por poder hibernar. Isso é tudo para mim.
Mas eu nunca fiz pesquisas mais profundas por conta própria ou nas interwebs.
fonte
Esta não é uma resposta, mas talvez um complemento de acompanhamento muito útil. A Apple fornece um editor de lista grátis aqui PlistEdit Pro . Permite editar esses arquivos com segurança. Parece que você pode mudar o argumento com o valor / private / var / vm / swapfile para algo como / Volumes / OtherDrive / vm / myswapfilename para mover os arquivos de troca para outro lugar ...
Mais uma vez eu não testei isso ...
fonte