chamando fsync () em arquivos na memória

0

Do fsync (2):

fsync() transfers ("flushes") all modified in-core data of (i.e., modified
buffer cache pages for) the file referred to by the file descriptor fd to
the disk  device  (or  other permanent  storage  device)

Quais os efeitos que o fsync pode ter se fd foi obtido por um dos in-memory APIs como shm_open (3p) ou 'memfd_create (2) *? É sempre necessário confirmar explicitamente alterações no objeto de memória?

    
por phg 04.10.2018 / 13:32

1 resposta

1

Sem efeito. Não está associado a armazenamento permanente.

Historicamente, misturar mmap () e read () / write () poderia dar resultados inconsistentes.

O Modern Linux é estruturado com muito cuidado para que funcione corretamente em todas as CPUs suportadas. Embora se o seu sistema for muito obscuro, você ainda pode ser a pessoa infeliz que encontra um bug específico do hardware.

O ponto é que em um sistema operacional compatível com POSIX, pode ser necessário usar msync () para liberar após gravar alterações em um mapa de memória de um arquivo, se você quiser ler () para trabalhar consistentemente depois. Se você quiser entender as regras POSIX, pode ser útil examinar o sinalizador MS_INVALIDATE de msync (), e o que sua existência implica:).

No entanto, o POSIX msync () é especificamente direcionado a mapeamentos associados ao armazenamento persistente. É deixado indefinido o efeito que tem em "objetos de memória compartilhada". Então, essa seria uma maneira bem obscura de responder sua pergunta original.

Também tenha em mente que, apenas porque algo implementa uma chamada de sistema com o mesmo nome que o POSIX, ela não fornece necessariamente as mesmas garantias que o POSIX. Apenas um pequeno número de versões do sistema operacional foi submetido ao pacote de testes POSIX. (Custa dinheiro).

    
por 04.10.2018 / 13:36