This code originally existed as an "ADIO" driver for ROMIO, an MPI-IO implementation. Timber took all that code out of ROMIO with the thought that other I/O interfaces might find it helpful.
Timber requires MPI for datatype processing and collectives.
Building uses standard autotools:
$ configure --prefix=... CC=mpicc
Originally developed as a ROMIO adio driver, the build process for the standalone library is a little convoluted. LogFS requires an MPI compiler to build, but if you want a logfs ROMIO driver, you will need LogFS headers. You will end up building MPICH, then logfs, then building MPICH a second time.
- configure mpich as you normally would, with a prefix pointing to
/some/path - configure/install timber/logfs , using the MPICH you just built above:
$ configure CC=/some/path/bin/mpicc - configure/install mpich with logfs. It will be just like step #1 except now
to get
logfssupport you configure with--with-file-system=ufs+logfs(plus whatever other ROMIO drivers you would like to use
Timber uses a few MPI-IO info keys to guide its behavior. The defaults are sensible enough but if, for example, you wished to log to a fast local SSD.
Set these like you would any other hint. I like to use the "system hints": put them in a config file.
Most useful hints:
- "logfs_replayonclose": If set, replay the file when closing. Otherwise, replay will be deferred until first read. (default: "false")
- "logfs_info_logbase": set base dir for log files (default: same directory in which cannoncial file resides)
- "logfs_flushblocksize": size of intermediate buffer for replaying log files( default: 1 MiB)
Other hints:
- "logfs_readmode": if you don't plan on ever reading the log file then logfs will defer some work as late as possible. If you might read the data, then logfs will maintain a bit of extra state. (default: "track_some")
- "logfs_debug": logfs can dump out some additional information. It's not clear how helpful this is.
- "logfs_timereplay": report how long it takes to replay the log file. Currently broken
- "logfs_datablockcount": number of blocks in write buffer (default: 2)
- "logfs_datablocksize": size of a block in the write buffer (default: 1 MiB)
- "logfs_metablocksize": size of a block in the metadata buffer (default: 64 KiB)
- "logfs_metablockcount": number of blocks in metadata buffer (default: 2)
- "logfs_sync": for sync mode (no lazy writing). In sync mode, no write buffering is done (ignoring the blockcount/blocksize keys). (default: "false")
NOTE: xxxBLOCKCOUNT and xxxBLOCKSIZE should both be set, otherwise they have no effect
- LOGFSTMP
- LOGFS_DEBUG
- LOGFS_TIMERREPLAY
Dries Kimpe wrote the original LogFS work. The paper "Transparent log-based data storage in MPI-IO applications" provides more details about the design choices.