Ultimamente tenho ficado curioso sobre os vários sistemas de arquivos baseados em memória do kernel Linux.
Note:
No que me diz respeito, as perguntas abaixo devem ser consideradas mais ou menos opcionais quando comparadas com uma melhor compreensão daquelas colocadas no título. Peço-lhes abaixo porque acredito que respondê-las pode me ajudar a entender melhor as diferenças, mas como meu entendimento é reconhecidamente limitado, segue-se que outras pessoas podem conhecer melhor. Estou preparado para aceitar qualquer resposta que enriquece meu entendimento das diferenças entre os três sistemas de arquivos mencionados no título.
Por fim, acho que gostaria de montar um sistema de arquivos utilizável, hugepages,
embora algumas pesquisas leves (e ainda mais leves) tenham me levado a acreditar que a rewritable hugepage mount
não é uma opção. Estou enganado? Quais são os mecanismos em jogo aqui?
Também sobre hugepages:
uname -a
3.13.3-1-MANJARO \
#1 SMP PREEMPT \
x86_64 GNU/Linux
tail -n8 /proc/meminfo
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 8223772 kB
DirectMap2M: 16924672 kB
DirectMap1G: 2097152 kB
(Aqui estão as versões em texto completo de / proc / meminfo e / proc / cpuinfo )
O que está acontecendo no item acima? Já estou alocando hugepages?
Existe uma diferença entre as DirectMap
páginas de memória ehugepages?
Atualizar Depois de um empurrãozinho do @Gilles, adicionei mais 4 linhas acima e parece que deve haver uma diferença, embora eu nunca tivesse ouvido falar DirectMap
antes de puxar isso tail
ontem ... talvez DMI
ou algo assim?
Só um pouco mais ...
Na falta de sucesso no hugepages
empreendimento e na suposição de backups em disco rígido de qualquer arquivo de imagem, quais são os riscos de montar loops de tmpfs?
Meu sistema de arquivos está sendo swapped
o pior cenário? Entendo que o tmpfs
cache do sistema de arquivos está montado - meu arquivo de loop montado pode ser pressionado sem memória? Existem ações atenuantes que posso tomar para evitar isso?
Por último - exatamente o que é shm,
afinal? Em que difere ou inclui um hugepages
ou outrotmpfs?
fonte
/proc/meminfo
que contêmHugePage
(ou a sua versão do kernel não as possui)? Em que arquitetura está (x86_64, suponho)?Respostas:
Não há diferença entre tmpfs e shm. tmpfs é o novo nome para shm. shm significa SHaredMemory.
Veja: Linux tmpfs .
A principal razão pela qual o tmpfs é usado até hoje é esse comentário no meu / etc / fstab na minha caixa do gentoo. O BTW Chromium não será construído com a linha ausente:
que saiu da documentação do kernel do linux
Citação:
No Documento transparente do kernel Hugepage:
Novo comentário depois de fazer alguns cálculos:
HugePage Tamanho: 2MB
HugePages Usado: Nenhum / Desligado, como evidenciado por todos os 0s, mas ativado conforme os 2Mb acima.
DirectMap4k: 8.03Gb
DirectMap2M: 16.5Gb
DirectMap1G: 2Gb
Usando o parágrafo acima sobre otimização no THS, parece que 8 GB de sua memória estão sendo usados por aplicativos que operam usando mallocs de 4k, 16,5Gb, foram solicitados por aplicativos usando mallocs de 2M. Os aplicativos que usam mallocs da 2M estão imitando o HugePage Support, transferindo as seções 2M para o kernel. Este é o método preferido, porque uma vez que o malloc é liberado pelo kernel, a memória é liberada para o sistema, enquanto a montagem de tmpfs usando Hugepage não resultaria em uma limpeza completa até que o sistema fosse reiniciado. Por fim, o mais fácil, você tinha 2 programas abertos / em execução que solicitavam um malloc de 1Gb
Para aqueles de vocês que não conhecem um malloc, é uma estrutura padrão em C que significa ALLOCation de memória. Esses cálculos servem como prova de que a correlação do OP entre o DirectMapping e o THS talvez esteja correta. Observe também que a montagem de um HUGEPAGE ONLY fs resultaria apenas em ganhos de incrementos de 2 MB, enquanto permitir que o sistema gerencie a memória usando THS ocorre principalmente em blocos de 4k, o que significa que, em termos de gerenciamento de memória, cada chamada malloc salva o sistema em 2044k (2048 - 4 ) para algum outro processo usar.
fonte
Para resolver o problema "DirectMap": o kernel possui um mapeamento linear ("direto") da memória física , separado dos mapeamentos virtuais alocados a cada processo do usuário.
O kernel usa as maiores páginas possíveis para esse mapeamento para reduzir a pressão TLB.
O DirectMap1G fica visível se sua CPU suportar páginas de 1 GB (Barcelona em diante; alguns ambientes virtuais as desativam) e se ativada no kernel - o padrão é 2.6.29+.
fonte
Não há diferença entre
shm
etmpfs
(na verdade,tmpfs
é apenas o novo nome do antigoshmfs
).hugetlbfs
é umtmpfs
sistema de arquivos baseado em alocação de espaço a partir de páginas enormes do kernel e precisa de alguma configuração adicional disponível (como usar isso é explicado em Documentação / vm / hugetlbpage.txt ).fonte
DirectMap
alguma naprocfs man
página. Por quê?