O que usar em vez de 'buffer' para buffer de 1 GB? [duplicado]

4

o buffer (1) parece ser antigo e possui valores codificados que o impedem de armazenar em cache grandes quantidade de dados.

$ buffer -m 1G
max_shmem 1 too low
   // it doesn't even understand gigabytes
$ buffer -m 1000M
Cannot handle that many blocks, aborting!
$ buffer -m 1000M -s 1m
blocksize 1048576 out of range

O que você usa em vez disso?

    
por Vi. 10.02.2015 / 19:34

3 respostas

3

Movimentação fora do padrão: usando buffers de soquete.

Exemplo:

# echo 2000000000 > /proc/sys/net/core/wmem_max
$ socat -u system:'pv -c -N i /dev/zero',sndbuf=1000000000 - | pv -L 100k -c -N o > /dev/null
        i:  468MB 0:00:16 [ 129kB/s] [  <=>                        ]
        o: 1.56MB 0:00:16 [ 101kB/s] [       <=>                   ]

Implementamos duas ferramentas adicionais para isso: buffered_pipeline e mapopentounixsocket

$ ./buffered_pipeline ! pv -i 10 -c -N 1 /dev/zero ! $((20*1000*1000)) ! pv -i 10 -L 100k -c -N 2 ! > /dev/zero
        1: 13.4MB 0:00:40 [ 103kB/s] [         <=>      ]
        2: 3.91MB 0:00:40 [ 100kB/s] [         <=>      ]
    
por 14.10.2015 / 01:17
0

Resposta para o Utilitário para armazenar em buffer uma quantidade ilimitada de dados em um pipeline? sugere o uso de pv -B $SIZE . A página man indica que pode lidar com tamanhos maiores de buffer.

-B BYTES, --buffer-size BYTES

Use a transfer buffer size of BYTES bytes. A suffix of "k", "m", "g", or "t" can be added to denote kilobytes (*1024), megabytes, and so on. The default buffer size is the block size of the input file's filesystem multiplied by 32 (512kb max), or 400kb if the block size cannot be determined.

    
por 30.12.2015 / 20:10
0
INPUT | { 
        mkdir  -p buf &&
        mount  -osize=1g -ttmpfs none buf || exit
        cat     >buf/...
        work_it <buf/...
        umount  buf
} | OUTPUT

Para um loop com anel em anel, possivelmente ...

INPUT | { 
        mkdir  -p buf &&
        mount  -osize=1g -ttmpfs none buf &&
        while   dd bs=1 count=1 >buf/...  &&
                [ -s buf/... ]
        do      dd obs=64k   | 
                dd  bs=64k count=16383k >>buf/...
                work_it <buf/... 2>&3 
        done    3>&2 2>/dev/null          &&
        umount  buf
} | OUTPUT
    
por 30.12.2015 / 22:43

Tags