calcula o tempo médio para ler bytes em um disco

1

A pergunta me fornece os seguintes parâmetros:

faixa de tempo de busca = 10 ms (milésimos de segundo).

A velocidade de rotação do disco = 9000 rotações por minuto

Setores em cada faixa = 600

Cada setor pode armazenar 512 bytes de dados.

A pergunta me pede para calcular o tempo médio para ler 1024 bytes.

Eu preciso saber se fiz certo. Eu ficaria grato se alguém pudesse, por favor, dar uma olhada na minha solução.

    
por Charlie_K 01.08.2018 / 14:52

2 respostas

1

Para ler 1024 bytes (1024/512 = 2 setores) você precisa:

  • procure a pista com o 1º setor. 10ms
  • aguarde enquanto o início do 1º setor alcançou a posição da cabeça. Aguarde - 0 ms min, 60 * 1000/9000 = 6.67ms max, 3.33ms média
  • setor de leitura. 1 / (600 * (9000/60)) = 0,011 ms. Negligência.
  • O segundo setor pode estar na mesma faixa ou em outra faixa. Tempo de procura - 0 ms, 10 ms máx., Média de 5 ms
  • aguarde enquanto o segundo setor começa a posição da cabeça. Espere por ele - 0 ms min, 6.67ms max, 3.33ms average
  • setor de leitura. Negligência.

Total: 10 + 3,33 + 5 + 3,33 ~ 21,7 ms

PS. Não pense "Se não procurar entre setores, o tempo de espera é 0". Ninguém diz que os setores são adjacentes.

    
por 01.08.2018 / 15:07
0

Suponho que, no momento, você está realmente tentando entender parcialmente o que determina as taxas de dados do mundo real, e não apenas teóricas. Geralmente, a menos que você esteja gravando drivers de dispositivo para o sistema operacional como a minha empresa já fez, ou gravando o próprio mecanismo de banco de dados, todos esses detalhes são um pouco mundanos hoje. Esses detalhes reais são, na maioria, mascarados, filtrados, compensados e ocultos por muitos fatores de fatores de hardware e sistema operacional, portanto, não é possível observar o que está acontecendo diretamente.

Ainda entender o que causa e não causa problemas de desempenho pode ser importante.

A média de "taxa de dados de leitura" para bancos de dados dependerá, em grande parte, do tamanho do IO que você está movendo de uma só vez e se ele é contíguo ou não. Também depende do próprio disco, relatando seus verdadeiros parâmetros de hardware, que geralmente são apenas simulados. (Por exemplo, existem realmente 600 setores por faixa? Como a faixa externa de um disco é muito maior, qualquer disco nos últimos 30 anos terá muito mais setores na pista externa do que no interior.) Aqui estão alguns exemplos de desempenho se estes foram os verdadeiros parâmetros:

Leituras de banco de dados: geralmente significa que os números do setor serão lidos aleatoriamente em todo o disco (de presumivelmente 1024 bytes de 2 setores consecutivos de 512) e nenhum dos setores está na memória ou em qualquer outro cache: Nesse caso, sua taxa média de dados será:

10 MS = Head Seek reposicionamento: (Note que isto significa que você só pode fazer 100 buscas em 1 seg, e então 100 KB / Sec será o MAIS RÁPIDO que você pode ler 1024 aleatoriamente.)

1? MS = sobrecarga de comando = desconhecido: isso costumava ser significativo, até 8 MS. Hoje, é provável que seja mais dependente do seu sistema operacional, processando suas solicitações com eficiência. Portanto, se o seu sistema também estiver trocando muitos MB para disco, seu sistema sofrerá uma desaceleração significativa. O IO de e para os discos hoje é provavelmente menor que um MS. Isso poderia ser testado facilmente com um SSD para simular uma sobrecarga de barramento e firmware do HD. Incluído aqui, normalmente seria o momento de trocar as cabeças de leitura, supondo que você já estivesse na pista ou cilindro correto. Isso também inclui retornar os dados movidos para o sistema operacional. Veja o tempo total de interrupção da CPU permanece < 1%, o que pode indicar um problema de hardware de disco. Palpite ousado? < 1 MS, que ainda pode ser significativo.

3.3 MS = Girar até o setor ficar abaixo das cabeças: 9000 RPM / 60 seg = 6,67 MS. A probabilidade de estar mais próximo ou mais distante é de 50%, portanto é um atraso de 3,33 MS para cada IO. Nota: Isso significa que uma leitura aleatória se a cabeça já estiver posicionada sobre a trilha correta ainda será 3.33 MS, e significa que sua taxa máxima de dados nunca poderá exceder 300 KB / s, a 1k IO.

0,022 MS = Tempo de leitura da cabe�: 6,67 MS / 600 Setores * 2 = 1024 lidos == > 0,022 MS. Isso significa que a taxa de dados máxima deste disco é de 1 / 0,022 MS = 45.000 * 1024 = 46 MB / seg. Para leituras / consultas de bancos de dados, isso é completamente insignificante, enquanto que, ao mover o banco de dados inteiro, seria o fator mais significativo.

Portanto, nesse caso, sua taxa de "leitura de banco de dados" será de ~ 14,335 MS = 70 KB / s. Note que se o IO foi 512, (ignorando o .022 MS), a taxa é a metade disso. Usando 2.048 e a taxa é dupla. Portanto, o parâmetro mais significativo é o tamanho dos setores contíguos, até chegar a uma faixa completa de leitura (supondo que todos os setores do disco sejam contíguos).

    
por 01.08.2018 / 18:07