Buffer de disco - Disk buffer

Nesta unidade de disco rígido, a placa controladora contém um circuito integrado de RAM usado para o buffer de disco.
Uma unidade de disco rígido Western Digital de 500 GB com um buffer de 16 MB

No armazenamento do computador , o buffer de disco (geralmente denominado ambiguamente cache de disco ou buffer de cache ) é a memória embutida em uma unidade de disco rígido (HDD) atuando como um buffer entre o resto do computador e o disco rígido físico que é usado para armazenamento. As unidades de disco rígido modernas vêm com 8 a 256  MiB dessa memória, e as unidades de estado sólido vêm com até 4 GB de memória cache.

Desde o final dos anos 1980, quase todos os discos vendidos têm microcontroladores incorporados e uma interface ATA , Serial ATA , SCSI ou Fibre Channel . O circuito da unidade geralmente tem uma pequena quantidade de memória, usada para armazenar os dados que vão e vêm dos pratos do disco.

O buffer de disco é fisicamente distinto e usado de maneira diferente do cache de página normalmente mantido pelo sistema operacional na memória principal do computador . O buffer do disco é controlado pelo microcontrolador na unidade de disco rígido e o cache da página é controlado pelo computador ao qual o disco está conectado. O buffer de disco é geralmente muito pequeno, variando entre 8 e 256  MiB , e o cache de página geralmente é composto de memória principal não utilizada. Embora os dados no cache de página sejam reutilizados várias vezes, os dados no buffer de disco raramente são reutilizados. Nesse sentido, os termos cache de disco e buffer de cache são equivocados; a memória do controlador embutido é mais apropriadamente chamada de buffer de disco .

Observe que os controladores de matriz de disco , ao contrário dos controladores de disco , geralmente têm memória cache normal de cerca de 0,5–8 GiB.

Usos

Read-ahead / read-behind

Quando o controlador de um disco executa uma leitura física, o atuador move o cabeçote de leitura / gravação para (ou próximo a) o cilindro correto. Depois de algum ajuste e, possivelmente, uma atuação precisa, o cabeçote de leitura começa a coletar os dados da trilha e tudo o que resta a fazer é esperar até que a rotação do prato traga os dados solicitados.

Os dados lidos antes da solicitação durante essa espera não são solicitados, mas são gratuitos, portanto, normalmente são salvos no buffer do disco, caso sejam solicitados posteriormente.

Da mesma forma, os dados podem ser lidos gratuitamente atrás do solicitado se o cabeçote puder permanecer no caminho porque não há outra leitura para executar ou o próximo acionamento pode começar mais tarde e ainda ser concluído a tempo.

Se várias leituras solicitadas estiverem na mesma trilha (ou próximas em uma trilha em espiral), a maioria dos dados não solicitados entre elas serão lidos à frente e atrás.

Correspondência de velocidade

A velocidade da interface de E / S do disco para o computador quase nunca corresponde à velocidade com que os bits são transferidos de e para o disco rígido . O buffer de disco é usado para que a interface de E / S e o cabeçote de leitura / gravação do disco possam operar em velocidade total.

Aceleração de gravação

O microcontrolador embutido do disco pode sinalizar ao computador principal que a gravação do disco está completa imediatamente após o recebimento dos dados de gravação, antes que os dados sejam realmente gravados no disco. Esse sinal inicial permite que o computador principal continue trabalhando, mesmo que os dados ainda não tenham sido gravados. Isso pode ser um tanto perigoso, porque se a energia for perdida antes que os dados sejam fixados permanentemente na mídia magnética, os dados serão perdidos do buffer do disco e o sistema de arquivos no disco pode ser deixado em um estado inconsistente.

Em alguns discos, esse período vulnerável entre a sinalização da conclusão da gravação e a correção dos dados pode ser arbitrariamente longo, pois a gravação pode ser adiada indefinidamente por solicitações recém-chegadas. Por esse motivo, o uso da aceleração de gravação pode ser controverso. A consistência pode ser mantida, no entanto, usando um sistema de memória com bateria para dados em cache, embora isso seja normalmente encontrado apenas em controladores RAID de ponta .

