RAMFS?? TMPFS ?? Desempenho maximo de entrada e saida usando o RAM

Memoria Ram
Em diversas situações precisamos de muita velocidade de escrita e leitura em disco, um caso clássico que eu sempre sofro (sofria, ufa!) é fazer parse de logs de firewall ou servidores WEB com muito acesso onde o IO de disco é um enorme gargalo.
Dai me lembrei no meu velho Windows 9x que tinha uma ótima solução chamada “Microsoft RAMDrive” que consiste basicamente em usar uma parte da memoria RAM como se fosse um disco.
Pesquisando um pouco encontrei dois métodos de usar isto em servidores, levando em conta que hoje memoria ram é barato (minha maquina por ex. tem 16gb) acaba sendo uma solução bem viável quando precisa de desempenho máximo.

RAMFS e TMPFS

Ambos são sistemas de arquivos que já vem incluso em todos os kernel, sendo necessário para começar a usar apenas “montar” um deles em uma pasta e lógico, ter memoria livre. A diferença é basicamente:

TMPFS

Tem tamanho fixo, caso “encha” da mensagem de erro e pode usar SWAP caso não tenha ram livre.

1
2
mount –t tmpfs –o size=tamanhomegas tmpfs ponto de montagen
mount –t tmpfs –o size=100M tmpfs /mnt/ram

E no fstab ficaria

1
tmpfs /mnt/ram tmpfs size=50m 0 0
RAMFS

Tem um tamanho inicial, porém caso seja necessário ele cresce sozinho, não usa SWAP e caso esteja ficando sem memoria ele “empurra” as outras coisas para o swap.

1
2
Mount –t ramfs –o size=tamanhomega ramfs ponto de montagen
Mount –t ramfs –o size=100M ramfs /mnt/ram

E no fstab ficaria

1
ramfs /mnt/ram ramfs size=50m 0 0

Benchmark

Escrita no ram

1
2
3
4
5
6
7
8
[root@Duex ~]# time dd if=/dev/zero of=/mnt/ram/arquivo bs=1024k count=8192
8192+0 registros de entrada
8192+0 registros de saída
8589934592 bytes (8,6 GB) copiados, 3,95082 s, 2,2 GB/s
 
real	0m3.955s
user	0m0.000s
sys	0m3.943s

Leitura no ram

1
2
3
4
5
6
7
8
[root@Duex ~]# time dd if=/mnt/ram/arquivo of=/dev/zero
16777216+0 registros de entrada
16777216+0 registros de saída
8589934592 bytes (8,6 GB) copiados, 7,22892 s, 1,2 GB/s
 
real	0m7.233s
user	0m1.517s
sys	0m5.700s

Escrita no disco

1
2
3
4
5
6
7
8
[root@Duex ~]# time dd if=/dev/zero of=arquivo bs=1024k count=8192
8192+0 registros de entrada
8192+0 registros de saída
8589934592 bytes (8,6 GB) copiados, 68,0984 s, 126 MB/s
 
real	1m8.142s
user	0m0.077s
sys	0m17.682s

Leitura do disco

1
2
3
4
5
6
7
8
[root@Duex ~]# time dd if=arquivo of=/dev/zero
16777216+0 registros de entrada
16777216+0 registros de saída
8589934592 bytes (8,6 GB) copiados, 60,3928 s, 142 MB/s
 
real	1m0.534s
user	0m5.976s
sys	0m23.055s

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *