garantias de comportamento do cache de páginas e arquivos de log

3

Existe alguma garantia de quando e em que ordem páginas sujas são gravadas no disco? No caso específico de arquivos estruturados de log (arquivos que só são anexados), é possível que páginas sujas se acumulem e sejam gravadas no disco fora de ordem?

Por exemplo, imagine um arquivo de log com as seguintes páginas sujas que se acumularam ...

1: file_offset=16kb page_len=4kb <-- dirty
2: file_offset=20kb page_len=4kb <-- dirty
3: file_offset=24kb page_len=4kb <-- dirty

O Linux irá escrever as páginas sujas acima em ordem ou há uma chance de elas serem escritas fora de ordem? Se a escrita fora de ordem for uma possibilidade, como os bancos de dados e aplicativos que geram arquivos de log lidam com isso? Por exemplo, se a página 3 for escrita primeiro e o sistema operacional falhar antes de poder gravar 1 e 2, haverá um intervalo de 8kb.

    
por offbynull 06.11.2018 / 13:25

1 resposta

1

Will Linux write out the above dirty pages in order or is there a chance they they'll get written out of order?

Não tenho certeza.

If out of order writing is a possibility, how do databases and applications that generate log files handle this?

link

SQLite assumes that the underlying filesystem can reorder write requests and that the page count can be burned into oxide first even though its write request occurred last. So as a second line of defense, SQLite also uses a 32-bit checksum on every page of data in the rollback journal. This checksum is evaluated for each page during rollback while rolling back a journal as described in section 4.4. If an incorrect checksum is seen, the rollback is abandoned. Note that the checksum does not guarantee that the page data is correct since there is a small but finite probability that the checksum might be right even if the data is corrupt. But the checksum does at least make such an error unlikely.

    
por 06.11.2018 / 16:48