Otimizando o desempenho de DVD para Jogos do Windows
Uma alta porcentagem de computadores que executam o Windows tem uma unidade de DVD e muitos jogos são enviados em DVD. Como resultado, recomendamos que você garanta que seus jogos usem a unidade de DVD com toda a vantagem. Ao entender como os dados são lidos de um DVD e como a localização dos dados afeta seu tempo de leitura, você pode reduzir os tempos de carregamento e melhorar o desempenho geral durante o jogo. Este artigo discute como otimizar o desempenho de DVD para jogos do Windows.
- Layout básico de um DVD
- Lendo de um DVD
- Erros de leitura
- Taxa de transferência de dados
- Exemplos de taxa de transferência desperdiçada
- Leitura de forma síncrona versus assíncrona
- Leitura ideal
- Compatibilidade de DVD
- Resumo
Layout básico de um DVD
Esta figura mostra o layout básico de um DVD.
Os dados em um DVD são armazenados como uma espiral contínua, como em um CD; no entanto, os arquivos são divididos em blocos e setores. Os arquivos são distribuídos por blocos de código de correção de erro (ECC) e cada bloco é dividido em dezesseis setores de 2 KB (ou seja, 32 KB de dados em cada bloco). Os arquivos são alinhados ao longo dos limites do setor e qualquer espaço não utilizado em um setor é deixado vazio. Se um arquivo tiver apenas 10 bytes, o restante do espaço nesse setor de 2 KB será desperdiçado; portanto, quando possível, agrupe arquivos em incrementos de 2 KB para obter a melhor densidade de dados. Lembre-se de que essas especificações são apenas para DVD e CD e HD-DVD têm especificações diferentes.
Lendo de um DVD
Esta é a sequência que uma unidade de DVD executa ao receber uma solicitação para ler de um DVD:
- Alterar camadas, se necessário
- Seek
- Redirecionar a OPU (unidade de coleta óptica) para ler dados
- Verificar a posição real
- Ajustar e repetir até que os dados corretos sejam encontrados
As operações de leitura de unidade são quantificadas de forma diferente, dependendo se são leituras de unidade lógica ou leituras de unidade física. As leituras de unidade lógica só podem ler uma quantidade inteira de setores de DVD, enquanto uma solicitação de leitura de unidade física só pode ler uma quantidade inteira de blocos ECC. Normalmente, a unidade física recebe uma solicitação de leitura; ele tentará preencher seu cache. O tamanho do cache da unidade de DVD depende das especificações da unidade individual.
Quando uma unidade de DVD obtém uma solicitação de leitura que excede o tamanho do cache, a solicitação é dividida em solicitações do tamanho de cache. A unidade busca o bloco ECC que contém o primeiro setor da solicitação e lê todo o bloco ECC. O firmware da unidade decodifica o bloco ECC e lê o próximo bloco ECC. O processo é repetido até que o cache da unidade seja preenchido ou todas as solicitações sejam atendidas. Em seguida, o kernel lê os dados decodificados do cache da unidade. Em seguida, ele libera o cache e inicia a próxima operação de leitura, se alguma solicitação de leitura permanecer.
Observação
Cada leitura não armazenada em cache libera o cache da unidade.
Erros de leitura
DVDs e unidades de DVD não são perfeitos e erros podem ocorrer durante a leitura. Como CDs, partes de um DVD podem se tornar ilegíveis de poeira ou arranhões. Se qualquer parte de um bloco for ilegível, todo o bloco será considerado ilegível. Se ocorrer um erro de leitura, a unidade tentará relançar o bloco ECC. Se o bloco ainda estiver ilegível, a unidade anulará a operação de leitura e retornará um valor para o kernel que indica que o bloco era ilegível. Em seguida, o kernel decide qual etapa seguir. O kernel pode reemissar a solicitação, anular a leitura completamente ou girar a unidade para baixo e reemissar a solicitação.
Taxa de Transferência de Dados
A taxa de transferência de dados de uma unidade de DVD depende de vários fatores: o local dos dados solicitados, como limpo ou arranhou o disco, o número de fluxos que estão sendo lidos do disco, o tamanho dos buffers associados a esses fluxos e as especificações da unidade individual. A taxa de transferência também depende se a unidade tem velocidade angular constante (CAV) ou CLV (velocidade linear constante). Se uma unidade girar com CAV, o disco girará na mesma velocidade, independentemente de onde a OPU (unidade de coleta óptica) está localizada. Isso significa que a faixa de dados passa o OPU mais rapidamente à medida que o OPU se aproxima da borda externa do disco. Com clv, o disco gira mais lentamente à medida que o OPU se move para fora, de modo que a faixa de dados passa pela OPU a uma velocidade constante. As unidades de DVD na maioria dos computadores usam CLV.
Enquanto a unidade está buscando e alterando camadas, os dados não podem ser lidos do disco. É uma boa prática minimizar essas operações, especialmente ao ler dados para uma tela de carregamento inicial.
Exemplos de taxa de transferência desperdiçada
Para entender como a taxa de transferência de dados pode ser desperdiçada, considere uma unidade hipotética e um DVD. Vamos supor que um arquivo no meio do disco precise ser lido. A taxa de transferência dessa área do disco é de aproximadamente 8,25 MB/s. Se o traço de busca for meio ou um terço completo, o tempo médio de busca será de 150 ms. Neste exemplo, 1,2 MB (150 ms × 8,25 MB/s) poderiam ter sido lidos no tempo necessário apenas para obter o OPU para onde ele pode ler. Adicionar uma alteração de camada eleva a taxa de transferência desperdiçada para 1,8 MB (225 ms × 8,25 MB/s).
Outro exemplo que demonstra a taxa de transferência desperdiçada é carregar 20 arquivos mal localizados de uma unidade CAV sem alterações de camada. Se o tempo de busca para cada arquivo, mais a latência antes que os dados possam ser lidos, for de aproximadamente 200 ms, 4 segundos (20 arquivos × 200 ms) serão gastos apenas buscando os dados. Se os arquivos estiverem localizados no diâmetro externo e lidos a 11× velocidade, a taxa de transferência será média de 15,2 MB/s (11 velocidades/12 × 16 MB/s). A taxa de transferência desperdiçada neste exemplo é de aproximadamente 60,8 MB (15,2 MB/s × 4 s).
Leitura de forma síncrona versus assíncrona
A leitura assíncrona é mais eficiente do que a leitura síncrona. Ao ler de forma síncrona, um ou mais blocos de dados ECC são lidos na memória do sistema antes de serem copiados na memória do aplicativo. Por outro lado, a leitura assíncrona copia blocos ECC decodificados diretamente na memória do aplicativo, o que evita o cache L2 e cria menos sobrecarga de CPU. Para ler de forma assíncrona, use o sinalizador FILE_FLAG_OVERLAPPED ao usar a função CreateFile para abrir arquivos. A função ReadFile também precisa de uma estrutura OVERLAPPED válida passada para executar E/S assíncrona.
Mais informações sobre E/S assíncrona podem ser encontradas em E/S síncrona e assíncrona.
Leitura ideal
O melhor princípio na leitura de um DVD é evitar procurar e ler pequenas quantidades de dados. Quando a quantidade de dados lidos for menor que a capacidade de um bloco ECC , menor que 32 KB, o restante do bloco será desperdiçado. Como os tamanhos de cache variam de unidade para unidade, os desenvolvedores devem decidir sobre uma quantidade mínima de dados para solicitações de leitura e não fazer nenhum menor do que isso. O tamanho mínimo deve ser um múltiplo inteiro de um bloco ECC para evitar perda de tempo na leitura e decodificação de dados que não serão usados. Também é importante evitar a busca a todo custo, pois qualquer tempo gasto buscando é tempo gasto sem ler dados.
Compatibilidade de DVD
Há alguns problemas importantes de compatibilidade a serem considerados ao lançar em DVD. Primeiro, as unidades de DVD em computadores baseados no Windows podem variar de desempenho, portanto, se o DVD tiver um requisito específico de taxa de transferência, é importante garantir que o hardware dos usuários atenda a esses requisitos. Além disso, DVDs de várias camadas podem causar problemas de compatibilidade em algumas unidades de DVD. Para evitar esses problemas, é aconselhável entregar um DVD de camada única ou testar completamente um DVD de várias camadas na maioria das unidades antes do lançamento.
Resumo
Para melhorar o desempenho do DVD, algumas regras gerais podem ser aplicadas. As técnicas a seguir podem ajudar a maximizar a taxa de transferência e reduzir os dados desperdiçados:
- Evitar leituras menores que 32 KB
- Definir dados para reduzir ou eliminar buscas
- Definir dados nos limites de bloco do ECC
- Maximizar a capacidade agrupando arquivos pequenos em blocos de 2 KB e reduzindo o espaço de preenchimento em setores de DVD
- Ler de forma assíncrona para reduzir a carga da CPU e o uso excessivo de memória
- Evitar lançar DVDs de várias camadas