Posso aumentar o desempenho do aplicativo fragmentando propositadamente seus dados no disco rígido?

1

Alguns aplicativos e jogos populares têm muitos arquivos que não são usados com freqüência em operações normais, portanto, há grandes distâncias sobre as quais o disco rígido precisa pular para chegar aos próximos bits de que precisa.

Meu entendimento da fragmentação de arquivos é quando os arquivos são espalhados em partes por todo o disco rígido e os tempos de busca / leitura aumentam por causa disso. A desfragmentação ou consolidação desses arquivos é uma maneira comum de melhorar o desempenho do disco rígido para o nível de base.

Mas é possível que as partes que não são frequentemente (ou usadas) sejam movidas para algum lugar distante, e as partes mais usadas sejam colocadas lado a lado, consequentemente, na ordem em que o aplicativo as lê na maior parte do tempo para melhorar seu desempenho ?

Eu entendo que esse problema pode ser resolvido por discos rígidos que têm menor tempo de acesso a locais muito diferentes, como Solid State Drives, mas eles também não são afetados por isso?

Seria sensato, na prática, movimentar dados de aplicativos como esse para reduzir ainda mais o tempo de disco em oposição ao estado perfeitamente desfragmentado?

    
por user1306322 23.10.2015 / 23:02

3 respostas

4

Ok, vamos fazer a pergunta mais fácil aqui. Os SSDs são particularmente excelentes em leituras aleatórias . Contanto que você esteja lendo um bloco inteiro, não importa se você está fazendo isso em um bloco imediatamente antes ou "na metade do disco". Não faz diferença prática. Na verdade, você não pode nem dizer. Seu sistema operacional pode pensar que está armazenando dados em locais sequenciais no SSD, mas o próprio SSD pode mapeá-los para lados opostos > do 'armazenamento'. Então, em SSDs, você praticamente não precisa se preocupar com a desfragmentação de arquivos. Exceto. Eu voltarei a isso.

Ok, vamos voltar aos discos mecânicos comuns. Eles são muito mais rápidos em leituras seqüenciais do que em leituras aleatórias. Muito, muito mais rápido.

Agora, se eu estiver jogando Half Life 3 e precisar carregar arquivos de dados, meu computador terá muito mais facilidade se esses arquivos de dados forem desfragmentados e armazenados nas proximidades. Aproximadamente (muito aproximadamente), a desfragmentação converte leituras aleatórias em leituras sequenciais.

Você está concedendo que é obviamente mais rápido ter o arquivo de dados do mapa e o arquivo de dados de caractere desfragmentado e ao lado um do outro, do que ter o arquivo de dados do mapa espalhado por todo o disco e o arquivo de dados de caracteres também espalhado por todo o disco.

Mas ... você coloca um cenário bastante estranho. Você está sugerindo, por exemplo, que o Half Life 3 precise carregar PART do arquivo de dados do mapa e PARTE do arquivo de dados do caractere. Por exemplo, ele só precisa dos primeiros 10% do arquivo de dados do mapa e do meio 10% do arquivo de dados de caracteres.

Nesse caso, a melhor maneira de armazenar os dados seria armazenar os primeiros 10% dos dados do mapa, seguidos imediatamente pelos 10% do meio dos dados de caracteres. Como você não está carregando mais nada (neste exemplo inventado), não importa onde mais esteja.

Então sim. Nesse caso específico, seria útil se os dados estivessem fragmentados.

Agora, voltando ao SSD. Acontece que os SSDs precisam ler e escrever uma página por vez. O tamanho exato da página depende do SSD, mas pode ser 2 KB, 4 KB, 8 KB, 16 KB ou algum outro tamanho. Meu ponto aqui é que, se o tamanho da página SSD é de 16 KB e esse é o tamanho mínimo que você pode carregar, uma situação na qual os 10% dos dados do mapa e os 10% dos dados de caracteres que você precisa estão no mesmo bloco bem, isso vai ser mais rápido. É mais rápido carregar um bloco do que carregar dois.

Sim, existem algumas circunstâncias em que a fragmentação proposital dos dados acelera o seu acesso. Mas é difícil imaginar por que você já tentou otimizar para este caso. Na verdade, na maioria das vezes, você deseja carregar todo um arquivo, não apenas os primeiros 10%. E os sistemas operacionais modernos armazenam arquivos em cache de qualquer maneira, então há uma boa chance quando você passa de um mapa para outro no Half Life 3, os dados do mapa já estão no cache do sistema de arquivos e você não precisa carregar nada do disco .

Uma opção interessante é o SSHD, os drives híbridos. Estas são (praticamente) combinações de drives mecânicos com um cache SSD. Como isso é relevante aqui? Bem, grosso modo, as unidades híbridas moverão o conteúdo acessado com freqüência para uma área de armazenamento mais rápida, movendo os dados do seu disco spinny para a parte SSD. Se você sempre carregasse os primeiros 10% dos dados do mapa e os 10% do meio dos dados de caractere e nunca carregasse mais nada, e se o algoritmo da unidade híbrida fosse bom, esses dados acabariam na parte mais rápida do SSD. Até certo ponto, então, isso realiza o que você está planejando fazer. Note que o cache regular do sistema de arquivos realiza a mesma coisa, somente o efeito é provavelmente mais rápido, mas só dura até que você reinicie.

TL; DNR: Sim. Mas, falando sério, é praticamente garantido que é uma otimização inútil.

    
por 23.10.2015 / 23:29
0

Vamos ver como a fragmentação ocorre em primeiro lugar.

Você escreve pequenos arquivos no disco rígido. Os dados são gravados no primeiro local disponível que é gratuito. Vamos supor que nenhum dado foi excluído, apenas escrito. Os dados apareceriam da seguinte forma: [##########-----------------] onde # são clusters usados e - são clusters livres.

Agora, vamos supor que em alguns desses clusters você tenha um arquivo que está sendo excluído. De repente, seu gráfico se parece com isso:
[#####-####-----------------]

Agora, é claro, isso acontece muito, então o gráfico pode ficar assim em algum momento:
[##-##-#-##-#--##-#--#------]

Dependendo do sistema de arquivos (o FAT32 escreve no primeiro espaço vazio disponível, o NTFS é muito mais inteligente e tenta manter os arquivos não fragmentados onde puder) em algum momento, um arquivo grande não pode ser armazenado em apenas um segmento vazio. Esse arquivo será então distribuído pelo disco rígido, por exemplo:
[##F##F#F##-#--##-#--#------] onde F é esse arquivo.

O NTFS já tentará armazenar arquivos próximos a si mesmo e tentará combater a fragmentação onde puder.

Mas tudo se resume a isso, não importa se você fragmenta os arquivos propositadamente, mesmo que esses arquivos não sejam usados com frequência, eles sempre apresentarão a possibilidade de que a fragmentação ocorra a qualquer momento. Eu acho que se fosse possível mover arquivos que não estão sendo usados para o final do disco pode ser mais rápido para desfragmentar os arquivos que são usados com freqüência (o que pode realmente o que o NTFS já faz), mas além disso, a resposta para sua pergunta é simples: não. fragmentar arquivos propositadamente não ajudará. Você pode até armazenar arquivos desfragmentados no final da unidade e eles ainda serão desfragmentados.

    
por 24.10.2015 / 01:15
0

"Fragmentando" no. "Organizando arquivos para eficiência" Maaaybe embora eu duvido que funcione. Seu plano é baseado em algumas premissas.

  1. O sistema operacional não faz cache. Qual normalmente será. Windows sim. Normalmente, os arquivos armazenados em cache no RAM serão mais rápidos.
  2. Você pode determinar deterministicamente colocar arquivos em certas partes de um disco. Existem ferramentas que fazem isso usando a API de desfragmentação - jkdefrag / mydefrag que fez isso com resultados impressionantes. Por um tempo . Era um truque prático de sala de estar para obter um sistema que fosse inutilmente lento e usável.
  3. Sua unidade tem uma certa quantidade (pequena) de memória RAM interna para suavizar coisas como esta.
  4. Você supõe que seus arquivos estão armazenados em locais estáticos e / ou a sobrecarga de manter esses arquivos organizados para que o tempo de busca otimizado seja baixo. Ninguém parece fazer isso dessa maneira.
por 24.10.2015 / 01:52