Por que a velocidade da minha unidade flash diminui durante a cópia?

Por que a velocidade da minha unidade flash diminui durante a cópia?

Depois de alguns minutos de cópia, fica cada vez mais lento. Por que?

por exemplo, começa com 20 MByte/s e quando termina com 10 MByte/s.

Vários arquivos, grandes, pequenos, etc.

ATUALIZAÇÃO: a pergunta é sobre vários sistemas operacionais, então é uma "pergunta geral"

Responder1

Esse comportamento não é específico da sua unidade flash; você também pode ver isso nos discos rígidos. Tem a ver com o mecanismo de cache que a maioria dos sistemas operacionais e discos emprega para acelerar pequenas gravações.

Os 20 MB/s que você vê são os dados sendo gravados no cache do disco (geralmente memória rápida, mas pequena). Quando esse cache estiver cheio, ele deverá ser descarregado no disco - e agora você está com um gargalo no disco mais lento.

Exemplo 1: O efeito é realmente pronunciado quando você tem um controlador com um cache grande (como um bom controlador RAID5), onde aproximadamente 500 MB de dados podem ser armazenados em cache rapidamente antes de serem descarregados no disco.

Exemplo 2: Você pode ver o cache em funcionamento se retirar a unidade flash ao mesmo tempo em que a cópia do arquivo "concluído". Neste momento, seu arquivo está dividido entre o disco e o cache - portanto, a cópia está "concluída" no que diz respeito ao sistema operacional, mas o controlador de disco ainda precisa gravar no disco o que resta no cache. Se você colocar o pen drive de volta e inspecionar o arquivo, verá que não está tudo lá.

Isenção de responsabilidade: esses exemplos não funcionarão se você não tiver o cache de gravação habilitado em seu sistema operacional/no disco.

Além disso, se fornãocache de disco em funcionamento, é provável que o que você esteja vendo seja um efeito de fragmentação. À medida que o disco fica cada vez mais cheio, menos espaço livre contíguo fica disponível e o sistema de arquivos precisa trabalhar mais para encontrar locais para colocar seus arquivos.

Responder2

Embora o cache cause parte disso, não é o único fator. Se o cache fosse o único fator, esperaríamos que a velocidade de gravação caísse rapidamente de várias centenas de MB/s para a velocidade real de gravação da unidade e permanecesse assim pelo resto da gravação. No entanto, não foi isso que observei ao realizar grandes transferências de e para o disco (por exemplo, gravação de imagens de inicialização). Em vez disso, o que observo é que a velocidade diminui gradualmente ao longo de toda a operação.

Essa desaceleração é causada pela remanência de dados no(s) chip(s) flash usado(s) para armazenar os dados, necessitando que alguns dos blocos sejam gravados mais de uma vez.

Dentro de um chip flash, existem blocos de dados que podem ser gravados. Ao escrever, há apenas duas coisas que o computador pode fazer: pode apagar um bloco inteiro ou alterar alguns (ou todos) os bits de um bloco de 0 para 1.

No entanto, alguns desses blocos são melhores que outros, especialmente em unidades flash de qualidade inferior e, como resultado, ao gravar novos dados nele, alguns dos bits às vezes podem voltar para 0 sozinhos logo após serem gravados, e não não mude. Assim, ao escrever em um bloco, o SO precisa verificar se todos os dados foram escritos corretamente, e se não foi, tem que refazer o bloco escrevendo os mesmos dados no mesmo bloco duas ou três vezes. até que os dados fiquem.

Então, quando o seu computador está gravando um monte de dados na unidade flash, aqui está uma explicação (não totalmente precisa, mas boa o suficiente) de como ele faz isso:

  1. Pegue o primeiro conjunto de blocos a ser escrito e escreva todos eles.
  2. Leia todos os blocos que acabamos de escrever e faça uma lista daqueles que não correspondem
  3. Escreva o próximo conjunto de blocos, juntamente com aqueles que não foram escritos corretamente da última vez.
  4. Repita 2-3 até que todos os blocos tenham sido escritos corretamente.

Quando o computador está gravando na unidade, ele informa a taxa na qual está gravando blocos na unidade pela primeira vez. Como também será necessário reescrever os blocos anteriores ao mesmo tempo, o rendimento total que pode ser usado para blocos virgens diminui à medida que aumenta o número de reescritas que também precisam acontecer. Assim, a velocidade aparente de gravação diminui com o tempo.

Responder3

Eu estava sofrendo com isso no OSX e consegui melhorar significativamente as coisas. Primeiro, impedi o Spotlight Index de tentar indexar a unidade de destino. Em seguida, parei a geração de miniaturas na unidade de destino (copiando imagens de 55K)

E finalmente desisti de usar a GUI e mudei para a linha de comando usando rsync -a source target

Provavelmente existem coisas semelhantes que você pode fazer para outros sistemas operacionais nesse sentido.

Responder4

Quando o arquivo é gravado em uma unidade, seja uma unidade flash USB ou um disco rígido, os dados NÃO são/NUNCA são lidos para ver se correspondem. Isso levaria uma eternidade. A verificação da gravação é feita pelo hardware (verificação de redundância cíclica) e se ocorrer um erro, ela é enviada de volta para a aplicação a partir do hardware que detectou um erro. A paralisação que ocorre e diminui (até mesmo para uma pausa) é causada pela gravação da CPU mais rápido do que o dispositivo pode suportar. Você não verá que isso acontece com discos rígidos internos. Você nunca verá o que realmente está acontecendo em um sistema operacional Windows, mas no Linux você poderá ver que a CPU faz uma pausa até que o hardware USB diga OK para continuar.

informação relacionada