Como pdflush, kjournald, swapd, etc interoperam?

17

Recentemente, vi uma pergunta que desencadeou esse pensamento. Não foi possível encontrar uma resposta aqui ou através da máquina do Google. Basicamente, estou interessado em saber como a arquitetura de E / S do kernel é em camadas. Por exemplo, a kjournaldexpedição para pdflushou o contrário? Minha suposição é que pdflush(sendo mais genérico para as E / S de armazenamento em massa), ele fica em um nível mais baixo e aciona o SCSI / ATA / qualquer comando necessário para realmente executar as gravações e kjournaldlida com estruturas de dados do sistema de arquivos de nível superior antes da gravação. Também pude ver o contrário, com a kjournaldinterface direta com as estruturas de dados do sistema de arquivos e o pdflushdespertar de vez em quando para gravar páginas de pagecache sujas no dispositivo através dekjournald. Também é possível que os dois não interajam por algum outro motivo.

Basicamente: eu preciso de alguma maneira de visualizar (gráfico ou apenas uma explicação) a arquitetura básica usada para despachar E / S para armazenamento em massa no kernel do Linux.

Bratchley
fonte
1
É isso que você está procurando? oss.org.cn/ossdocs/linux/kernel/a1/index.html
slm
1
Também há esta apresentação: 7º slide em: slideshare.net/LukCzerner/local-file-systems-update
slm
1
Também encontrei este diagrama: thomas-krenn.com/en/oss/linux-io-stack-diagram/…
slm
1
Eu encontrei este mapa interativo kernel que ajuda a mostrar como os vários componentes do kernel andam juntos: makelinux.net/kernel_map
SLM
1
Mais um recurso, páginas 19-24: Linux Performance and Tuning Guidelines . Este parece exatamente o que você está procurando.
slm

Respostas:

21

Antes de discutir os detalhes a respeito pdflush, kjournald, andkswapd`, vamos primeiro obter um pouco de fundo sobre o contexto do que exatamente estamos falando em termos do Kernel Linux.

A arquitetura GNU / Linux

A arquitetura do GNU / Linux pode ser pensada em 2 espaços:

  • Do utilizador
  • Núcleo

Entre o Espaço do Usuário e o Espaço do Kernel, fica a GNU C Library ( glibc). Isso fornece a interface de chamada do sistema que conecta o kernel aos aplicativos de espaço do usuário.

O Kernel Space pode ser subdividido em 3 níveis:

  • Interface de chamada do sistema
  • Código do Kernel Independente da Arquitetura
  • Código Dependente de Arquitetura

A Interface de Chamada do Sistema, como o próprio nome indica, fornece uma interface entre o glibce o kernel. O Código do Kernel Independente da Arquitetura é composto pelas unidades lógicas, como o VFS (Sistema Virtual de Arquivos) e o VMM (Gerenciamento de Memória Virtual). O Código Dependente da Arquitetura é o componente que é o código específico da plataforma e do processador para uma determinada arquitetura de hardware.

Diagrama da arquitetura GNU / Linux

                                 ss do arco gnu / linux.

No restante deste artigo, focaremos nossa atenção nas unidades lógicas do VFS e VMM dentro do espaço do kernel.

Subsistemas do kernel GNU / Linux

                                    ss do kernel com

Subsistema VFS

Com um conceito de alto nível de como o kernel GNU / Linux está estruturado, podemos nos aprofundar um pouco mais no subsistema VFS. Este componente é responsável por fornecer acesso aos vários dispositivos de armazenamento em bloco que, por fim, são mapeados para um sistema de arquivos (ext3 / ext4 / etc.) Em um dispositivo físico (HDD / etc.).

Diagrama do VFS

ss de vfs

Este diagrama mostra como write()o processo de um usuário atravessa o VFS e, finalmente, desce até o driver do dispositivo onde está gravado no meio de armazenamento físico. Este é o primeiro lugar onde encontramos pdflush. Este é um daemon responsável pela liberação de blocos de dados sujos e de buffer de metadados para a mídia de armazenamento em segundo plano. O diagrama não mostra isso, mas há outro daemon, kjournaldque fica ao lado pdflush, executando uma tarefa semelhante ao gravar blocos de diário sujos no disco. NOTA: Os blocos de diário são como sistemas de arquivos como ext4 e JFS controlam as alterações no disco em um arquivo, antes que essas alterações ocorram.

Os detalhes acima são discutidos mais adiante neste documento .

Visão geral das write()etapas

Para fornecer uma visão geral simples das operações do sistema de E / S, usaremos um exemplo em que a função write()é chamada por um aplicativo Espaço do Usuário.

  1. Um processo solicita a gravação de um arquivo através da write()chamada do sistema.
  2. O kernel atualiza o cache da página mapeado para o arquivo.
  3. Um thread do kernel pdflush cuida da liberação do cache da página no disco.
  4. A camada do sistema de arquivos junta cada buffer de bloco a bio struct( consulte 1.4.3, “Camada de blocos” na página 23 ) e envia uma solicitação de gravação para a camada de dispositivo de bloco.
  5. A camada de dispositivo de bloco obtém solicitações das camadas superiores e executa uma operação de elevador de E / S e coloca as solicitações na fila de solicitações de E / S.
  6. Um driver de dispositivo, como SCSI ou outros drivers específicos, cuidará da operação de gravação.
  7. Um firmware de dispositivo de disco realiza operações de hardware como cabeçote de busca, rotação e transferência de dados para o setor no prato.

Subsistema VMM

Continuando nosso mergulho mais profundo, agora podemos analisar o subsistema VMM. Este componente é responsável por manter a consistência entre a memória principal (RAM), a troca e o meio de armazenamento físico. O principal mecanismo para manter a consistência é bdflush. Como as páginas da memória são consideradas sujas, elas precisam ser sincronizadas com os dados contidos na mídia de armazenamento. bdflushcoordenará com os pdflushdaemons para sincronizar esses dados com o meio de armazenamento.

Diagrama do VMM

                ss do VMM

Troca

Quando a memória do sistema se torna escassa ou o timer de troca do kernel expira, o kswapddaemon tentará liberar páginas. Enquanto o número de páginas gratuitas permanecer acima free_pages_high, kswapdnão fará nada. No entanto, se o número de páginas gratuitas cair abaixo, kswapdo processo de reclame será iniciado. Depois de kswapdmarcar as páginas para realocação, bdflushcuidará de sincronizar as alterações pendentes no meio de armazenamento, através dos pdflushdaemons.

Referências e Leituras Adicionais

slm
fonte
1
Vou esperar um dia antes de aceitar isso como resposta e conceder a recompensa para que ela permaneça na página "recompensa". Dessa forma, quem já viu isso antes tem a chance de perceber que agora tem uma resposta.
Bratchley
1
Mais uma vez obrigado, BTW. Você realmente se esforçou ao pesquisar isso.
Bratchley