BUFFER(1) | General Commands Manual | BUFFER(1) |
buffer - very fast reblocking program
buffer [-S size] [-b blocks] [-s size] [-z size] [-m size] [-p percentage] [-u microseconds] [-B] [-t] [-Z] [-i filename] [-o filename] [-d]
Sizes are a number with an optional trailing character. A 'b' multiplies the size by 512, a 'k' by 1024 and an 'm' by a meg.
Buffer reads from standard input reblocking to the given blocksize and writes each block to standard output.
Internally buffer is a pair of processes communicating via a large circular queue held in shared memory. The reader process only has to block when the queue is full and the writer process when the queue is empty. Buffer is designed to try and keep the writer side continuously busy so that it can stream when writing to tape drives. When used to write tapes with an intervening network buffer can result in a considerable increase in throughput.
The default settings for buffer are normally good enough. If you are a heavy tape user then it is worth your while trying out various different combinations of options. In particular running a buffer at both ends of the pipe can provide a substantial increase (see last example below).
$ buffer < /etc/termcap > /dev/rst8
$ tar cf - . | rsh somehost 'buffer > /dev/rst8'
$ dump fu - | rsh somehost 'buffer -s 16k > /dev/nrst8'
$ tar cf - . | buffer |
rsh somehost 'buffer -S 500K -p 75 >
/dev/rst0'
There are 2 limits in buffer affecting the maximum total buffer size: The maximum number of blocks (2048) and the maximum size of a block (512kB). This results in a maximum total buffer size of 1GB.
Note that there is also a kernel limit for the maximum size of a shared memory segment (used by buffer internally) which is typically much lower than the limits in buffer. So if buffer complains about not being able to create a shared memory segment, this limit might have to be raised using the command sysctl kernel.shmmax=XXX (see also sysctl(1) and proc(5)).
Internally, for printing purposes, buffer counts in terms of the number of kilobytes output. If the blocksize you use is not a whole number of kilobytes then the numbers printed will be inaccurate.
Thanks to Kevin Twidle <kpt@doc.ic.ac.uk> for a lot of early suggestions and patches to make it work with non-tar/dump tapes to exabyte drives.
Thanks to Andi Karrer <karrer@bernina.ethz.ch>, Rumi Zahir <rumi@iis.ethz.ch> and Christoph Wicki <wicki@iis.ethz.ch> for patches to make buffer work when trying to write single tape files of greater than 2 gigabytes.
Copyright (C) 1990, 1991 by Lee McLoughlin.
dd(1), tar(1), rsh(1)
14 May 1990 |