Posso simular um disco rígido lento?

19

Eu acho que um certo bug intermitente só pode se manifestar quando há uma taxa de leitura lenta do disco. A solução de problemas é difícil porque não consigo reproduzi-la com segurança.

Com exceção de simplesmente devorar E / S com um processo de alta prioridade, existe alguma maneira de eu simular um disco rígido lento?

ændrük
fonte
Lembro-me de ver um comando para instruir os discos rígidos a rodarem em determinadas velocidades de barramento. Vou ver se consigo descobrir.
Jeremy
man hdparmdê uma olhada na opção -X, talvez? Existem algumas coisas que você pode usar para diminuir a velocidade da sua unidade, mas algumas delas correm o risco de fazer coisas desagradáveis ​​aos dados!
Jeremy
Além disso, tente montar um compartilhamento de rede como uma pasta (o Google é seu amigo), talvez até por Wi-Fi, se isso for plausível.
Jeremy
11
Essa não é uma resposta direta, mas: se eu tivesse um bug intermitente como esse, provavelmente tentaria executar o processo no Valgrind (se estivesse em uma linguagem compilada), porque isso provavelmente capturaria as condições de corrida de IO.
Pool #
11
Você está falando de um bug em um aplicativo, no kernel ou em um driver de dispositivo? Ou você não sabe nada? Pode ajudar se você explicar mais.
poolie 18/11/10

Respostas:

15

Use o nbd , o dispositivo de bloqueio de rede e, em seguida, avalie o limite de acesso a ele usando o say trickle.

sudo apt-get install nbd-client nbd-server trickle
poolie
fonte
+1 para uma solução bem legal. no entanto, não é um teste real, porque você não está indo para o driver de dispositivo de disco rígido real, onde está o problema.
The Unix Janitor
11
Não achei que ele estivesse falando de um bug de motorista, mas isso era apenas uma suposição. Vamos ver.
poolie
10
É possível adicionar o comando real a esta resposta? No momento você só mostram como instalar as ferramentas necessárias :)
Ricos
5
# echo 1> / proc / sys / vm / drop_caches

Isso vai te atrapalhar :)

Isso forçará você a ler do disco, em vez de aproveitar a página em cache.

Se você realmente quisesse se sofisticar, poderia fazer algo como falsificar um erro de leitura pela enésima vez usando a estrutura de injeção de falhas scsi.

http://scsifaultinjtst.sourceforge.net/

ppetraki
fonte
11
Nota: Isso eliminará os caches apenas uma vez. Em seguida, ele começará imediatamente o cache novamente. Você pode querer envolver isso em um loop.
Androbin
@ Androbin Eu gosto dessa idéia. Você pode até adicionar um intervalo de suspensão ao loop. Obrigado!
precisa saber é
4

Possui um hub USB 1.1? Ou um cartão SD lento? Eles reduzirão para menos de 10mbps.

Oli
fonte
bom ... não é técnico o suficiente para o +1, mas é bom #
RobotHumans
3

Isso não é, de modo algum, uma solução completa, mas pode ajudar em conjunto com outras medidas: existe um agendador de E / S como um agendador de processos e pode ser ajustado.

Mais notavelmente, você pode realmente escolher entre diferentes agendadores:

~# cat /sys/block/sda/queue/scheduler 
noop anticipatory deadline [cfq] 
~# echo "deadline" > /sys/block/sda/queue/scheduler
~# cat /sys/block/sda/queue/scheduler 
noop anticipatory [deadline] cfq 
~# 

deadline pode ajudar a obter resultados mais fortemente reproduzíveis.

noop, como o próprio nome indica, é incrivelmente estúpido e permitirá que você destrua estragos absolutos no desempenho de E / S com pouco esforço.

anticipatorye cfqambos tentam ser espertos, embora cfqseja geralmente o mais inteligente dos dois. (Pelo que me lembro, anticipatoryé na verdade o agendador legado logo antes do kernel começar a suportar vários agendadores.)

Nicholas Knight
fonte
2

Você pode tentar executar uma cópia de um arquivo grande, como um iso do cd de instalação do Ubuntu, e executá-lo duas vezes. Isso deve desacelerar bastante sua unidade.

RolandiXor
fonte
Como a questão diz, "Short de simplesmente engolindo IO" ....
poolieby
2

Além de tentar diminuir a velocidade do próprio disco rígido, você pode tentar usar ferramentas de comparação de sistemas de arquivos, como o bonnie ++, que podem causar uma grande quantidade de E / S de disco.

sudo apt-get install bonnie++
ajmitch
fonte
11
Como a questão diz, "Short de simplesmente engolindo IO" ....
poolieby
0

que tal make -j64? em artigos que descrevem esse novo patch de desempenho de 200 linhas, make -j64era uma tarefa que consumia muitos recursos do computador

Pawełkowy
fonte
2
Você deve explicar o que esse comando realmente faz.
papukaija
Como a questão diz, "Short de simplesmente engolindo IO" ....
poolieby
0

Por que não executar iotope ver se o processo que você está tentando depurar está causando muitas leituras / gravações de disco?

O zelador do Unix
fonte
3
Penso que esta resposta é vista como inútil, porque o mero fato de o processo estar fazendo muita informação de entrada já pode ser conhecido ou não ser um problema em si. O problema é que há algum tipo de bug relacionado ao tempo na maneira como ele lida com essas informações.
poolieby
0

Recentemente, descobri uma configuração em que

  • mudou o diretório para o meu Google Drive
  • montou-o através do cliente super-duper-slow google-drive-ocamlfuse
  • Criou um link simbólico do caminho original para o novo

E se latência de 16 segundos não for lenta o suficiente, basta desconectar o roteador.

Para referência, aqui está o caso de uso original, onde tive a ideia para isso: https://github.com/goavki/apertium-apy/pull/76#issuecomment-355007128

Androbin
fonte