Title: Port of the week: mbuffer
       Author: Solène
       Date: 31 May 2016
       Tags: portoftheweek networking
       Description: 
       
       This Port of the week is a bit special because sadly, the port isn't
       available on OpenBSD. The port is **mbuffer** (which you can find in
       misc/mbuffer).
       
       I discovered it while looking for a way to enhance one of my network
       stream scripts. I have some scripts that get a dump of a postgresql
       base through SSH, copy it from stdin to a file with tee and send it
       out to the local postgres, the command line looks like
       
           $ ssh remote-base-server "pg_dump my_base | gzip -c -f -" | gunzip
       -f | tee dumps/my_base.dump | psql my_base
       
       I also use the same kind of command to receive a ZFS snapshot from
       another server.
       
       But there is an issue, the end server is relatively slow, postgresql
       and ZFS will eat lot of data from stdin and then it will stop for
       sometimes writing on the disk, when they are ready to take new data,
       it's slow to fill them. This is where **mbuffer** takes places. This
       tool permit to add a buffer that will take data from stdin and fill
       its memory (that you set on the command line), so when the slowest
       part of the command is ready to take data, mbuffer will empty its
       memory into the pipe, so the slowlest command isn't waiting to get
       filled before working again.
       
       The new command looks like that for a buffer of 300 Mb
       
           ssh remote-base-server "pg_dump my_base | gzip -c -f -" |  gunzip
       -f | tee dumps/my_base.dump | mbuffer -s 8192 -m 300M | psql my_base
       
       mbuffer also comes with a nice console output, showing
       
       - bandwith in 
       - bandwith out 
       - percentage/consumption of memory filled 
       - total transfered 
       
       
           in @ 1219 KiB/s, out @ 1219 KiB/s,  906 MiB total, buffer   0% full
       
       In this example the server is too fast so there is no wait, the buffer
       isn't used (_0% full_).
       
       mbuffer can also listen on TCP, unix socket and have a lot of
       parameters that I didn't try, if you think that can be useful for you,
       just go for it !