We have ported the MIT Log-Structured Logical Disk (LLD) [7], a user level implementation of LFS (subsequently also labeled as LFS). It consists of two modules: the MinixUFS and the log-structured logical disk, both running at user level. MinixUFS accesses the logical disk with a block interface while the logical disk interfaces with the raw disk using segments. The block size is 4 KB and the segment size is 0.5 MB. The implementors of LLD has disabled read-ahead in MinixUFS because blocks deemed contiguous by MinixUFS may not be so in the logical disk. A number of other issues also impact the LFS performance. First, MinixUFS employs a file buffer cache of 6.1 MB. Unless ``sync'' operations are issued, all writes are asynchronous. In some of the experiments in Section 5, we assume this buffer to be made of NVRAM so that the LFS configuration can have a similar reliability guarantee as that of the synchronous systems. We will examine the effectiveness of NVRAM.
Second, the logical disk's response to a ``sync'' operation is determined by a tunable parameter called partial segment threshold. If the current segment is filled above the threshold at the time of the ``sync'', the current segment is flushed to the disk as if it were full. If it is below the threshold, the current segment is written to the disk but the memory copy is retained to receive more writes. The partial segment threshold in the experiments is set to 75%.
Third, the original logical disk only invokes the cleaner when it runs out of empty segments. We have modified the cleaner so that it can be invoked during idle periods before it runs out of free space.