Meça a velocidade do disco rígido (), escreva () sem fazer cache no QNX 6.5

3

Estou trabalhando no sistema operacional QNX 6.5. O QNX 6.5 suporta APIs POSIX. Eu estou tentando construir um aplicativo que é usado para avaliar o desempenho de discos rígidos. Minha aplicação irá ler / escrever / ler depois de escrever um buffer de tamanho definido pelo usuário em kB ou MB continuamente para o disco rígido do setor de início para o setor final. A operação executada (leitura, gravação, leitura após gravação) depende da escolha do usuário. Cada vez, uma operação é realizada, a aplicação irá acompanhar o tempo usando ClockCycles() e também calcular a velocidade de cada operação de leitura / gravação do setor.

Estou usando open() call para abrir o arquivo do dispositivo como /dev/hd0 . Estou usando as APIs read() , write() para executar operações de leitura / gravação. Meu problema é: não estou obtendo a velocidade correta de leitura / gravação real do disco. Na verdade, o aplicativo está retornando a velocidade de leitura / gravação de dados para o cache com freqüência. O problema é mais claro quando estou tentando executar uma leitura imediata após a operação de gravação. A velocidade de operação de leitura logo após uma operação de gravação é muito alta da ordem de 1000-1200 MB / S; enquanto uma leitura normal está tomando 50-60 MB / s. Estou usando sinalizadores abertos como O_SYNC e O_RDWR . Eu também tentei alterar os sinalizadores para O_DSYNC e O_RSYNC . Mas eu encontrei as bandeiras não têm efeito na saída do aplicativo. Não há sinalizador equivalente a O_DIRECT como no Linux.

Eu também tentei desativar o cache no driver do disco rígido durante a inicialização. Então eu tenho precisão de velocidade de leitura / gravação para tamanhos de dados da ordem de MBs. Mas mesmo assim, quando tamanhos menores de dados são lidos após uma gravação imediata, a velocidade de leitura é novamente muito alta. Eu também vi algumas macros como CACHE_FLUSH , CACHE_INVALIDATE para uso em drivers que precisam de transferência de DMA. Mas eu não sei como usar essas macros em um aplicativo. Alguém pode me ajudar como ignorar o cache e obter a velocidade de operação de leitura / gravação para o disco rígido? Meu disco rígido pode estar formatado ou não formatado. Eu testei com os dois casos.

    
por lullaby 04.02.2013 / 01:04

1 resposta

1

Cache HD

Em relação ao seu último parágrafo, acredito que quando você está lendo / escrevendo menos de 1-2M no drive, o desempenho é afetado pelo cache ON THE DRIVE, que normalmente varia de 2M a 16M no HD atual.

Minimize o efeito do cache HD

Vamos supor que você desativou com êxito o cache do sistema de arquivos no nível do sistema operacional. Para minimizar o efeito do cache HD, você deve gravar dados pelo menos o dobro do cache HD.

Suponha que o HD tenha cache de 2M.

Para testar com gravação de dados de arquivos de 200kb. Escreva 20 deles (arquivo individual) e descarte o resultado dos 10 primeiros arquivos e a média dos últimos 10 segundos.

Para testes de leitura de 200kb, você precisará de 20 arquivos. O conteúdo pode ser o mesmo, mas eles precisam ser arquivos individuais. Ler o mesmo arquivo pequeno (< 2M) novamente usará o cache HD.

Programa semelhante

Você deve conferir Bonnie ++ . Você pode ser capaz de compilá-lo no QNX.

    
por 04.02.2013 / 04:41