Tempo de compilação do kernel

Tempo de compilação do kernel

Usando o Linux, quando inicializo, tenho automaticamente 16 ramdisks de 16 MB; no entanto, gostaria de criar um ramdisk realmente grande para testar algum software.

Descobri que posso ajustar o tamanho dos ramdisks já existentes no sistema com o parâmetro de inicialização do kernel, ramdisk_sizeno entanto, isso faz com que todos os 16 ramdisks (/dev/ram0 - /dev/ram15) tenham o tamanho especificado. Portanto, se eu quiser criar um disco RAM de 1 GB, precisarei de 16 GB de memória.

Basicamente, quero criar um disco RAM de 10 GB que seria/dev/ram0. Como eu faria isso? Presumo que exista um parâmetro de inicialização do kernel, mas simplesmente não o encontrei.

Responder1

Tempo de compilação do kernel

Existem duas opções de configuração do kernel que você pode definir em seu .configarquivo:

CONFIG_BLK_DEV_RAM_COUNT=1
CONFIG_BLK_DEV_RAM_SIZE=10485760

Isso configurou meu kernel para criar um disco RAM de 10G no momento da inicialização.

Notas:

  • CONFIG_BLK_DEV_RAM_SIZEestá em KB.
  • Não especifique mais memória do que a RAM realmente disponível em seu computador.
  • Procure menuconfigem Drivers de dispositivos-> Bloquear dispositivos.

Tempo de inicialização

Você pode especificar o tamanho dos discos RAM criados por meio do parâmetro de inicialização do kernel ramdisk_size. Por exemplo:

kernel /vmlinuz-2.6.32.24 ro root=LABEL=/ rhgb quiet ramdisk_size=10485760

Agora posso inicializar minha máquina e criar um sistema de arquivos nela, montá-la e usá-la exatamente como um dispositivo de bloco.

# mkfs.xfs /dev/ram0
# mount /dev/ram0 /mnt/ramdisk

Fontes:

  1. http://www.vanemery.com/Linux/Ramdisk/ramdisk.html[morto]
  2. https://www.kernel.org/doc/Documentation/blockdev/ramdisk.txt

Responder2

Você deveria usartmpfspor isso.

mount -t tmpfs -o size=10g none /mnt/point

Responder3

Para criar um disco RAM grande após a inicialização sem mexer nos parâmetros do kernel. Use tmpfs, crie um arquivo, monte-o via loop e monte-o através de um sistema de arquivos:

mount -t tmpfs -o size=200M tmpfs temp/
cd temp/
dd if=/dev/zero of=disk.img bs=1M count=199
losetup /dev/loop0 disk.img
mkfs.ext4 /dev/loop0
cd ..
mount /dev/loop0 temp2/

Provavelmente há uma pequena penalidade no desempenho ao passar por várias camadas diferentes... mas pelo menos funciona.

Responder4

O objetivo de um ramdrive é a velocidade. Tmpfs não é uma unidade. Os dispositivos de loop não são unidades, mas você pode colocar uma imagem de unidade em um dispositivo de loop. Os discos Ram "são" unidades e unidades muito rápidas. Tente executar:

hdparm -t /dev/sda 

e então:

hdparm -t /dev/ram0

Você verá o que quero dizer! Mas o hdparm às vezes destrói a unidade RAM. Então, você tem que fazer isso de novo.

Às vezes não há dispositivos /dev/ram. Para fazer um:

mknod -m 0777 /dev/ram0 b 1 0 

mas não terá nenhum tamanho. Para dar tamanho:

dd if=/dev/zero of=/dev/ram0

e irá parar quando a unidade estiver cheia. O tamanho máximo é determinado pelo parâmetro de configuração do kernel: CONFIG_BLK_DEV_RAM_SIZE.

Depois é só formatar, ou seja

mke2fs /dev/ram0

E monte-o:

mount /dev/ram0 /mnt/ramdrive

Um dos meus favoritos é a depuração de código armazenado em um ramdrive. As compilações têm pelo menos 10x a velocidade do código armazenado em um disco rígido. As tabelas de banco de dados armazenadas no ramdrive também voam, mas você deve ter um script que grave no disco rígido periodicamente. A maioria dos administradores não tem coragem de colocar dados em discos RAM. E algumas mesas são muito grandes.

informação relacionada