Menu

Home

Joerg

NOTE

This project has been moved to github (https://github.com/hiker/alio), and is not maintained here anymore. It will likely be deleted in a few weeks time.

ALIO

The alio library is a dynamically pre-linked library that sits between an application and glibc. All IO calls (fopen, open, fwrite, read, stat, ...) will go though wrapper functions in alio. The library is intended to be used in High Performance Computing (HPC) applications, where large scale IO (100 GBs) cause a significant slow down for large scale parallel applications. It can be used to test, tune, and optimise IO for applications.

At runtime various behaviours can be selected using an XML config file. For example:

  • output can be ignored.
    • This allows to determine how much time an application spends in IO.
    • An application can run on a machine without enough disk capacity, while still being able to debug.
  • input/output can be [traced].
    • It shows how IO in an unknown application works, which allows IO tuning.
    • Can be useful for debugging or performance optimisation.
    • In case of output files special IO trace files can be created, which can then be replayed to reproduce IO done by any kind of application. Replaying trace files can then be used to tune a file system, or act as a reference to test to detect performance regressions etc.
  • input/output can be [summarised].
    • A summary of IO for any file opened can be printed at the end of a run
  • monitored
    • A graph could actually show IO happening while the application is running.
  • input can be prefetched in memory, resulting in improved application performance.
  • output can be kept in memory instead being written to disk
    • Temporary files do not need to be written back to disk. Several processes can contact the same IO stand-alone server.
    • More than one IO server can be utilised to allow storage of large (100GBs) files
  • output can be buffered in memory
    • Reduces the amount of IO time for an applications
    • More than one node can be used to buffer (or store) output data.
  • redirected
    • Stand-alone IO server can buffer and handle IO for an application.

Related

Wiki: summarised
Wiki: traced