blockio: Perform batches of disk I/O operations.

[ apache, library, system ] [ Propose Tags ] [ Report a vulnerability ]

Perform batches of disk I/O operations. Performing batches of disk I/O can lead to performance improvements over performing each disk I/O operation individually. Performing batches of disk I/O concurrently can lead to an even bigger performance improvement depending on the implementation of batched I/O.

The batched I/O functionality in the library is separated into an abstract interface and implementations of that abstract interface. The advantage of programming against an abstract interface is that code can be agnostic to the implementation of the interface, allowing implementations to be freely swapped out. The library provides multiple implementations of batched I/O: platform-dependent implementations using the real file system (with asynchronous I/O), and a simulated implementation for testing purposes.

See the System.FS.BlockIO module for an example of how to use the library.


[Skip to Readme]

library blockio

library blockio:sim

Modules

[Index] [Quick Jump]

  • System
    • FS
      • BlockIO
        • System.FS.BlockIO.Sim

Flags

Manual Flags

NameDescriptionDefault
serialblockio

Use serial HasBlockIO regardless of the operating system

Disabled

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS] 0.1.0.0, 0.1.0.1
Change log CHANGELOG.md
Dependencies base (>=4.16 && <4.22), blockio, blockio-uring (>=0.1 && <0.2), bytestring (>=0.11 && <0.13), deepseq (>=1.4 && <1.6), fs-api (>=0.4 && <0.5), fs-sim (>=0.4 && <0.5), io-classes (>=1.6 && <1.8 || >=1.8.0.1 && <1.9), primitive (>=0.9 && <0.10), unix (>=2.8.7 && <2.9), vector (>=0.13 && <0.14), Win32 (>=2.14 && <2.15) [details]
Tested with ghc ==9.2 || ==9.4 || ==9.6 || ==9.8 || ==9.10 || ==9.12
License Apache-2.0[multiple license files]
Copyright (c) 2023-2025 Cardano Development Foundation
Author Duncan Coutts, Joris Dral, Matthias Heinzel, Wolfgang Jeltsch, Wen Kokke, and Alex Washburn
Maintainer joris@well-typed.com
Category System
Source repo head: git clone https://github.com/IntersectMBO/lsm-tree(blockio)
this: git clone https://github.com/IntersectMBO/lsm-tree(tag blockio-0.1.0.1)(blockio)
Uploaded by jdral at 2025-07-16T12:27:48Z
Distributions
Downloads 6 total (6 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs uploaded by user
Build status unknown [no reports yet]

Readme for blockio-0.1.0.1

[back to package description]

blockio

Perform batches of disk I/O operations. Performing batches of disk I/O can lead to performance improvements over performing each disk I/O operation individually. Performing batches of disk I/O concurrently can lead to an even bigger performance improvement depending on the implementation of batched I/O.

The batched I/O functionality in the library is separated into an abstract interface and implementations of that abstract interface. The advantage of programming against an abstract interface is that code can be agnostic to the implementation of the interface, allowing implementations to be freely swapped out. The library provides multiple implementations of batched I/O: platform-dependent implementations using the real file system (using asynchronous I/O), and a simulated implementation for testing purposes.

See the System.FS.BlockIO module for an example of how to use the library.

On Linux systems the real implementation is backed by blockio-uring, a library for asynchronous I/O that achieves good performance when performing batches concurrently. On Windows and MacOS systems the real implementation currently simply performs each I/O operation sequentially, which should achieve about the same performance as using non-batched I/O, but the library could be extended with asynchronous I/O implementations for Windows and MacOS as well. The simulated implementation also performs each I/O operation sequentially.

As mentioned before, the batched I/O functionality is separated into an abstract interface and implementations of that abstract interface. The advantage of programming against an abstract interface is that code can be agnostic to the implementation of the interface. For example, we could run code in production using the real file system, but we could also run the same code in a testing environment using a simulated file system. We could even switch from a default implementation to a more performant implementation in production if the performant implementation is available. Lastly, the abstract interface allows us to program against the file system in a uniform manner across different platforms, i.e., operating systems.

The blockio library defines the abstract interface for batched I/O. The library is an extension of the fs-api library, which defines an abstract interface for (basic) file system I/O. Both blockio and fs-api provide an implementation of their interfaces using the real file system in IO.

The blockio:sim sub-library defines an implementation of the abstract interface from blockio that simulates batched I/O. This sub-library is an extension of the fs-sim library, which defines an implementation of the abstract interface from fs-api that simulates (basic) file system I/O.