Programa de teste comparativo de disco que não produz carga da CPU

1

Eu quero misturar benchmarks intensivos de CPU e IO na mesma máquina com diferentes níveis de utilização da CPU e taxa de transferência de I / O.

Infelizmente, não consegui produzir uma alta carga de IO sem sobrecarregar a CPU. Eu tentei um programa ad-hoc escrito em C, em seguida, rsync com o parâmetro de largura de banda. Em teoria, é possível transferir dados da memória para o disco sem intervenção da CPU, é disso que se trata o DMA.

Eu gostaria de saber se existe alguma API ou programa que possa me ajudar a produzir uma determinada IO sem produzir (muito) carga de CPU.

    
por Danilo M. Oliveira 26.04.2018 / 13:48

1 resposta

0

Você deve examinar a chamada de sistema sendfile(2) , que otimiza a cópia de dados de um descritor de arquivo aberto para outro dentro do kernel. Note que os dois descritores de arquivos não precisam ser arquivos de disco. Você também pode usar um soquete de rede.

Veja também o sinalizador O_DIRECT quando usado com open(2) em um arquivo. Ele permite leitura / gravação sem recopiar os dados do buffer do dma no buffer do usuário, mas você deve alinhar seu buffer em uma página ou similar e usar múltiplos tamanhos de páginas para o tamanho.

hdparm -t --direct pode fazer testes de tempo com este sinalizador.

Alguns comandos do pacote sg3_utils , como sg_dd , fazem o disco de baixo nível io e têm opções para O_DIRECT também.

    
por 26.04.2018 / 16:31