Sistema de Arquivo tmpfs :: Admirável Mundo Novo




Muito Bem Vindo

Prezado Leitor, a proposta desse Blog é compartilhar conhecimento com as pessoas que trabalham com Linux, Asterisk, OpenSER, e com tecnologia de voz sobre a rede IP em geral, através de tutoriais, dicas, howto, notícias entre outros assuntos.

Atente para termo de uso do conteúdo do blog no rodapé da página.

sexta-feira, 27 de junho de 2008

Sistema de Arquivo tmpfs




Como eu tenho o habito de tudo que leio em inglês eu faço um apontamento em português, segue mais um documento do Linux como minha pequena contribuição para povoar a Internet com documentação em nossa língua do Pingüim. Como aparece no documento tmpfs.txt nos fontes do kernel:



Sistema de Arquivo tmpfs


O tmpfs é um sistema de arquivo que mantém todos os arquivos em memória virtual.


Tudo que estiver no tmpfs é temporário no sentido de que qualquer arquivo deve ser criado no seu disco rígido. Se você executar um unmount em uma instância do tmpfs, tudo estocado nele será perdido.


O tmpfs coloca tudo nas caches internas do kernel que se expande e contrai para acomodar os arquivos nele contido e é capaz de fazer swap de páginas desnecessárias para colocar no espaço de swap. Tem limites de tamanho máximo que pode ser ajustado via 'mount -o remount ...'


Se você comparar o tmpfs com o ramfs (que foi o modelo para criar o tmpfs) você ganha no mecanismo swapping e na verificação de limite. Outra coisa similar é o RAMdisk (/dev/ram*), que simula um harddisk de tamanho fixo na RAM física, onde você precisa criar um sistema de arquivo ordinário no topo. As ramdisks não conseguem fazer swap e você não tem a possibilidade de redimensioná-lo.


Já que o tmpfs existe completamente na página da cache e no swap, todas as páginas de tmpfs atualmente na memória vão se mostrar ativas quando estiver na cache. Não vão se mostrar como ativas quando estiverem compartilhadas ou algo parecido. Além do mais, você pode verificar o uso atual do RAM+swap de uma instância tmpfs com os comandos df(1) e du(1).


tmpfs tem os seguintes usos:


1) Existe sempre uma montagem interna do kernel que você não verá de jeito nenhum. Isso é usado pelo mapeamento anônimo compartilhado e a memória compartilhada SYSV.


Esta montagem não depende de CONFIG_TMPFS. Se CONFIG_TMPFS não for definida, a parte visível do usuário de tmpfs não é construída. Mas os mecanismos internos sempre estarão presentes.


2) glibc 2.2 e superior espera que tmpfs esteja montado em /dev/shm para a memória compartilhada do POSIX (shm_open, shm_unlink). Adicionando a linha seguinte ao /etc/fstab precisa se preocupar com isso:


tmpfs /dev/shm tmpfs defaults 0 0


Lembre-se de criar o diretório que você tenciona montar tmpfs sobre ele se necessário (/dev/shm é automaticamente criado se você usa devfs).


Essa montagem _não_ é preciso para memória compartilhada SYSV. A montagem interna é usada para isso. (Nas versões 2.3 do kernel era necessário montar o predecessor de tmpfs (shm fs) para usar a memória compartilhada SYSV)


3) Algumas pessoas (incluindo eu) acham muito convenientes montá-lo, por exemplo, sobre os diretórios /tmp e /var/tmp e ter uma grande partição de swap. E agora dar um giro nas montagens dos arquivos tmpfs para fazer funcionar, assim o mkinitrd embutido por muitas distribuições deve ser bem sucedido com um tmpfs /tmp.


4) E muito provavelmente mais coisas sobre as quais Eu não sei:


tmpfs tem três opções de mount de ajuste de tamanho:


size:


O limite de bytes alocados por instância de tmpfs. O padrão é a metade de sua RAM física sem fazer swap. Se você superdimensionar sua instância de tmpfs a máquina vai entrar em deadlock já que o manipulador OOM não será capaz de liberar esta memória.


nr_blocks:


O mesmo que size, mas em blocos de PAGE_CACHE_SIZE.


nr_inodes:


O número máximo de Nós-i desta instância. O padrão é a metade do número de suas páginas de RAM física, ou (numa máquina com highmem) o número de páginas RAM lowmem, em qualquer caso é o menor.


Esses parâmetros aceitam um sufixo k, m ou g para kilo, mega e giga e pode ser alterado no remount. O parâmetro size também aceita um sufixo % para limitar essa instância de tmpfs a esta percentagem de sua RAM física: o padrão, quando nem size ou nr_blocks for especificado, é size=50%.


Se tanto nr_blocks (ou size) e nr_inodes são setado para 0, nem os blocos nem os s-i serão limitados nesta instância. Geralmente não é inteligente montar com tais opções, já que isso permite qualquer usuário com acesso de escrita fazer uso elevado de toda a memória da máquina; mas melhora a escalabilidade desta instância em um sistema com muitas CPUs fazendo uso intenso dela.


Para especificar o diretório de root inicial pode usar as seguintes opções para mount:


mode: As permissões como um número octal

uid: O id do usuário

gid: O id do grupo


Estas opções não têm qualquer efeito sobre o comando remount. Você pode alterar estes parâmetros com os comandos chmod(1), chown(1) e chgrp(1) sobre um filesystem montado.


Assim,

mount -t tmpfs -o size=10G,nr_inodes=10k,mode=700 tmpfs /mytmpfs

Isso vai dar a você a instância de tmpfs em /mytmpfs que pode alocar 10GB RAM/SWAP nos 10240 Nós-i e ele é somente acessível pelo usuário root.



Autor: Christoph Rohland <cr@sap.com>, 1.12.01

Atualizado: Hugh Dickins <hugh@veritas.com>, 01 Setembro 2004





Um comentário:

Unknown disse...

É um site que se inicia com o calor e a competência necessária a área de tecnologia Parabéns senhor Cléviton.

Walter Rodrigues




Creative Commons License
Admirável Mundo Novo: Tudo Sobre Asterisk, OpenSER, Linux e Tecnologias de Voz sobre IP
by Cléviton Mendes de Araújo is licensed under a Creative Commons Atribuição 2.5 Brasil License.