Criando arquivos de troca mais rapidamente

2

Estou usando o Amazon EC2 e desejo poder gerar rapidamente grandes arquivos de troca (~ 10 + GB) na inicialização da instância. Infelizmente, a velocidade de E / S em minhas instâncias (c1.xlarge) é lenta o suficiente (20 MB / s) que essa operação leva mais de 10 minutos, o que é inaceitável para meu uso.

Estou ciente de que os arquivos de swap devem ser pré-alocados para uso, para que eu não possa usar arquivos esparsos.

No entanto, existe algum comando para alocar blocos sem gastar a grande quantidade de tempo zerando os blocos? Além disso, se este comando existir, estou correto em assumir que uma página no swapfile é zerada antes que um processo do usuário tenha acesso a ela (atenuando as preocupações de segurança)?

    
por UsAaR33 19.06.2010 / 08:19

4 respostas

2

Você não indicou o método que estava tentando evitar.

Tradicionalmente, você emite um comando dd que, por sua vez, envia um arquivo zero do tamanho apropriado, executa mkswap , adiciona a entrada a /etc/fstab e, em seguida, swapon para ativar isto. Anexei um script de exemplo bastante escrito que tenho certeza que tem erros (é tarde onde estou e a entrada fstab está longe de ser perfeita)

#!/bin/bash
# --- allocate 10Gbyte of swap space as 10 separate 1Gbyte files
# --- that are brought online sequentially during processing
for swpidx in 01 02 03 04 05 06 07 08 09 10
do
  dd if=/dev/zero of=/swapfile.$swpidx bs=16738 count=65536
  mkswap /swapfile.$swpidx
  echo "/swapfile.$swpidx    swap    swap    default    0 0" >> /etc/fstab
  swapon -a
done
swapon -s

No entanto, parece que você está tentando evitar esse método. A solução mais rápida que eu poderia fornecer seria usar uma partição de swap, que não requer o processo de zerar, e pode ser colocada online em minutos. Se a sua instância estiver executando o LVM e você tiver um grupo de volumes existente para o qual você poderia criar uma partição, que funcionaria da mesma forma, e a alocação poderia ser concluída em apenas alguns minutos.

Acho que devo mencionar que a criação de um espaço de troca desse tamanho é um pouco incomum, mesmo para um servidor; e só digo isso porque a maioria dos servidores tem vários GB de RAM conectados ao lidar com programas / dados desse tamanho. Não para bisbilhotar ou qualquer coisa, mas você está realmente precisando de muito espaço de troca?

Outra coisa que você pode considerar é reajustar sua carga de trabalho, em vez de tentar alocar dinamicamente o espaço de troca. Embora seja ótimo ter tanto "sob demanda", como você mesmo apontou, ele se tornará rapidamente um gargalo devido à baixa taxa de transferência de E / S na sua instância do servidor. Quando você esgotar sua memória e estiver essencialmente "vivendo em swap", você descobrirá que a taxa de transferência de 20Mbyte / segundo transforma sua instância em um 386SX.

    
por 19.06.2010 / 08:39
1

Eu tenho sucesso usando o comando 'fallocate'. Demora menos de 1 segundo.

sudo fallocate -l 10G /swapfile

Depois, você pode executar o mkswap. Para mais informações, você pode usar o ótimo tutorial do Digital Ocean para o Ubuntu aqui, que pode funcionar sem modificação para outros tipos de linux, em .

    
por 10.09.2018 / 19:49
0

Acontece que você pode usar um dispositivo de loopback para colocar swap no arquivo esparso: link

    
por 25.07.2012 / 03:37
0

Sua instância c1.xlarge deve ter, ou ser capaz de ter, um armazenamento de instâncias locais substancial (efêmero, não persistirá durante o lançamento). Você pode ter que ter certeza de que o espaço é alocado durante o lançamento. Eu não fiz isso, então não posso dar detalhes. Eu definitivamente não usaria um arquivo de troca.

    
por 25.07.2012 / 04:28