Por que as transferências de arquivos entre unidades usam RAM

4

Tenho notado que sempre que copio ou movo arquivos grandes do meu SSD, que eu uso como unidade do sistema, para meu disco rígido ou para um disco rígido ou flash externo, o gráfico de velocidade exibido pelo Windows sempre parece o mesmo: a velocidade de transferência começa em torno de 450 MB / s, e depois de alguns segundos cai para algo entre 90 e 130 MB / se permanece estável até o final da operação de copiar / mover.

Issodespertouminhacuriosidade,entãodecididescobrirqualéacausadisso.Algunsdosmeuspensamentosforamestes:

Talvezsejaavelocidaderealnaqualatransferênciaacontece

Demaneiraduvidosa.Emboraavelocidadede450MB/scorrespondaàvelocidadenominaldomeuSSD,considerandoquetambémtenhoalgumasleituras/gravaçõesdediscoemsegundoplano,nãohácomoumdiscorígidode7200rpmsercapazdeacompanhá-lo,jáqueoAvelocidadede130MB/squerecebomaistardetambéméomáximoquepossoesperardela.Então,paraondevãoosdadosextras?

Osdadosextrasestãosendoarmazenadosnamemóriacachedodiscorígido

Issofazumpoucomaisdesentido,masseeulevaremcontaaduraçãodamaiorvelocidadedetransferência,ocachedomeudiscorígidoteriaquetermaisde3GBdetamanho,oquedefinitivamentenãoé.Oquemaispoderiaser?

OsdadosextrasestãosendoarmazenadosnaRAM

Issofazsentido.MinhamemóriaRAMéaúnicaoutrapartedomeusistemaquepodecombinaravelocidadedomeuSSD,eeutenhomuitodisso.Vamoschecaressateoria!

EuabrooGerenciadordeTarefasedouumaolhadanaguiaDesempenho.Ousodememóriaéestávelem3,7GB.Entãoiniciooutratransferênciadearquivode15GB.Ousodememóriacomeçaasubirepáraem5,3GB,assimcomoavelocidadedetransferênciacaipara130MB/s.Permaneceomesmoatéofinaldatransferênciadoarquivo(acaixadediálogodetransferênciasefecha)e,emseguida,retornalentamenteaonívelde3,7GBantesdatransferência.

Então,minhaúltimateoriaéverdadeira.OutraconfirmaçãoéofatodequeamemóriaextrausadaestámarcadacomoModified

.

Qual é o objetivo?

Minha pergunta é: qual é o propósito de fazer isso? Embora eu não me importe em ter um pouco da minha RAM usada nas transferências de arquivos, mesmo durante as minhas sessões multitarefa, nunca vi seu uso passar de 70%, o que é o benefício de armazenar 1,6 GB de dados que você ganhou está fazendo algum tipo de processamento em sua memória RAM?

Não vejo nenhum benefício do ponto de vista da integridade dos dados, já que você está apenas copiando os arquivos e, no caso de uma falha de energia, nem a RAM nem o HDD serão particularmente bem-sucedidos em reter os dados na transferência.

Eu pude ver o benefício sendo que o disco de origem (o SSD) é liberado rapidamente, de modo que, se outro processo precisar realizar muitas operações de leitura / gravação, ele pode fazer isso sem a transferência de arquivos, mas se for esse o caso, por que não prosseguir e carregar todos os 15 GB na velocidade máxima na memória?

Além disso, esse processo engana o usuário, pois a transferência de arquivos continua mesmo após o fechamento da caixa de diálogo de transferência, porque alguns dados ainda estão sendo copiados da memória para o disco rígido. Isso pode fazer com que um usuário conecte uma unidade removível enquanto os dados ainda estiverem sendo gravados, possivelmente danificando a unidade removível, pois nem todos se incomodam em remover o hardware com segurança.

Lembre-se de que não testei tudo isso com unidades removíveis, pois o Windows pode estar lidando com elas de maneira diferente, tornando meu último ponto inválido.

    
por akukas 18.10.2015 / 17:28

2 respostas

0

O gerenciamento de memória do Windows é uma coisa complexa. Como você vê, tem um comportamento diferente com dispositivos diferentes.

Os diferentes sistemas operacionais têm gerenciamento de memória diferente.

Sua pergunta foi muito interessante. Estou compartilhando uma página do MSDN que explica uma parte do gerenciamento de memória no Windows e, mais especificamente, < strong> "Arquivos mapeados"

É uma documentação para desenvolvedores de software, mas o Windows também é um software.

One advantage to using MMF I/O is that the system performs all data transfers for it in 4K pages of data. Internally all pages of memory are managed by the virtual-memory manager (VMM). It decides when a page should be paged to disk, which pages are to be freed for use by other applications, and how many pages each application can have out of the entire allotment of physical memory. Since the VMM performs all disk I/O in the same manner—reading or writing memory one page at a time—it has been optimized to make it as fast as possible. Limiting the disk read and write instructions to sequences of 4K pages means that several smaller reads or writes are effectively cached into one larger operation, reducing the number of times the hard disk read/write head moves. Reading and writing pages of memory at a time is sometimes referred to as paging and is common to virtual-memory management operating systems.

Infelizmente, não é fácil descobrir como a Microsoft implementa o Read / Write - não é um código aberto.
Mas sabemos que tem situações muito diferentes:

From      To
==================
SSD       HDD
HDD       Busy SSD ??
NTFS      FAT
NTFS      ext4
Network   HDD
IDE0slave IDE0master // IDE cable support disk to disk transfer.
IDE       SATA // in this case you have separated device controllers.

