Linux Benchmarks - TargetFS-LKM
Introduction
TargetFS-LKM (TFS-LKM), Blunk’s best-in-class, high performance, full storage embedded Linux solution is a viable alternative to the default file systems available under Linux. TFS-LKM works well with eMMC and SD cards as well as raw flash - both NOR and NAND. For raw flash, our solution comprises not only our generic, high performance file system, TargetXFS (TXFS), but also our best-in-class flash translation layers for both NAND and NOR.
To showcase its capabilities, Blunk has run the following well-known file system benchmarks:
TFS-LKM is versatile in its support of storage media. The above benchmarks have been run on three different types of memory - eMMC, raw NAND flash and raw NOR flash.
For the eMMC benchmarks, TFS-LKM has been run against the EXT4 file system. For the raw flash benchmarks, TFS-LKM has been run against the UBIFS and JFFS2 flash centric file systems.
FFSB Benchmark
The measurements used for the FFSB benchmarks are:
- metaop - a combination of several directory operations (two directory creates, one directory remove and one directory rename)
- read - random file reads
- read all - full/sequential file reads
- write - random file overwrites
- write all - full/sequential file writes
FileBench Benchmark
The FileBench benchmark uses profiles to measure certain aspects of a
file system functionality. The following profiles were used for the
benchmark:
Five Stream Direct Write 3.0 - sequential 1MB writes to five 1GB files, each in its own thread, using the O_DIRECT open() flag
Single Stream Direct Write 3.0 - sequential 1MB writes to single 1GB file using the O_DIRECT open() flag
Five Stream Direct Read 3.0 - sequential 1MB reads from five 1GB files, each in its own thread, using the O_DIRECT open() flag
Single Stream Direct Read 3.0 - sequential 1MB reads from single 1GB file using the O_DIRECT open() flag
File Micro-ReadRand 2.2 - single threaded random 2KB reads from a single 1GB file
File Micro-SeqRead 2.1 - single threaded sequential 1MB reads from a single 1GB file
File Stream Read 3.0 - sequential 1MB reads from five 1GB files, each in its own thread
RandomRead 3.0 - single threaded random 8KB reads from a single 5GB file
SingleStreamRead 3.0 - single threaded sequential 1MB reads from a single 5GB file
RandomWrite 3.0 - single threaded random 8KB overwrites to a single pre-allocated 5GB file
FileMicro-WriteRand 2.1 - single threaded asynchronous random 2KB writes to single 1GB file
FileMicro-SeqWrite 2.2 - single threaded asynchronous sequential 1MB writes to 1GB single file
FileMicro-SeqWriteRand 2.2 - single threaded random sized appends/writes (1B to 8KB) to 1GB single file
FileMicro-SeqWriteRandVarGam 1.1 - single threaded random sized appends/writes (1B to 8KB) to 1GB single file
FileMicro-SeqWriteRandVarTab 1.1 - sequential writes to 1GB single file (1KB to 64KB - mean 5.5KB), followed by close()
Five Stream Write 3.0 - sequential 1MB writes of five 64MB files, each in its own thread
Single Stream Write 3.0 - sequential 1MB writes to single file for 1s
FileMicro-WriteRandDsync 2.1 - single threaded synchronous (O_DSYNC open() flag) 2KB writes to single 1GB file
FileMicro-WriteRandFsync 2.1 - single threaded asynchronous random 8KB writes to single 1GB file, with fsync() calls after every 16KB writes
FileMicro-WriteFsync 2.1 - single threaded 8KB appens/writes to single 1GB file, with fsync() after every 1250 append calls
FileMicro-CreateRand 2.1 - single threaded asynchronous random appends (1B to 1MB) to a single 1KB file, with fsync() after every 10 append calls
FileMicro-Delete 2.4 - create 50000 files with sizes based on gamma distribution of median size 16KB, then create 16 threads, each deleting 1000 files
Copyfiles 3.0 - copy directory tree with 1000 files to new destination directory via single thread>
Stat File 1.0 - create 10000 files, then loop through them via 20 threads, calling stat() on each file
ListDirs 1.0 - create deep directory tree with 50000 files, then list contents via readdir()
MakeDirs 1.0 - create 10000 leaf directories in directory tree
Openfiles 1.0 - create 50000 empty files, then open()/close() each
RemoveDir 1.0 - remove 10000 empty directories from an already created directory tree
FileMicro-Createfiles - create 20000 files via 1MB writes
Random RW Version 3.0 - random 8KB reads/writes on single, existing 5GB file via two threads, one for reads, one for writes
Eventgen rate - compound profile
CompFlow_Demo Version 1.1 - compound profile
NetworkServer Version 1.1 - compound profile
FIO Benchmark
The FIO benchmark performs 4KB reads and writes on a large file. The
measurements used for the benchmark are:
- seq-read - sequential file reads
- rand-read - random file reads
- seq-write - sequential file writes
- rand-write - random file writes
IOZone Benchmark
The IOZone benchmark performs various read/write measurements on a large file using I/O requests in the range 4KB to 16MB.
The measurements used for the benchmark are:
- Writer - write a new file
- Re-Writer - write a file that already exists
- Reader - read a file for the first time
- Re-Reader - read a file that was recently read
- Random Write - write to random locations in a file
- Random Read - read from random locations in a file
- Fwrite - write to a new file using fwrite()
- Fread - read a file for the first time using fread()
- Re-Fwrite - write to an exiting file using fwrite()
- Re-Fread - read a file that was recently read using fread()
- Backward Read - read a file backwards from the end to the front
- Record Rewrite - continuous writes to same hot spot location inside a file
- Stride Read - read a file with strided access behavior (access pattern is read X bytes, seek Y bytes)
eMMC Benchmarks
eMMC benchmarks were performed on the following cards:
- Toshiba 16GB - THGBMBG7D2KBAIL
- Micron 16GB - MTFC16GAKAECN-2M
The board used for the benchmarks is the ZC702 evaluation kit from AMD. In all the eMMC benchmarks below, TargetXFS values are in blue, EXT4 values are in red.
Toshiba eMMC results in Transactions/sec:
Micron eMMC results in Transactions/sec:
FileBench Benchmark
Toshiba eMMC results in Operations/sec:
Micron eMMC results in either MB/s or Operations/sec depending on the functionality being measured:
FIO Benchmark
We used 256MB files for the FIO benchmarks.
Toshiba eMMC results in IOPS:
Micron eMMC results in IOPS:
IOZone Benchmark
We used 256MB files for the IOZone benchmarks.
Toshiba eMMC results in KB/s:
Micron eMMC results in KB/s:
NOR SPI Benchmarks
NOR SPI benchmarks were performed on the Micron N25Q128A11ESF40G quad-spi flash. The board used for the benchmarks is the ZC702 evaluation kit from AMD. The size of the volumes being tested was set to 11MB. In all the NOR SPI benchmarks below, TargetXFS values are in blue, JFFS2 values are in red, and UBIFS values are in green.
NOR SPI results in Transactions/sec:
FileBench Benchmark
NOR SPI results in either MB/s or Operations/sec(Ops/s) depending on the functionality being measured:
FIO Benchmark
We used two measurements for the FIO benchmarks. One used 4MB files, the other 8MB ones.
NOR SPI 4MB files results in IOPS:
NOR SPI 8MB files results in IOPS:
IOZone Benchmark
We used two measurements for the IOZone benchmarks. One used 4MB files, the other 8MB ones.
NOR SPI 4MB files results in KB/s:
NOR SPI 8MB files results in KB/s:
NAND Benchmarks
NAND benchmarks were performed on the Samsung K9F1G08UA-P flash. The board used for the benchmarks is the ea3250 evaluation kit from Embedded Artists. The size of the volumes being tested was set to 122MB. In all the NAND benchmarks below, TargetXFS values are in blue, JFFS2 values are in red, and UBIFS values are in green.
NAND results in Transactions/sec:
FIO Benchmark
NAND results in IOPS:
IOZone Benchmark
We used two measurements for the IOZone benchmarks. One used 4MB files, the other 8MB ones.
NAND 4MB files results in KB/s:
NAND 8MB files results in KB/s: