A E / S bruta ignora alguns ou a maioria dos serviços fornecidos pelo driver?

0

Conceitos do Sistema Operacional, de Abraham Silberschatz, em 9 de 2012, diz

Raw I/O bypasses all the filesystem services, such as file I/O demand paging, file locking, prefetching, space allocation, file names, and directories.

...

Unfortunately, no operating-system services are then performed on this device.

AE / S bruta também ignora alguns ou a maioria dos serviços fornecidos pelo driver?

Que tipos de serviços fornecidos pelos drivers fazem o bypass de I / O bruto? Se eu entendi, Stephen aqui e aqui corretamente, a E / S não ignora a acessibilidade aleatória fornecida por um driver para uma sequência -addressable-only device, mas ignora o buffer / cache fornecido por um driver?

Altera o driver de dispositivo para um mais primitivo, com muito menos serviços?

Observe que você pode executar E / S bruta por open() com O_DIRECT .

Obrigado.

    
por Tim 07.10.2018 / 21:35

2 respostas

4

O_DIRECT bypasses caches. It does not bypass the driver.

Usar O_DIRECT em um dispositivo de bloco ignora o "cache de buffer" do kernel. "cache de buffer" não faz parte do driver.

Usar o O_DIRECT em um arquivo normal - ou seja, um arquivo que não é um arquivo especial do dispositivo - é uma solicitação para ignorar o "cache de páginas" do kernel. O "cache de páginas" não faz parte do sistema de arquivos, mas também não faz parte do driver.

Em sistemas operacionais mais antigos, o arquivo IO pode ser armazenado em cache em dois locais - cache de página e cache de buffer. Se esse for o caso, O_DIRECT deve ignorar os dois caches.

No Linux e em muitos outros tipos modernos de Unix, o cache de buffer pode realmente depender do cache de páginas. Eles são descritos como tendo um Cache de Buffer Unificado. Uma característica importante é que evita o armazenamento de arquivos IO em dois locais diferentes. Por isso, usa a memória de forma mais eficiente. Pessoas diferentes parecem usar definições conflitantes. Algumas pessoas dizem que não há cache de buffer, apenas um cache de páginas.

Mesmo quando um sistema operacional evita o armazenamento de arquivos em cache do E / S em dois locais diferentes, pode não garantir que o cache seja usado para o E / S de arquivo de maneira consistente com o cache usado ao acessar o arquivo de dispositivo de bloco.

( O_DIRECT não funciona no Linux tmpfs , porque tmpfs é pouco mais que um wrapper em torno do cache da página e do cache do diretório. Foi sugerido que tmpfs poderia permitir que O_DIRECT fosse bem-sucedido. e simplesmente ignorá-lo, para melhorar a compatibilidade. Portanto, eu não diria que O_DIRECT está garantido para ignorar o cache de páginas.)

    
por 07.10.2018 / 22:30
3

Eu não acho que ele signifique a mesma coisa que O_DIRECT; Eu acho que ele está se referindo ao acesso a um dispositivo de bloco como / dev / sda. Abrir / dev / sda irá ignorar o "arquivo de bloqueio, pré-busca, alocação de espaço, nomes de arquivo e diretórios" - então ele é ignorado pelo sistema de arquivos, mas não pelo driver de dispositivo de bloco.

    
por 08.10.2018 / 00:19