minhas informações de contato
Correspondência[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Autor: O Aquário de Peixes de Cabeça Gorda (Yin Haiwen)
Oracle ACE Pro: Banco de Dados (Oracle与MySQL)
Parceiro PostgreSQL ACE
10 anos de experiência na indústria de banco de dados, atualmente engajado principalmente em serviços de banco de dados
Possui OCM 11g/12c/19c, MySQL 8.0 OCP, Exadata, CDP e outras certificações
Mo Tianlun MVP, Moli Star of the Year, especialista certificado ITPUB, membro do Expert Group of 100, palestrante OCM, consultor técnico da comunidade de código aberto PolarDB, consultor técnico externo HaloDB, membro do grupo de observação OceanBase, Youth Association MOP Technology Community (Youth Database Associação de Ajuda Mútua de Aprendizagem) Consultor Técnico
Ele tem títulos como “Diretor”, “Segurança” e “O Maior Inimigo do Banco de Dados Doméstico” no círculo, e não é um terrorista social famoso (terrorista social)
Conta pública: Aquário de peixes de cabeça gorda; CSDN: Aquário de peixes de cabeça gorda (Yin Mo Tianlun: Aquário de peixes de cabeça gorda; ITPUB: yhw1809).
A menos que seja reimpresso com permissão e a fonte seja indicada, é plágio "ilegal".
Já expliquei anteriormente o hardware envolvido em servidores como CPU, SSD e rede. Além da placa-mãe que carrega os componentes mencionados acima, há também um componente muito importante, que é a memória em comparação com o nível geral do desktop (casa geral). PC) Memória, a memória do servidor possui sua própria função de correção de erros, que também chamamos de memória ECC (Verificação e Correção de Erros).
Esta edição explicará brevemente como funciona a memória ECC.
A memória é um componente importante do computador. Ela é usada para armazenar temporariamente dados de cálculo na CPU e trocar dados com memórias externas, como discos rígidos. É a ponte entre a memória externa e a CPU. Todos os programas do computador são executados na memória. Enquanto o computador começar a funcionar, o sistema operacional transferirá os dados que precisam ser calculados da memória para a CPU para cálculo. Quando o cálculo for concluído, a CPU transmitirá os resultados.
O surgimento da memória serve principalmente para compensar as enormes diferenças de largura de banda e latência entre o armazenamento externo e o cache interno da CPU (ou seja, L1, L2, L3, em essência, é maior que o cache interno da CPU, mas geralmente). muito menor que o armazenamento externo O dispositivo intermediário de transferência de dados pode acelerar antecipadamente a preparação de dados do armazenamento externo mais lento, reduzindo ou até mesmo eliminando o tempo de espera para a CPU obter os dados.
A memória que usamos principalmente em servidores agora é a memória DDR. Não entrarei em uma explicação detalhada sobre o que é DDR aqui. Além da memória geral, há também a memória não volátil PMEM baseada na interface de memória (ou interface PCIe) (tomando o Intel Optane como exemplo), que fornece uma quantidade maior de dados entre a memória e o armazenamento externo e está próxima de a velocidade da área de cache.
De modo geral, os servidores carregam sistemas comerciais importantes. Há muita interferência eletromagnética durante a operação de equipamentos eletrônicos. Essas interferências eletromagnéticas podem causar inversão de bits (ou seja, a troca de 0 e 1) durante a interação de dados entre a memória e o. CPU Desta forma, ocorrerão erros na execução de dados. Se for um software ou programa geral de PC, poderá até reportar um erro ou travamento. afinal, o banco não quer que seus ativos aumentem sem motivo algum, você não quer que seus ativos diminuam).
Então surgiu a memória ECC, descobrindo proativamente erros de dados nos dados e corrigindo-os.
Aqui estão duas soluções relativamente primitivas:
Ou seja, um dado é transmitido em 3 cópias. Se houver algum problema em alguma cópia, ele pode ser corrigido:
Mas também surgiram problemas, embora a probabilidade de ocorrência seja muito baixa, se dois dados tiverem inversões de bits na mesma posição, haverá problemas com a verificação de dados e correção de erros:
O maior problema com o uso desse método é o desperdício de largura de banda de IO.
Desta forma, um código de correção de erros é adicionado no início dos dados, ou seja, um código de correção de erros é adicionado antes de cada dado. Quando o número de 1s nos dados é um número par, o código de correção de erros é. 0, e quando o número for ímpar, o código de correção de erros é 1.
Se o código de correção de erros não corresponder ao número de 1s, os dados serão retransmitidos.
Isso também cria um problema. Cada verificação só pode determinar se todos os dados estão normais. Em teoria, a correção de erros não é feita e a retransmissão aumentará o atraso.
Ao mesmo tempo, se ocorrerem dois erros de dados ao mesmo tempo, o objetivo da verificação ainda não poderá ser alcançado.
O código de Hamming é o principal método de verificação e correção de erros atualmente utilizado na memória ECC.
Vamos passo a passo aqui e organizar os dados de 16 bits da seguinte maneira. Suponha que o bit 2 seja responsável pela verificação de paridade na parte direita, então esses dados têm dois 1s e o bit 2 é 0. Se houver um erro nos dados e a verificação de paridade determinar que não há problema na metade direita, então o problema está na metade esquerda, caso contrário, o problema está na metade direita.
Conforme mostrado na figura abaixo, o bit 1 realiza a verificação de paridade nas colunas 2 e 4 e, em seguida, o bit 1 armazena 1. Se houver um problema com a verificação de paridade nas colunas 2 e 4, então o problema estará nas colunas 2 e 4. Caso contrário, haverá um problema nas colunas 1 e 3.
A combinação dos dois métodos acima pode facilmente confirmar qual coluna de dados está com problema:
Em seguida, use um método semelhante, usando o bit 4 para verificar as linhas 2 e 4 e o bit 8 para verificar a metade inferior. Através da separação de linhas e verificação de paridade de partição, você pode encontrar a localização específica do erro e realizar a correção de erros (inversão). É isso.
No entanto, a premissa do julgamento acima é que há um problema com os dados padrão. Após o método acima ser usado para julgar, o bit de dados nº 0 não é incluído na proteção. Se está errado ou não, não afeta. o resultado da verificação de paridade acima. Portanto, usamos o bit 0 para verificar todo o bloco de dados usando o método 3.2.
Nesse caso, se houver dois erros, os resultados da verificação completa da paridade do disco e da verificação da paridade da partição entrarão em conflito. É impossível determinar o local do erro, mas pode ser determinado que todo o bloco de dados está anormal. Basta retransmitir os dados.
Mas quando há três erros de dados, torna-se impossível julgar.
De outra forma, descobriremos que as posições dos códigos de verificação são todas 2 elevado à enésima potência:
O código de verificação só precisa ser colocado na enésima posição de potência de 2. Quanto maior o bloco, menos conteúdo ocupado pelo código de correção de erros, mas maior a probabilidade de múltiplas inversões de bits. O tamanho geral do bloco de transmissão ECC é 72 bits, 64 bits são dados e 8 bits são códigos de correção de erros. Portanto, geralmente uma memória com capacidade de 8G requer apenas oito partículas de memória de 1G, enquanto uma memória ECC com capacidade de 8G requer nove partículas de memória de 1G. O 1G extra é usado para armazenar a capacidade extra do código de correção de erros.
No entanto, a correção de erros do computador definitivamente não calculará a posição do erro da maneira "boba" usual. Isso pode ser conseguido usando o charme do binário.
Retiramos todas as posições que são 1 e realizamos uma operação OR binária vertical para obter diretamente a posição problemática:
Anexo: Há também um LDPC (código de verificação de paridade de baixa densidade), que é um código de verificação de paridade de baixa densidade. O princípio de implementação específico não será explicado aqui. Este método pode determinar o problema de inversão de vários bits e é frequentemente usado. usado para verificação de SSD. Devido à alta velocidade e ao custo de implementação da memória, os códigos de Hamming ainda são usados para implementar ECC.
Esta edição apresenta brevemente como a memória ECC implementa a correção de erros.
A velha regra é saber o que está escrito.