Você começa o ponto ... Um disco rígido pode ser bussy, os sistemas de arquivos podem ser diferentes (ou pode ser o mesmo) ...

Por exemplo: dd comando no linux copiando dados "byte by byte" - É extremamente rápido (porque os chefes de ambos os HDDs movem a sincronização), mas se os sistemas de arquivos são diferentes (com diferentes tamanhos de bloco, por exemplo) - os dados copiados não serão legíveis porque o sistema de arquivos tem uma estrutura diferente.

Sabemos que a RAM é muito mais rápida que o HDD. Então, se tivermos que fazer alguma análise de dados (para ajustar o sistema de arquivos de saída), será melhor ter esses dados na RAM.

Imagine também que você copia o arquivo diretamente de para.
O que está acontecendo se você sobrecarregar a fonte com outros fluxos de dados? E o destino?
E se você quase não tem RAM livre neste momento?
...

Apenas engenheiros da Microsoft sabem.

    
por 18.10.2015 / 23:22
1

Why do file transfers between drives use RAM?

Porque as operações de E / S são (quase sempre) entre um periférico e a RAM.
Portanto, uma cópia de arquivo é realmente duas operações de disco: uma leitura (para RAM) e, em seguida, uma gravação (da RAM).

Alguns sistemas podem realizar operações periféricas para periféricas (e, portanto, não requerem um buffer na RAM). Eu vi adaptadores host SCSI que podem executar transferências de drive-para-drive (sem o envolvimento da CPU e RAM usando um processador on-board e RAM / FIFO). Eu vi controladores de DMA que podem executar transferências de periféricos para periféricos. Estas são as exceções, não a regra nem o uso comum.

Observe que o tratamento de erros é duplamente complicado ao usar transferências periféricas para periféricas e, portanto, raramente é usado por um sistema operacional para operações de E / S arbitrárias, mesmo quando o hardware está disponível.

My question is, what is the purpose of doing this?

Os dados de origem (o arquivo que está sendo lido / copiado) devem ser lidos na RAM simplesmente porque essa é a natureza da arquitetura do computador (combinada com o uso de DMA). No passado, quando a RAM era escassa e os sistemas operacionais não eram tão sofisticados, a escolha típica era realizar essas transferências com um buffer o menor possível (por exemplo, apenas um setor ou bloco) ou um buffer que otimizasse a velocidade transferência para o setor).
Atualmente, com memória relativamente grande e algoritmos sofisticados, o sistema operacional típico tentará usar qualquer / toda memória livre / não usada para o buffer ler esses dados de origem.

Depois que os dados de origem tiverem sido gravados no destino, esses dados poderão ser descartados. Mas, se não houver demanda para essa memória (ou seja, ela permanecerá sem uso), não será necessário descartar esses dados.
E se os dados foram marcados ou catalogados para identificar o arquivo de onde veio, esses dados podem ser armazenados em cache para possível reutilização.

Observe que esse cache de arquivos é essencialmente gratuito; não havia sobrecarga de E / S adicional no sistema operacional para obter esse cache. O único custo é manter o catálogo do conteúdo, que pode ser compensado quando há uma ocorrência de cache (e salva a E / S de uma releitura).

Assim, o armazenamento em cache de arquivos é uma conseqüência livre da leitura normal desses arquivos. Ele usa temporariamente a memória que, de outra forma, estaria ociosa e sem uso. A sobrecarga no sistema operacional para manter esse cache é geralmente mínima e é paga quando ocorrem ocorrências de cache.

Also, this process misleads the user, as the file transfer keeps going even after the transfer dialog closes, because some of the data is still being copied from the memory to the hard drive.

Essa é uma troca entre a disponibilidade do sistema para o usuário versus as gravações garantidas.
Um programa pode ser escrito para executar gravações síncronas bloqueadas, o que esperaria que cada operação de gravação física fosse concluída antes que o programa continuasse. Ou o programa, em pontos judiciosos, pode esperar que as operações de gravação física sejam concluídas chamando uma sync () ou chamada de sistema semelhante.

Em uma operação de gravação (ou cópia), o sistema operacional moderno tentará ficar disponível para o usuário assim que todas as operações de gravação tiverem sido enfileiradas (o que significa que podem não ter sido concluídas). Isso facilita a multitarefa. Se você quisesse fazer algo que não envolvesse essa unidade, por que deveria esperar que as operações nessa unidade terminassem para fazer algo diferente?
A desvantagem é que você precisa ser um usuário instruído e estar ciente de que os dispositivos (de armazenamento) precisam ser devidamente desmontados.

Esse recurso de disponibilidade não tem nada a ver com o recurso de cache de arquivos mencionado acima. Se estivesse disponível / possível, você poderia desativar um sem afetar o outro.

Nota
Uma transferência de dados pode usar nenhum buffer de RAM se:
1. E / S programada (usando a CPU) é executada para as operações de entrada e saída,
AND
2. a entrada e a saída têm taxas de transferência de dados e tamanhos de transferência iguais,
AND
3. ambos os dispositivos são orientados a caracteres e não bloqueiam dispositivos. (Isso excluiria as unidades de disco).

No entanto, um sistema operacional raramente escolherá usar E / S programada quando DMA ou masterização de barramento estiver disponível, nem é provável que seja programado para lidar com a complexidade dupla de uma transferência pareada de entrada + saída.

    
por 19.10.2015 / 01:17