Discos SATA que manipulam o cache de gravação corretamente?

15

É bastante comum ver conselhos para desativar o cache de gravação em discos individuais usados ​​para bancos de dados, porque, caso contrário, alguns discos reconhecerão gravações que ainda não foram feitas na superfície do disco.

Isso implica que alguns discos não reconhecem gravações até chegarem à superfície do disco (atualização: ou relatam com precisão quando solicitados a liberar o cache. Onde posso encontrar esses discos ou onde posso procurar informações autorizadas? de onde encontrar esses discos?

Estou configurando alguns servidores de banco de dados que realmente se beneficiariam do uso do cache de gravação, mas o aplicativo é sensível ao preço e prefiro não dobrar o custo do meu subsistema de disco para alguns controladores RAID em cache, porque não tenho informações suficientes para saber se posso confiar no cache em cada unidade.

eas
fonte
O linux permite que o cache de gravação seja desabilitado unidade por unidade via hdparam. Para unidades SATA, acredito que isso precise ser script para ser reaplicado a cada reinicialização. Eu posso seguir esse caminho se ainda conseguir atingir nossos requisitos de desempenho sem usar um controlador de invasão com bateria. Prefiro usar o RAID de software sempre que possível, pois é mais simples e mais barato. De qualquer forma, definitivamente terei um no-break.
eas

Respostas:

15

De um modo geral, em resposta direta à sua pergunta, não conheço nenhuma das principais marcas de unidades SATA de que a própria unidade teve erros em relação à operação adequada com o cache de gravação ativado. Ou seja, somente da perspectiva da unidade, a unidade faz o que deve fazer da perspectiva do armazenamento em cache. Eu também observaria que, mesmo quando o cache de gravação está ativado, o atraso de uma gravação em disco no cabo SATA para a mídia rotativa fisicamente atualizada ainda é muito curto (~ 50 a 100ms normalmente). Não é como se os dados do cache sujo estivessem parados por alguns segundos ... a unidade está tentando continuamente obter dados sujos do cachena mídia física assim que possível. Não se trata apenas de segurança de dados, mas de estar pronto para aceitar gravações futuras sem demora (por exemplo, postagem de gravação).

O problema que surge quando o armazenamento em cache está ativado é que a ordem de gravação na unidade pelo cabo SATA e a ordem de gravação na mídia rotativa não são as mesmas. Isso nunca pode causar um problema, a menos que você tenha uma falta de energia ou uma falha no sistema antes que todo o conteúdo do cache chegue ao disco. Por quê? ->

O problema que pode surgir aqui é relativo à robustez da transação do sistema de arquivos e / ou do conteúdo do arquivo de banco de dados para essas gravações perdidas fora de ordem. De fato, aquelas gravações potencialmente perdidas fora de ordem podem teoricamente corromper a integridade da lógica da transação que, de outra forma, seria garantida pelas gravações em disco que ocorrem em uma ordem muito específica para a mídia.

Agora, é claro, os projetistas do sistema de arquivos, bancos de dados, controladores RAID etc. estão cientes (ou certamente devem estar cientes) desse fenômeno em relação ao cache de gravação. O cache de gravação é extremamente desejável do ponto de vista de desempenho na maioria dos cenários de E / S de acesso aleatório. De fato, ter o cache de gravação disponível é um elemento-chave para poder ter algum benefício real para o mais avançado Native Command Queuing ( NCQ)) que é suportado em SATA mais recente e nas últimas gerações de implementações de PATA. Portanto, para garantir o pedido à mídia física em determinados momentos críticos, o sistema de arquivos e / ou o aplicativo etc. podem solicitar especificamente uma liberação dos caches de gravação para a mídia. Na conclusão dessa solicitação de sincronização - tudo o que está pendente de (potencialmente) buffers de arquivo, cache do disco do SO, cache físico do disco etc. está na mídia de acordo com o design do sistema de transações nas operações críticas certas. Ou seja, isso acontece corretamente se os programadores fizerem as chamadas corretas no topo E todos os elementos dessa cadeia de camadas de software e hardware fizeram seu trabalho corretamente. ou seja: não há erros nesse sentido na unidade, nos controladores RAID, nos drivers de disco, nos caches do SO, no sistema de arquivos, no mecanismo de banco de dados etc. É um monte de software que tudo precisa funcionar exatamente da maneira certa. Além disso, verificar a correção a esse respeito é muito difícil, porque em quase todas as situações normalmente a ordem de gravação não importa ... e os cenários de falha de energia e falha são testes difíceis de construir. Portanto, no final, "desativando o cache de gravação" em uma ou mais das várias camadas e / ou significados deste termo ... tem a reputação de "corrigir" certos tipos de problemas. De fato, desligar os comportamentos de armazenamento em cache de gravação do controlador RAID ou dos caches de disco do sistema operacional, ou da unidade etc. está evitando um ou mais erros no sistema ..... e a origem desse conhecimento. e cenários de falha de energia e falha são testes difíceis de construir. Portanto, no final, "desativando o cache de gravação" em uma ou mais das várias camadas e / ou significados deste termo ... tem a reputação de "corrigir" certos tipos de problemas. De fato, desligar os comportamentos de armazenamento em cache de gravação do controlador RAID ou dos caches de disco do sistema operacional, ou da unidade etc. está evitando um ou mais erros no sistema ..... e a origem desse conhecimento. e cenários de falha de energia e falha são testes difíceis de construir. Portanto, no final, "desativando o cache de gravação" em uma ou mais das várias camadas e / ou significados deste termo ... tem a reputação de "corrigir" certos tipos de problemas. De fato, desligar os comportamentos de armazenamento em cache de gravação do controlador RAID ou dos caches de disco do sistema operacional, ou da unidade etc. está evitando um ou mais erros no sistema ..... e a origem desse conhecimento.

