Como aumentar o espaço máximo de troca no Mac OS X?

13

No Mac OS X Yosemite 10.10.5, quando tento executar um cálculo que precisa alocar e usar 128 GB de memória (é um programa de linha de comando escrito em C), o kernel mata meu processo com extremo prejuízo. Esta entrada de log do console é um exemplo de uma instância:

9/25/15 7:08:40.000 PM kernel[0]: low swap: killing pid 6202 (huffgrp)

O cálculo funciona bem e em um período de tempo razoável quando aloca e usa 64 GB de memória. Meu Mac tem 32 GB de RAM e espaço no disco rígido. Eu também tentei isso em outro Mac com 8 GB de RAM, no qual o cálculo de 64 GB corre bem também, levando mais tempo, claro, mas o cálculo de 128 GB é morto pelo kernel da mesma forma.

A propósito, malloc() nunca retorna um erro, não importa quanto espaço eu peça. O kernel irá apenas matar o processo, uma vez que muito daquela memória está realmente sendo usada pelo processo, resultando em muita troca pelo disco rígido.

Portanto, parece haver um limite de espaço de troca secreta em algum lugar entre 64 GB e 128 GB.

A minha pergunta é: como reconfigurar o kernel para permitir mais espaço de troca? Eu encontrei um arquivo de aparência promissora, /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist , mas não vejo o número secreto lá. A man page para dynamic_pager diz que tudo o que ele faz é definir o nome e a localização dos arquivos de troca. Há uma versão mais antiga da mesma página man que documenta uma opção -S para definir o tamanho dos arquivos de swap criados. Eu tentei isso, solicitando swapfiles de 160 GB, mas não teve efeito. Os arquivos de swap ainda tinham 1 GB cada, e o processo ainda era morto pelo kernel.

    
por Mark Adler 27.09.2015 / 17:40

2 respostas

4

Não é a resposta que você pediu, mas se você criar seu próprio arquivo de tamanho apropriado, mapeie-o em seu processo e execute seu cálculo nesse espaço de endereço, ele deverá ter o mesmo efeito que um arquivo de troca e você É garantido ter o espaço, ao contrário de competir com outros processos por RAM / swap disponível.

Também pode ser mais lento, dependendo da frequência com que você sobrescreve os dados, mas deve ser muito mais portátil.

    
por 30.09.2015 / 20:47
0

As informações do meu mac estão bem datadas, pode não haver mais a mágica do kernel para fazer isso. Como tal, sugiro usar o Linux para este programa, onde você pode montar uma pasta ou partição como swap de forma muito simples.

Elimine as incertezas de usar uma pasta de troca dinâmica. Crie uma partição de troca física (apenas uma partição vazia não formatada, com código de tipo de tabela de disco para swap, no Linux é o código hexadecimal 0x82 .) Então:

  1. Edite o arquivo / etc / rc e encontre a seção de troca comentando tudo isso. adicione a linha mount -vat swap
    • significa montar todas as partições de troca em / etc / fstab
  2. executar pdisk /dev/disk? -dump
    • "?" é o número do disco do seu hd registra o número ao lado da partição swap
  3. Edite ou crie / etc / fstab (provavelmente não existe) adicione uma linha como /dev/disk?s?? none swap sw 0 0
    • é o seu disco.
    • ?? é o número da partição swap.
  4. reinicializar.
por 06.01.2017 / 00:40