This program, gprog, is a basic pipemeter along the lines of reblock, cpipe, pv, bar, pipemeter and speedometer - however: 1) This one's a GUI. 2) This one's very fast, despite being a GUI, because: A) The GUI carefully avoids updating itself for every block B) The backend uses a cache oblivious algorithm to self-tune C) On an Athlon(tm) II X2 245 (nbench mem: 22.4, nbench int: 20.4, nbench float: 33.8, 2913.4 MHz) it's able to _sustain_ 2.2 gigabits/second, despite somewhat suboptimal behavior from the underlying OS (lots of small blocks from pipes). D) It takes advantage of multicore systems; it uses one process for the GUI, and another for the data transfer. This is done using Python's excellent multiprocessing module, rather than threads. 3) It shows more statistics than is usual for these tools. 4) It allows display in SI or IEC units or a mix of the two. Note that modunits has a different license from the rest of this code. Bugs: 1) Sometimes the GUI won't come up until the transfer is complete. I believe this to be an issue on machines with almost no free physical memory - EG, it happened on a system with a huge ramfs (ramdisk). 2) gprog is not suitable for (direct) use with traditional tape drives, for which blocksize is relevant, and generally needs to be consistent. gprog intentionally throws out supporting tape drives in order to get good performance with disk and network. If you need (GUI) progress with a tape drive, consider putting something like reblock, etc. at the end of your pipeline.