De qualquer forma, voltando ao cerne da questão: no SATA, o tratamento específico de todos os comandos de leitura / gravação de disco e os comandos de cache de descarga são bem definidos pelas especificações SATA . Além disso, os fabricantes de unidades devem ter documentação detalhada para cada modelo ou família de unidades, descrevendo sua implementação e conformidade com essas regras, como neste exemplo para unidades Seagate Barracuda . Em particular, ver detalhes das SATA funções definirO comando que controla o modo operacional da unidade e, especificamente, a opção 82h pode ser usado para desativar o cache do disco no nível da unidade, porque o padrão é certamente o cache de gravação ativado em todas as unidades que eu conheço. Se você realmente deseja desativar o cache, esse comando deve ser executado no início de cada reinicialização ou inicialização de cada unidade e geralmente está sob o controle dos drivers de disco do seu sistema operacional. Você pode incentivar o driver do SO a definir esse modo por meio de um tipo de IOCTL e / ou de Configuração do Registro, mas isso varia muito.

Tall Jeff
fonte
5
Uma observação editorial da minha resposta: Os controladores RAID de hardware são famosos em relação a muitos problemas, incluindo problemas relativos à implementação interna do cache de gravação. Não tenho idéia do porquê, mas os controladores RAID, de maneira anedótica, parecem ser alguns dos softwares com mais erros já escritos em termos de algo que tem um uso tão difundido. Certamente vale a pena usar hardware RAID muito mainstream, bem estabelecido e amplamente implantado de fornecedores muito respeitáveis ​​..... e mesmo assim patches para problemas não triviais parecem muito frequentes!
1030 Jeff alto
Obrigado Jeff. Eu tenho lido bastante sobre isso, e estou tão confuso quanto nunca. Eu acho que o problema com o qual estou enfrentando agora tem a ver com "barreiras de gravação", que permitem que aplicativos e sistemas de arquivos instruam a camada de blocos para garantir a ordem correta de gravação usando os vários mecanismos disponíveis. Infelizmente, existem todos os tipos de problemas com a implementação de barreiras. O LVM, por um lado, aparentemente não os suporta, mesmo que os dispositivos subjacentes o façam. Além disso, parece-me que os administradores de sistemas devem ter a opção de ter fsync forçar um flush da cache da unidade
eas
@eas - O termo "barreiras de gravação" a que você se refere eu assumo é o mesmo mecanismo básico que chamei de "sincronização" ou "liberação" dos caches na minha resposta acima. Para o seu ponto, isso pode ser iniciado em várias camadas no arquivo "pilha" de acesso. Para construir uma verdadeira barreira de gravação, ela deve afetar todas as camadas que possuem dados de gravação pendentes (ou seja: caches sujos ou buffers de write-back) até a mídia física para realmente funcionar como pretendido. Qualquer link desconectado nessa cadeia é o que apresenta possíveis problemas quando as gravações são reordenadas.
Alto Jeff
Os discos podem atrasar as gravações na mídia por vários segundos, é claro que, se houver muitas gravações adicionais que excedem o cache do disco, isso forçará a gravação na mídia. O NCQ não precisa estritamente do cache de gravação, ainda pode ter muitos comandos de gravação e leitura pendentes e emiti-los na ordem em que o disco achar que obterá o melhor desempenho, também com o NCQ não há significado para a ordem das gravações que faz sistemas de arquivos e bancos de dados precisam usar barreiras de IO.
Baruch Mesmo
3

Foi minha experiência que um controlador de disco com armazenamento em cache com bateria desabilitará o cache na unidade. Não conheço uma maneira de desativar o cache no disco. Mesmo se você pudesse desativar o cache do disco, o desempenho sofreria significativamente.

Para uma opção de baixo custo, você pode usar um no-break barato que pode sinalizar seu sistema para um desligamento ordenado.

kevintechie
fonte
Meu comentário acima deveria ter sido adicionado aqui. Ainda estou aprendendo este site.
eas
Alguns controladores RAID desativam o cache do disco o tempo todo, outros não e alguns têm uma configuração. Esse comportamento depende fundamentalmente de como é a implementação da estratégia de cache do controlador RAID. Em algumas implementações, eles realmente querem controlar a ordem de gravação no disco .... e em outras, isso importa menos. Faço alusão a alguns dos problemas aqui na minha resposta.
1030 Jeff alto
No meu conjunto de testes reconhecidamente pequeno (controladores LSI 9261 RAID, unidades SATA, NL SAS e SAS), descobri que ativar o cache de gravação da unidade quando a unidade estava conectada a um controlador RAID com cache de bateria / capacidade não fazia diferença para além do desempenho, apenas com o cache do controlador RAID. Eu ainda não diria que essa é uma regra rígida, mas definitivamente está claro para mim que o controlador RAID que desabilita o cache da unidade não é necessariamente um problema.
Daniel Lawson
2