Como alternativa, o armazenamento em cache pode simplesmente ser desativado quando a integridade dos dados for considerada mais importante do que o desempenho de gravação. Outra opção é enviar dados para o disco em uma ordem cuidadosamente gerenciada e emitir comandos "cache flush" nos lugares certos, o que geralmente é referido como a implementação de barreiras de gravação .

Enfileiramento de comandos

Os discos SATA mais novos e a maioria dos discos SCSI podem aceitar vários comandos enquanto qualquer um deles está em operação por meio de "enfileiramento de comandos" (consulte NCQ e TCQ ). Esses comandos são armazenados pelo controlador integrado do disco até que sejam concluídos. Um benefício é que os comandos podem ser reordenados para serem processados ​​com mais eficiência, de forma que os comandos que afetam a mesma área de um disco sejam agrupados. Se uma leitura referenciar os dados no destino de uma gravação enfileirada, os dados a serem gravados serão retornados.

NCQ é geralmente usado em combinação com buffer de gravação habilitado. No caso de um comando FPDMA de leitura / gravação com o bit Force Unit Access (FUA) definido como 0 e buffer de gravação habilitado, um sistema operacional pode ver a operação de gravação concluída antes que os dados sejam fisicamente gravados na mídia. No caso do bit FUA definido como 1 e buffer de gravação habilitado, a operação de gravação retorna somente depois que os dados são fisicamente gravados na mídia.

Controle de cache do host

Limpeza de cache

Os dados que foram aceitos no cache de gravação de um dispositivo de disco serão eventualmente gravados em pratos de disco, desde que nenhuma condição de fome ocorra como resultado de falha de firmware e que a fonte de alimentação do disco não seja interrompida antes que as gravações em cache sejam forçadas para os pratos de disco. Para controlar o cache de gravação, a especificação ATA incluiu os comandos FLUSH CACHE (E7h) e FLUSH CACHE EXT (EAh). Esses comandos fazem com que o disco conclua a gravação de dados de seu cache e o disco retornará um bom estado depois que os dados do cache de gravação forem gravados na mídia de disco. Além disso, a limpeza do cache pode ser iniciada em pelo menos alguns discos emitindo o comando Soft reset ou Standby (Immediate).

A limpeza obrigatória do cache é usada no Linux para implementação de barreiras de gravação em alguns sistemas de arquivos (por exemplo, ext4 ), junto com o comando de gravação Forçar Acesso à Unidade para blocos de confirmação de diário .

Forçar Acesso à Unidade (FUA)

Force Unit Access (FUA) é uma opção de comando de gravação de E / S que força os dados gravados até o armazenamento estável. Comandos de gravação FUA (WRITE DMA FUA EXT - 3Dh, WRITE DMA QUEUED FUA EXT - 3Eh, WRITE MULTIPLE FUA EXT - CEh), em contraste com os comandos correspondentes sem FUA, gravam dados diretamente na mídia, independentemente de armazenamento em cache de gravação no dispositivo está habilitado ou não. O comando de gravação FUA não retornará até que os dados sejam gravados na mídia, portanto, os dados gravados por um comando de gravação FUA completo estão na mídia permanente, mesmo se o dispositivo for desligado antes de emitir um comando FLUSH CACHE.

FUA apareceu no conjunto de comandos SCSI e mais tarde foi adotado pela SATA com NCQ . O FUA é mais refinado, pois permite que uma única operação de gravação seja forçada a uma mídia estável e, portanto, tem um impacto geral menor no desempenho quando comparado aos comandos que liberam todo o cache de disco, como a família de comandos ATA FLUSH CACHE.

O Windows (Vista e superior) suporta FUA como parte do NTFS Transacional , mas apenas para discos SCSI ou Fibre Channel onde o suporte para FUA é comum. Não se sabe se uma unidade SATA que suporta comandos de gravação FUA irá realmente honrar o comando e gravar dados nos pratos do disco conforme as instruções; portanto, o Windows 8 e o Windows Server 2012, em vez disso, enviam comandos para liberar o cache de gravação do disco após certas operações de gravação.

Embora o kernel do Linux tenha ganhado suporte para NCQ por volta de 2007, o SATA FUA permanece desabilitado por padrão devido às regressões encontradas em 2012, quando o suporte do kernel para FUA foi testado. O kernel do Linux oferece suporte a FUA no nível da camada de bloco.

Veja também

Referências