Por que a velocidade da minha unidade flash diminui ao copiar?


27

Após alguns minutos de cópia, fica cada vez mais lento. Por quê?

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

Vários arquivos, grandes, pequenos, etc.

UPDATE: a pergunta é sobre vários sistemas operacionais, por isso é uma "questão geral"


Quanto você está copiando versus quanta memória livre você possui no seu computador?
26411 KCotreau

PC -> drive USB-FLASH: várias centenas de GBytes livre -> alguns GBytes livre
LanceBaynes

1
Eu suspeito que você tenha arquivos armazenados em cache na memória primeiro, para que sejam transferidos rapidamente e, depois que eles começarem a ser movidos do disco rígido, eles ficarão mais lentos. Não posso ter certeza no seu caso.
26411 KCotreau

então você está me aconselhando a usar o comando "sync" com mais frequência?
LanceBaynes

Não entendo o que você quer dizer com comando sync. Você não deu contexto à pergunta. Eu nem tenho certeza do que sistema operacional.
26411 KCotreau

Respostas:


25

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

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

Exemplo 1: O efeito é realmente pronunciado quando você tem um controlador com um cache grande (como um bom controlador RAID5) em que ~ 500mb de dados podem ser armazenados em cache rapidamente antes de serem liberados no disco.

Exemplo 2: Você pode ver o cache em execução se retirar a unidade flash ao mesmo tempo em que a cópia do arquivo "terminou". Nesse momento, seu arquivo é dividido entre o disco e o cache - portanto, a cópia é "finalizada" no que diz respeito ao sistema operacional, mas o controlador de disco ainda precisa gravar o que resta no cache no disco. Se você colocar a unidade flash novamente 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 ativado no sistema operacional / no disco.

Além disso, se é não cache de disco no trabalho, então é provável que o que você está vendo é um efeito de fragmentação. À medida que o disco fica cada vez mais cheio, fica disponível um espaço livre menos contíguo e o sistema de arquivos precisa trabalhar mais para encontrar lugares para colocar seus arquivos.


Também tenha em mente que é uma unidade flash. Seu hardware nunca foi otimizado para velocidade, mas sim acessibilidade.
surfasb

Eu não acho que isso explicaria por que o desempenho diminuiria durante longas cópias de arquivos. Em vez disso, o desempenho diminuiria ao longo da vida útil da unidade, sim?
ta.speot.is

Faz todo o sentido. Eles são otimizados para velocidades de ruptura, não para operações sustentadas. Pense no tamanho médio dos arquivos sendo carregados nas unidades flash. Você otimizaria para uma transferência de arquivos de 30 segundos ou para uma transferência de 2 segundos? Adicione isso aos seus dois exemplos, e isso explica bastante.
Surfasb

É como quando você tenta enfiar duas pessoas por uma porta comum de cada vez. No começo, você pode calcular. Uau, eu fui de zero pessoas por aquela porta para duas de cada vez. Minha velocidade é ótima. Então a linha fica mais longa e sua amostragem melhora e você finalmente percebe que pequena amostra = matemática ruim. . .
Surfasb

@ ta.speot.is Suponho que esse cache de disco que você mencionou seja tratado pelo SO no disco rígido e seja diferente do cache de hardware que os discos rígidos possuem internamente, certo?
sepehr

1

Embora o cache cause parte disso, esse 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 de gravação real da unidade muito rapidamente e permanecesse lá pelo resto da gravação. No entanto, não é isso que observei ao realizar grandes transferências de e para o disco (por exemplo, gravar 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 (s) usado (s) para armazenar os dados, exigindo que alguns dos blocos sejam gravados em mais de uma vez.

Dentro de um chip flash, há um bloco de dados que pode ser gravado. Ao escrever, há apenas duas coisas que o computador pode fazer: ele pode apagar um bloco inteiro ou alterar alguns (ou todos) dos bits em um bloco de 0 para 1.

No entanto, alguns desses blocos são melhores que outros, especialmente em unidades flash de baixa qualidade e, como resultado, ao gravar novos dados nele, alguns bits às vezes podem voltar a 0 sozinhos logo após serem gravados e não mude. Portanto, ao gravar em um bloco, o sistema operacional precisa verificar se todos os dados foram gravados corretamente e, caso contrário, é necessário refazer o bloco gravando os mesmos dados no mesmo bloco duas ou três vezes até que os dados grudem.

Portanto, quando seu computador está gravando um monte de dados na unidade flash, eis uma explicação (não completamente precisa, mas suficientemente boa) de como isso ocorre:

  1. Pegue o primeiro conjunto de blocos a ser escrito e escreva todos.
  2. Leia todos os blocos que acabamos de escrever e faça uma lista dos que não correspondem
  3. Escreva o próximo conjunto de blocos, juntamente com os 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, está relatando a taxa na qual está gravando blocos na unidade pela primeira vez. Como ele também precisará reescrever blocos anteriores ao mesmo tempo, a taxa de transferência total que pode ser usada para blocos virgens diminui à medida que o número de reescrições que também precisam ocorrer aumenta. Assim, a velocidade aparente de gravação diminui com o tempo.


Estou escrevendo um arquivo de 12 Gig 7zip em uma nova unidade flash USB 3.0 formatada como NTFS. Ele estava indo a cerca de 100 MB / s no primeiro minuto, depois caiu para 25 MB / s por cerca de um minuto, depois caiu para 11 ou mais por cerca de 10 minutos. Não era uma inclinação descendente gradual, eram três planaltos distintos.
Eric

Eu estava copiando o arquivo do meu laptop i7 antigo com 16 GB de RAM. Copiar esse mesmo arquivo 7zip do mesmo pendrive no meu novo laptop Xeon com 32 Gigs de RAM levou 2 minutos e não houve queda na velocidade.
Eric

0

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


A diferença nas velocidades de gravação de diferentes dispositivos de armazenamento pode ser extrema, por exemplo, compare a velocidade de gravação de um cartão SD antigo com a velocidade de gravação de um SSD SATA III.
karel 31/05

3
Evite insultos pessoais. Embora sua postagem possa estar correta, você deve editá- la para estar em conformidade com nossos padrões da comunidade.
Ben N
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.