Ggtrace is "GEOM gate tracer", utility to track I/O requests on a storage device on FreeBSD. It uses the ggate facility of FreeBSD to attach to a file or device and produces a device that can be used for any I/O, including hosting filesystems.

I/O requests are presented in the form of a moving histogram that can be used to discern which parts of the storage device are used most often. An important use of ggtrace is to analyze how filesystems arrange and access data on storage devices.

Example graph produced by ggtrace

On the graph above, a filesystem was mounted without Soft-updates and lots of small files were copied to it (the red parts that go from left to right) and then deleted (the red parts that go from right to left). These operations were repeated several times with different timescales in ggtrace.

Several blocks on the device are presented as pixels in a single row. The leftmost pixel represents blocks from the beginning of the device and the rightmost pixel represents ending blocks. The scale is such that all blocks fit in the window. The window itself can be scaled at will.

Red blocks represent writes, blue blocks represent reads. Areas that get both read and write requests have mixed red+blue color components. The intensity of the color represents the intensity of activity: less intense color is used when there is little activity in the area and bright color appears when there are many requests in the area.

The timeframe alloted (timescale) to each row is adjustable at runtime via a slider control.

Ggtrace requires wxgtk26 and png ports to build. The sources can be downloaded here but see the SourceForge site for possibly newer version. Ggtrace is working and usable only on the RELENG_6 branch.