Eu uso um sistema RAID com um supercapacitor em vez de uma bateria para manter o cache. As baterias se desgastam, devem ser monitoradas, devem ser substituídas e representam um possível ponto de falha nesses aspectos. Um capacitor é carregado na inicialização, libera o cache quando a energia do no-break falha, dura virtualmente para sempre, não requer monitoramento etc. No entanto, a menos que você esteja executando um negócio na linha de pobreza (não é incomum atualmente), você deve ter um no-break e software que desliga o sistema de maneira limpa em caso de falha - normalmente dou de 5 a 15 minutos (dependendo da carga do no-break e, portanto, da bateria disponível) antes do desligamento, caso a energia volte a funcionar.

Durante uma tempestade, você pode (ou pode ter - os sistemas de energia estão melhorando) ver as luzes piscarem, às vezes antes de se apagarem. Este é um dispositivo chamado religador. É um disjuntor que, quando disparado, tenta fechar o interruptor aberto, caso a sobrecarga seja transitória, o que é mais. Se ele não permanecer fechado depois, digamos três tentativas, ele permanecerá aberto. O pobre rapaz tem que sair na chuva e lidar com isso. Não sinta muito por ele, enquanto faz apenas o dobro do que você e eu fazemos e o dobro de que, se for hora extra, é um trabalho perigoso.

Richard Rankin
fonte
2

Um dos equívocos se o cache de gravação em disco é que eles apenas perdem dados com a perda de energia. Isso nem sempre é o caso, especialmente em dispositivos sATA. Se um dispositivo sATA apresentar um erro (como um bug do FW na caixa de canto ou um bug do controlador) e ele redefinir ou redefinir externamente, não há garantia de que os dados no cache de write-back ainda estejam disponíveis após a interrupção.

Isso pode levar a cenários em que um dispositivo apresenta um erro transitório, é redefinido, a perda de dados ocorre na perda de qualquer cache sujo e isso é silencioso acima do nível do bloco de drivers.

Pior ainda, a desativação do cache da unidade por meio de ferramentas do SO também será perdida nas redefinições do dispositivo; portanto, mesmo que o dispositivo tenha seu cache desativado no início do dia, se o dispositivo for redefinido, ele reativará o cache de write-back. Em outra redefinição, o dispositivo perderá dados.

As unidades SCSI / SAS e algumas unidades sATA têm a capacidade de salvar o estado do perfil de write-back para garantir que a redefinição entre as propriedades não seja perdida - mas, na prática, isso raramente é usado.

Os controladores RAID que integram a camada de bloco nas camadas superiores podem notar redefinições de unidade e desativar o cache de write-back novamente - mas os controladores sATA e SAS padrão não fazem isso.

Essa limitação também vale para outros SET FEATURE e parâmetros semelhantes configurados para desempenho e confiabilidade.

Jon Brauer
fonte
1

Como você diz, um controlador RAID adequado com bateria é caro, mas você pode encontrar os controladores Dell Perc5 / i no eBay por £ 100 (US $ 150) e, especialmente com o RAID5, a velocidade de um controlador como o Perc5 / i surpreenderá você. Eu tenho vários servidores com Perc5 / is e seis matrizes RAID5 de disco, e eles estão entre os discos mais rápidos que eu já vi. Especialmente para aplicativos de banco de dados, os discos rápidos realmente melhorarão o desempenho.

Eu morderia a bala e compraria um controlador RAID.

JR

John Rennie
fonte
1

Tanto quanto eu entendo, o fsync () faking é uma propriedade dos controladores RAID suportados por bateria, não das unidades. O controlador RAID contém uma bateria que pode alimentar seu cache de gravação até que a energia seja restaurada na unidade e a gravação possa ser confirmada com segurança no disco. Isso permite que o controlador retorne imediatamente ao sistema operacional, pois garante algum nível de garantia de que a gravação será gravada no disco.

Deve-se observar que, se o cache de write-back das unidades ficar cheio, as gravações serão bloqueadas até que o cache seja gravado de volta na unidade. Isso significa que o cache geralmente não é tão eficaz em gravações sustentadas.

Quantos IOPS seu aplicativo requer? Tem certeza de que está sendo limitado pelo cache de gravação das unidades ou que um pequeno (comparado à memória do servidor) na unidade será benéfico?

Dave Cheney
fonte
O teste que estou fazendo agora é determinar o envelope de desempenho do nosso aplicativo, para que possamos descobrir a melhor forma de aumentar e diminuir a escala. O cache da unidade pode ser relativamente pequeno, mas, com o cache de gravação, a unidade pode reordenar as gravações (quando apropriado), o que parece duplicar a taxa de transferência de gravação sustentada.
eas