Referência de buffer do Linux I / O

5

Alguém pode me indicar uma referência bastante completa sobre o sistema Linux I / O, principalmente como todos os buffers e caches são manipulados e liberados?

Meu entendimento até agora é que existem

  • Buffers de aplicativo (incluindo buffers fread / fwrite alocados pela libc)
  • Os buffers VFS que lêem e escrevem agem em
  • páginas que são mmaped (mesmo que buffers VFS?)
  • Buffers específicos do sistema de arquivos (o mesmo que os buffers VFS? O sistema de arquivos fornece alguma política, pelo menos, por exemplo, o XFS é mais agressivo sobre o cache de gravação)
  • O driver de disco provavelmente tem alguns buffers, antes de traduzir para comandos SCSI / ATA e passar para o ...
  • O controlador de disco pode ter cache volátil, com bateria ou sem cache. Quais são os mecanismos para liberar caches voláteis? Como as barreiras são fatoradas?
  • O próprio disco pode ter algum cache, com os mesmos problemas de descarga do controlador.

Obviamente, esta é uma conta bastante confusa, mas espero que mostre o tipo de informação que estou procurando. Eu encontrei a documentação interna do Linux bastante escassa; talvez haja um bom livro que cubra tudo isso? Discussão de onde os buffers são copiados vs. transferidos também seria bom.

    
por Ben Jencks 27.11.2010 / 06:39

1 resposta

3

Uau. Obviamente, você está atrás de peças e peças muito particulares para resolver um problema em particular. Ou então você não percebe que acabou de assinar a próxima semana de sua vida para pesquisar. Passar por todos os elementos internos do kernel para os seus tópicos será doloroso, então aqui está o que você precisa fazer: perguntar um , simples e iniciar o rastreamento. Dada uma pergunta simples e não confusa para focar, há muitos desenvolvedores na Lista de discussão do Kernel do Linux que são especialistas em explicando porque os internos se comportam da maneira que fazem na sua situação. Pode levar algumas rodadas, mas elas podem ajudar.

Outro método que você pode usar, com uma única pergunta, é rastrear uma atividade questionável no kernel e aprender sobre as partes individuais que ele toca, em vez de tentar entender tudo. Felizmente para você, existe um comando chamado ftrace ou mesmo SystemTap ( stap ) que iniciará sua aventura. Muitos desenvolvedores do kernel querem que mais pessoas façam perguntas importantes sobre o kernel e essas ferramentas irão ajudá-los a fazer isso. Linux Weekly News publicou vários artigos sobre ftrace ultimamente: Rastreamento: não há falta de opções (julho de 2008), Uma olhada no ftrace (mar 2009), Depurando o kernel usando ftrace - Parte 1 (dezembro de 2009) e Parte 2 (dezembro de 2009), Secrets da função Ftrace (Jan 2010) e, finalmente, o bom e velho documentação que acompanha o kernel (2008).

Usando um utilitário de rastreamento, você aprende sobre como o kernel armazena em buffer e uma série de outras coisas exclusivas de seu kernel, hardware (controlador, chipset, CPU, tecnologia de disco), sistema de arquivos, agendador de I / O. Cada distribuição é diferente a esse respeito. Se você tiver dispositivos de armazenamento complexos (Cluster FS, SAN com Enterprise Array, SSD), esteja preparado para aprender também sobre suas peculiaridades. Uma palavra de aviso sobre sistemas de arquivos em cluster: eles freqüentemente envolvem um componente do espaço do usuário que pode causar muitos atrasos inesperados que a maioria de nós atribui ao kernel, mas são muito mais complexos que isso.

De longe, o melhor texto que consegui encontrar até agora foi escrito por Neil Brown em 2009, intitulado " padrões de design do kernel Linux ". Neil atinge muitos tópicos que você mencionou e muitos mais.

Uma coisa que eu sei com certeza é que esse cenário está mudando continuamente, especialmente na arena de agendamento. Apenas tente entender o que está acontecendo em seu canto específico e conte suas bênçãos que você não precisa codificar para um desses componentes.

    
por 30.11.2010 / 05:59