Desempenho de RAMFS

0

Estou criando um perfil de computação (transcodificação de vídeo) em grandes conjuntos de dados. Como eu não queria que meus resultados fossem influenciados pelo tempo de E / S (o sistema que estou usando tem discos giratórios antigos / lentos), acho que o RAMFS seria a abordagem correta.

Eu criei uma pasta "cache" em minha casa como ramfs:

sudo mount ramfs -t ramfs ./cache/

Eu uso esta pasta para salvar os arquivos de entrada e saída do meu pipeline de processamento de vídeo. No entanto , parece que existe algum "caching" entre o disco e a RAM ao ler arquivos armazenados no RAMFS, o que acho que não deveria acontecer. Primeiro eu copio o arquivo de vídeo de entrada para o cache, percebo que o arquivo é de cerca de 1,5 GB, daí a necessidade de RAMFS: link

cp crowd_run_1080p50.y4m ./cache/

Ao realizar uma operação de transcodificação, ler o arquivo que acabei de copiar e gravar no RAMFS

perf stat -e minor-faults:u,major-faults:u  ~/bin/ffmpeg -i ~/cache/crowd_run_1080p50.y4m -c:v h264_qsv  -y ~/cache/out_qsv.mp4

perf ainda relata algumas falhas graves:

        11,933      minor-faults:u                                              
           159      major-faults:u                                              

   3.588215239 seconds time elapsed

Executar a mesma operação novamente não mostra falhas graves nem tempo de conclusão significativamente mais rápido:

        11,955      minor-faults:u                                              
             0      major-faults:u                                              

   2.129031238 seconds time elapsed

Ainda mais preocupante se eu liberar o cache de páginas do sistema operacional

sudo sh -c 'echo 3 >/proc/sys/vm/drop_caches'

Eu vou ver grandes falhas novamente. Por que é que? Eu pensei que o arquivo inteiro permaneceria no RAMFS junto com os inodes e nenhum flush é possível de ramfs (ao contrário dos tmpfs que podem trocar). Por que ainda vejo grandes falhas? Se eu tiver que executar a mesma operação duas vezes para obter resultados confiáveis, é melhor não usar o RAMFS, mas gostaria de entender o que estou perdendo.

    
por igon 30.10.2016 / 20:20

1 resposta

0

O daemon preload também pode ajudar nessa situação. Ele é executado em background e aprende quais programas e bibliotecas estão frequentemente em uso. Então, readahead eles estão nas próximas botas para um lançamento mais rápido. Como oposto a memlockd , esses arquivos não são bloqueados na RAM, mas lidos uma vez após a inicialização, para que seu espaço de RAM possa ser reutilizado para outra coisa, se necessário, portanto não há garantia de um lançamento mais rápido.

    
por 01.11.2016 / 12:35