Eu estou tentando depurar um pouco de problemas que estou tendo com a latência de E / S em um sistema usando o ext4, mas estou um pouco confuso em gostaria de.
O que eu estou querendo saber em particular é em que ponto os blocos de disco são realmente escritos, tanto no diário quanto no "real". Minha suposição até agora é que, quando alguma operação de metadados como, digamos, um rename()
for feita por um processo do usuário, o sistema de arquivos garantirá que os blocos do disco que a operação precisa tocar estejam no cache do buffer, executar o mudanças necessárias na memória nas páginas em cache, enquanto cria uma transação jbd2 que registra as páginas alteradas, e então, em algum ponto posterior, escreve essas páginas no diário, e então, somente quando isso é feito e em algum outro ponto arbitrariamente posterior , escreva-os no sistema de arquivos apropriado. Por favor, corrija-me se estiver errado em algum lugar aqui.
Supondo que eu seja um pouco correto, estou me perguntando o que poderia desencadear a gravação na revista a ser realizada. É quando alguma parte mais geral do FS / VM do kernel decide que é hora de limpar as páginas sujas? É quando não há mais espaço no diário para alocar para mais transações? O que acontece se o kernel precisar recuperar algumas das páginas sujas do cache de buffer? Isso acionaria o jornal e escreveria em sucessão forçada?
Além disso, qual é a terminologia padrão? Quando vejo uma transação sendo referida como "comprometida", o que isso significa, mais precisamente?