Como otimizar o processo de copiar e colar para janelas?

0

Quando o usuário ot programa copiar um arquivo grande nas mesmas janelas de disco físico, faça o seguinte algoritmo:

1. Read a piece of data from disk.
2. Write a piece of data to disk.
3. Do points 1. and 2. until whole file is not written fully.

Se o disco for HDD, este processo requer um tempo, porque o HDD precisa ir do ponto de leitura para a gravação. Portanto, se eu copiar um arquivo manualmente para o disco separado, será mais rápido, porque o disco lerá e gravará dados com velocidade de fluxo.

Tudo é óbvio. Então é possível configurar um sistema de janelas de arquivos para copiar arquivos grandes para o disco "cache" primeiro e depois copiá-los de volta ao original quando o sistema de arquivos receber o comando copy no mesmo disco físico?

    
por Cherry 21.12.2014 / 08:05

1 resposta

0

Não, isso não é possível sem modificar o código do sistema.

Além disso, acho que você está superestimando o desperdício de tempo associado à varredura e à busca no espaço de endereço físico de origem e no espaço de acesso físico de destino no disco.

a menos que o sistema esteja desesperadamente curto na RAM, a "parte" que você colocou é muito grande, durante a qual apenas uma varredura / busca ocorreu. O resto é leitura seqüencial. Esses dados são enviados para o controlador IO e, em seguida, para o barramento do sistema, são armazenados em buffer na RAM e, em seguida, no Módulo IO da CPU para processamento. isso continua até que o buffer seja limpo e, em seguida, a CPU fornece instruções para gravar os dados no disco. Nesse ponto, temos outra varredura / busca para encontrar o espaço de endereço de destino e começar uma gravação seqüencial.

Assim, em geral, o tempo de IO sequencial de LEITURA / GRAVAÇÃO reduzirá o tempo de Acesso Aleatório para mudar de local. Quanto maior a "peça" lida, menos tempo da operação total é usada para reposicionar as cabeças.

O tempo de verificação e busca é um desempenho significativo, mas apenas com um grande número de arquivos menores, em que o disco precisa ser reposicionado com frequência para concluir a tarefa, em comparação com a quantidade de tempo que realmente transfere dados para a CPU . Além disso, para cada arquivo, os metadados NTFS devem ser lidos e talvez gravados, portanto, o disco deve reposicionar em pelo menos dois locais distintos para cada um.

Além disso, o Windows é um sistema multiprocesso, portanto, é provável que mais de uma parte peça ao disco para ler ou gravar em locais diferentes. Não há probabilidade de que o seu processo tenha acesso exclusivo aos recursos que impediriam a ocorrência de várias operações de E / S e fazer com que você reposicione toda vez que o processo adormecer, pulsar ou se tornar ativo. Se você alterasse a maneira como as janelas se comportavam, outros processos além da única cópia também usariam a unidade de cache o tempo todo, então o processo seria reposicioná-la com a mesma frequência que a unidade de origem durante a operação.

No final, a única maneira de sua abordagem funcionar, é se estiver acontecendo em segundo plano, prevendo que você deseja armazenar um arquivo em cache antecipadamente. caso contrário, você está apenas adicionando complicação e não obtendo nenhum benefício real.

Editar: Quanto ao que irá ajudá-lo, considere adquirir um pequeno SSD (32GB talvez) e usá-lo para armazenamento em cache do IO . O Windows irá preenchê-lo automaticamente, pois tem tempo e oportunidade, e quanto mais arquivos você armazenar em cache, menos tempo você gasta lendo do disco (embora mais cache signifique mais gerenciamento de cache necessário).

Mantenha seus discos mecânicos (não SSDs) bem desfragmentados e certifique-se de não estar preenchendo seus discos muito. O IO demora mais e os arquivos se fragmentam mais quando a unidade é preenchida.

ou o melhor de tudo, se você não precisar de grande capacidade, obter um SSD e resolver o problema!

    
por 21.12.2014 / 10:29