Leitura / gravação SSD montada em USB abrandando de forma intermitente no servidor Linux

1

Configurar
MoBo: Servidor Super Micro
Proc: Twin Xenon com 20 núcleos físicos e 40 segmentos
RAM: 128 GB
OS: Servidor Cento 7.x
VCard: nVidia Quadro 4000 -

A tarefa envolve a gravação e a leitura de SSDs montados em USB (1 vB no formato Micron 5100 Pro) o mais rápido possível para a verificação da integridade dos dados. Existem 40 pistas PCIe 2.0 por processador. Um dos 40 tem duas placas StarTech USB 3.0 com canais dedicados de 5 Gbps, mas sem energia interna extra. Estamos usando documentos SSD externos do Orico para conectar e alimentar as unidades. Fora de diferentes documentos USB, o hardware do servidor, o formato SSD e o SO não podem ser modificados.

E agora o problema e a questão reais. Quando começamos a escrever nas unidades em um ciclo de gravação / leitura, as coisas começam bem.

- Buscar arquivo de 200MB a 1.6GB do servidor de arquivos remoto (armazenar em RAM local)
-Write arquivo para cada um dos quatro SSDs montados em USB (cada gravação está em seu próprio segmento)
Arquivo de leitura de SSD montado em USB para verificação SHA (também em segmentos separados)
-Clar dados de arquivo do RAM
-Repita até que todos os arquivos tenham terminado

Após cerca de uma dúzia de arquivos, a gravação em um ou dois discos diminui tanto que os outros discos são forçados a esperar devido aos limites que colocamos no número de arquivos mantidos em determinado momento. Em seguida, o disco irá "recuperar" e outro disco irá abrandar. Esse problema é intermitente e escrevemos todo o lote de arquivos (até 1600) sem problemas e dentro de 10% do que deveria ser fisicamente possível.

Então, as perguntas são o que poderia estar causando isso e o que poderíamos fazer para evitar isso? Nosso software garante que nenhum disco está sendo gravado e lido ao mesmo tempo, nem tentamos ler ou gravar mais de um arquivo de um determinado disco de cada vez. Qualquer ajuda seria muito apreciada.

PS Este é um problema diferente daquele que eu perguntei aqui .

EDIT 1: Então, isso pode realmente não ter nada a ver com USB, SSDs, drivers, comutação de contexto, largura de banda PCIe, etc .... Eu acabei de pausar a execução em um momento muito oportuno e o std :: vector Eu estou usando para armazenar os dados a serem gravados foi marcado como não acessível no depurador para QtCreator. Algumas declarações de impressão posteriores e alguns pontos de interrupção descobri que os dados estão lá, o ponteiro retornado pela função :: data () é bom, e tudo é como deveria ser EXCETO a variável local no depurador mostra como não acessível. No entanto, toda vez que o vetor mostra que não é acessível, a gravação no disco é super longa. Então, agora estou à espreita de algo que está corrompendo a memória ou algo similar. Comportamento muito estranho.

    
por soulsabr 20.04.2018 / 20:49

0 respostas

Tags