O initramfs pode ser paginado para trocar o disco?

7

Estou usando initramfs para inicializar o Centos via PXE. A% de memória utilizada initramfs está listada no valor "em cache" em /proc/meminfo ou via free .

Como preciso calcular os dados de desempenho, preciso saber se a memória usada pelo initramfs é recuperável (isto é, pode ser trocada para o disco) ou não. Normalmente, apenas uma parte muito pequena da árvore do sistema de arquivos / está realmente em uso, portanto, a maioria dos initramfs pode ser trocada.

Ao ler sobre isso, recebi informações conflitantes. Algumas fontes afirmaram que initramfs se comporta como initrd e é baseado em ramfs , o que significa que a memória reivindicada não pode ser paginada para troca. Outras fontes afirmam que initramfs é essencialmente tmpfs , o que, por sua vez, implica que ele possa ser paginado para trocar.

Qual é a verdade? As partes não usadas do sistema de arquivos initramfs podem ser paginadas para trocar espaço?

    
por dfens123 29.05.2013 / 13:22

2 respostas

6

EDIT: resposta atualizada / corrigida.

Embora a documentação do kernel sobre este tópico diz que "Rootfs é um instância especial de ramfs (ou tmpfs, se isso estiver ativado) [...] ", é na realidade ainda um ramfs, como mostra uma pequena olhada no código ( rootfs não é mencionado em mm/shmem.c ) .

Alguns patches (ver, por exemplo, aqui e aqui ) foram enviados para a lista de discussão do kernel Linux (lkml) para mudar isso. Mas eles não foram aceitos. Uma razão foi que você normalmente não ativou a troca durante a fase initramfs ou em sistemas embarcados.

A imagem do initramfs é extraída para o rootfs. Antes que o espaço do usuário (geralmente switch_root chamado de /init ) alterna para a nova raiz, ele exclui o conteúdo dos rootfs de forma que apenas a quantidade mínima de memória de um ramfs vazio permaneça. Então, depois disso, você basicamente pode ignorar seu uso de memória e a pergunta se ele pode ser trocado é quase irrelevante.

    
por 29.05.2013 / 13:47
1

Como você disse, os dados do arquivo rootfs só podem ser paginados se forem implementados com tmpfs , não ramfs .

Desde o Linux v3.12, tmpfs é usado em alguns casos. Se eu ler o código corretamente, isso somente acontecerá se você não passar a opção root= . Você pode forçar o uso de ramfs passando rootfstype=ramfs , mas você não pode forçar tmpfs passando 'rootfstype = tmpfs.

Se você tiver o comando stat , stat -f . confirmará se você está em um ramfs equivalente ou um tmpfs equivalente ou um tipo diferente de sistema de arquivos.

Isso foi implementado em:

6e19eded3684 "initmpfs: use initramfs if rootfstype= or root= specified "

Command line option rootfstype=ramfs to obtain old initramfs behavior, and use ramfs instead of tmpfs for stub when root= defined (for cosmetic reasons).

É um pouco confuso, por dois motivos. Em primeiro lugar, substitui efetivamente a lógica no commit que vem imediatamente antes:

16203a7a942 "initmpfs: make rootfs use tmpfs when CONFIG_TMPFS enabled"

Conditionally call the appropriate fs_init function and fill_super functions.

Em segundo lugar, o teste para root= não parece ser mencionado na documentação, mesmo na v4.17:

https://github.com/torvalds/linux/blob/v4.17/Documentation/filesystems/ramfs-rootfs-initramfs.txt

If CONFIG_TMPFS is enabled, rootfs will use tmpfs instead of ramfs by default. To force ramfs, add "rootfstype=ramfs" to the kernel command line.

    
por 13.07.2018 / 20:27