RFLUSH implements a fine-grained flush command in a storage device using an open-source flash development platform to transfers a range of LBAs that need to be flushed and thus enables the storage device to force only a subset of data in its buffer.
The FLUSH command forces all the data in the volatile buffer of the storage device to non-volatile media to achieve persistency.
There are three system calls available to user applications to flush dirty buffers to disk:
- sync() Allows a process to flush all dirty buffers to disk
- fsync() Allows a process to flush all blocks that belong to a specific open file to disk
- fdatasync() Very similar to fsync( ), but doesn’t flush the inode block of the file
Overall, RFLUSH implement a fine-grained flush by identifying related data blocks through inode information of a file. Those related data blocks are usually adjacent because filesystems trend to allocate space sequentially.