como o o_sync dispara o pdflush?

2

Quando escrevo usando o_sync , a chamada de gravação retorna quando os dados são gravados no disco. Mas como o_sync força o Linux a gravar os dados no disco?

Normalmente, você teria que esperar no máximo dirty_expire_centisecs +dirty_writeback_centisecs (30segundos + 5segundos) no pior dos casos, para pdflush gravar os dados no disco.

Será que o_sync define o dirty_expire_centisecs para os dados como inferiores ou acontece alguma outra coisa (manualmente chama flush)?

Por favor, forneça fontes para sua resposta. Não encontrei nada sobre esse assunto.

    
por ju ho 10.11.2015 / 15:20

2 respostas

2

Como Sankalp mencionou, o thread pdflush não está envolvido com gravações em um arquivo com o conjunto de sinalizadores O_SYNC. Isso acontece no contexto do thread. Para obter o caminho de código exato tomado pelo kernel, você poderia usar o ftrace para rastrear o syscall de gravação. Eu posso testar o mesmo e documentar aqui no meu blog

    
por 11.11.2015 / 03:52
2

Não é necessário que a limpeza aconteça no contexto do encadeamento pdflush. No caso do O_SYNC e da chamada fsync, o flush ocorre no contexto do encadeamento que invoca a chamada do sistema write / sync. O caminho do código no caso o_sync vai aproximadamente como:

__ vfs_write - > (f_op- > write_iter) / generic_file_write_iter - > generic_write_sync - > (f_op- > fsync) - > filemap_write_and_wait_range - > do_writepages - > write_cache_pages - > (f_op- > writepage)

    
por 10.11.2015 / 21:05