Dispositivo FIFO alternativo para Linux com um buffer (de maneira) maior enquanto ainda tem semântica do sistema de arquivos?

5

Estou desenvolvendo algo que consiste em um programa que fiz gerando saída, e um programa que eu não fiz (e gostaria muito de não ter que alterá-lo) para consumi-lo. Eu estou usando um FIFO nomeado criado com mkpipe . Eu suspeito que tenho um gargalo de desempenho devido à pequenez do buffer FIFO do Linux. (E esse tamanho não pode ser alterado sem remendar o kernel.)

Existe uma alternativa ao estilo FIFO que eu possa usar com um buffer de, digamos, algumas dúzias de megabytes? O programa não-feito-por-mim pode ler qualquer coisa que possa ter um nome de sistema de arquivos - /dev/stdin , um pipe nomeado (como está fazendo agora), um arquivo real, /dev/any-character-device ...

Até mesmo um módulo de kernel gratuito de terceiros pode funcionar, se nenhuma outra alternativa estiver disponível.

    
por JCCyC 04.06.2012 / 18:17

2 respostas

7

Como mostrado, não há problemas na taxa de transferência dos pipes nomeados, portanto, se o seu gravador for mais rápido que o seu leitor, e ambos trabalharem a uma taxa constante, toda a tarefa será tão lenta quanto o seu leitor, independentemente do tamanho do buffer é.

Mas se o seu escritor produz resultados em rajadas, com pausas entre eles, um buffer maior é uma vantagem.

Existe um utilitário ( buffer(1) ), destinado a gravar em fitas, que armazena buffers de entrada e permite que ele atinja uma taxa constante (por padrão, o mais rápido possível).

your-producer | buffer > fifo & your-consumer fifo

Está no pacote Debian buffer , ou apenas faça o download em aqui .

    
por 05.06.2012 / 10:12
0

Você pode usar um soquete de domínio unix e configurar o tamanho do buffer com setsockopt() .

    
por 06.06.2012 / 03:29

Tags