There are 8 benchmarks that get run for every filesystem. The currently supported filesystems are Fxfs, F2fs, Memfs, and Minfs.
The benchmarks are all of the combinations of read/write, sequential/random, and warm/cold. Every read/write call uses an 8KiB buffer and each operation is performed 1024 times spread across an 8MiB file. The benchmarks measure how long each read/write operation takes.
pread
calls to the file.pwrite
call to the file.At the beginning of most benchmarks is a setup phase that creates files within the filesystem. Simply closing all handles to those files doesn‘t guarantee that the filesystem will immediately clear all caches related to those files. If the caches aren’t cleared then the benchmark may only ever hit cached (warm) data. To support benchmarking uncached (cold) operations, the Fuchsia Filesystem Benchmarks support remounting the filesystem. Remounting the filesystem between the setup and recording phases guarantees that all data related the file that isn't normally cached gets dropped.
The Fuchsia Filesystem Benchmarks use a custom framework for timing filesystem operations. Filesystems hold state external to the read
or write
operations being benchmarked which can lead to drastically different timings between consecutive operations. For other performance tests, we want to treat the initial one or more iterations as warm-up iterations and drop their timings. (For example, for some IPC performance tests, the initial iteration doesn‘t complete until a subprocess has finished starting up, making it much slower than the later iterations.) These storage tests differ in that we don’t want to drop the initial iterations' timings.
Ex. On the first
read
operation to a file in Minfs, Minfs reads the entire file into memory and each subsequentread
is served from memory. The warm-up phase of fuchsia-criterion would hide the extremely slowread
call.
//src/storage/benchmarks
in fx set
.fx test fuchsia-pkg://fuchsia.com/storage-benchmarks#meta/storage-benchmarks.cm
The set of benchmarks and filesystems can filtered with the --filter
flag.