é escrita assíncrona 'write ()'?

0

Dos conceitos do sistema operacional

Another issue that can affect the performance of I/O is whether writes to the file system occur synchronously or asynchronously.

Synchronous writes occur in the order in which the disk subsystem receives them, and the writes are not buffered. Thus, the calling routine must wait for the data to reach the disk drive before it can proceed.

In an asynchronous write, the data are stored in the cache, and control returns to the caller.

Most writes are asynchronous. However, metadata writes, among others, can be synchronous. Operating systems frequently include a flag in the open system call to allow a process to request that writes be performed synchronously. For example, databases use this feature for atomic transactions, to assure that data reach stable storage in the required order.

  1. Na gravação síncrona, "as gravações não são armazenadas em buffer". A gravação síncrona e a E / S direta são o mesmo conceito?

  2. "Os sistemas operacionais freqüentemente incluem um sinal na chamada de sistema open para permitir que um processo solicite que as gravações sejam realizadas de forma síncrona." Ao chamar quais funções você pode obter uma gravação síncrona e como as chama? É open() com O_DIRECT ?

  3. É correto que write() por padrão esteja bloqueando e retorne quando terminar de gravar no cache de buffer, não necessariamente no arquivo? É write() síncrona escrever pela definição na citação?

  4. aio_write() também é chamado de E / S assíncrona. O aio_write() é assíncrono ou não?

Obrigado.

    
por Tim 14.10.2018 / 01:09

1 resposta

3

Re O_SYNC e O_DIRECT, eles não são os mesmos:

  • O_SYNC causa sincronizações de disco, mas as coisas vão nos caches, então você leu o cache
  • O_DIRECT ignora os caches, mas não sincroniza
  • No caso de (por exemplo) raid, o AFAIK O_DIRECT poderia resultar em coisas enviadas para raid mas não inferiores a
  • O_SYNC provavelmente resultará em sincronizações de disco completas, o que fará com que os dados de outras partições e outros arquivos sejam sincronizados e também liberará os caches de hardware

Re-bloqueio, sim e não:

  • Se o sistema de arquivos não for montado com sincronização, ele retornará, desde que os dados tenham sido copiados para o kernel. Contanto que haja espaço livre no buffer no kernel, ele será instantâneo. Quando não houver mais espaço no buffer, ele será bloqueado até que haja.
  • Se o sistema de arquivos for montado com sincronização, ele bloqueará

Abra novamente, em man 2 open :

   O_SYNC Write operations on the file  will  complete  according  to  the
          requirements  of  synchronized I/O file integrity completion (by
          contrast with the synchronized  I/O  data  integrity  completion
          provided by O_DSYNC.)

Veja a página de manual para mais informações sobre isso.

    
por 14.10.2018 / 01:51

Tags