The MonA file system incurs overhead through its implementation of transformation networks, as shown in Section 5.1.1. However, each transformation has an additional cost related to its complexity. This cost is not additional overhead; the file system is performing computations on behalf of an application that otherwise would execute the same operations in user space.
Tests evaluate performance of the
(N) increment
transformation, which increments the value of each byte on a data stream.
The increment transformation superficially may appear to be
a trivial end-to-end performance test. However, transformations of
higher complexity tended to mask the underlying cost of the
implementation because computations within the transformations
dominated execution time. Additionally, transformations are
stream-oriented operations, which naturally are of linear complexity.
Therefore, a typical transformation has linear complexity and varies
from the increment transformation by only a constant factor.
An increment transformation within the MonA file system is
considerably faster than an increment operation performed by
conventional Unix pipes. A pipe transformation implementation was
generated by forking a separate process for each operation and
connecting the processes with pipes.
As expected, the pipe implementation performs worse than MonA. Interprocess
communication and process overhead affect pipes. At best (for a single
transformation) pipes are 30-40
slower than the MonA file system. Each
additional transformation further degrades performance because every extra
pipe must copy each byte transferred.
The performance difference is due to the number of times a buffer is copied on a file access, as illustrated in Figure 9 and Figure 10. Like ext2, both implementations require copying data from a file to a kernel buffer and performing a second copy from the kernel buffer to the user process that requested data. The MonA implementation allows transformations to share the kernel buffer, eliminating copies between transformations. In contrast, the Unix pipeline must copy the entire buffer each time data is passed to the next stage in the pipeline. Consequently, both ext2 and MonA impose 2 copies for each file access4 but a pipeline imposes 2+N copies, where N is the number of stages in the pipeline.