Linux 4.4 To Linux 4.7 - EXT4 vs. F2FS vs. Btrfs

Linux file-system benchmarks by Michael Larabel for a future article on Phoronix.

HTML result view exported from: https://openbenchmarking.org/result/1608041-LO-LINUX44BT31&gru&sor.

ProcessorMotherboardChipsetMemoryDiskGraphicsAudioNetworkOSKernelDesktopDisplay ServerDisplay DriverOpenGLCompilerFile-SystemScreen ResolutionLinux 4.4Linux 4.5Linux 4.6Linux 4.7Linux 4.4Linux 4.5Linux 4.6Linux 4.7Linux 4.4Linux 4.5Linux 4.6Linux 4.7 Btrfs Btrfs Btrfs Btrfs EXT4 EXT4 EXT4 EXT4 F2FS F2FS F2FS F2FSIntel Xeon E3-1280 v5 @ 4.00GHz (8 Cores)MSI C236A WORKSTATION (MS-7998) v1.0Intel Skylake16384MB115GBLLVMpipeRealtek ALC1150Intel ConnectionUbuntu 16.104.4.0-040400-generic (x86_64)Unity 7.5.0X Server 1.18.4nouveau 1.0.123.3 Mesa 12.0.1 Gallium 0.4GCC 5.4.0 20160609btrfs1024x768Samsung SSD 950 PRO 256GB4.5.0-040500-generic (x86_64)4.6.0-040600-generic (x86_64)4.7.0-040700-generic (x86_64)115GB4.4.0-040400-generic (x86_64)ext4Samsung SSD 950 PRO 256GB4.5.0-040500-generic (x86_64)4.6.0-040600-generic (x86_64)4.7.0-040700-generic (x86_64)115GB4.4.0-040400-generic (x86_64)f2fsSamsung SSD 950 PRO 256GB4.5.0-040500-generic (x86_64)4.6.0-040600-generic (x86_64)4.7.0-040700-generic (x86_64)OpenBenchmarking.orgEnvironment Details- LIBGL_ALWAYS_SOFTWARE=1Compiler Details- --build=x86_64-linux-gnu --disable-browser-plugin --disable-vtable-verify --disable-werror --enable-checking=release --enable-clocale=gnu --enable-default-pie --enable-gnu-unique-object --enable-gtk-cairo --enable-java-awt=gtk --enable-java-home --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --enable-libmpx --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-multiarch --enable-multilib --enable-nls --enable-objc-gc --enable-plugin --enable-shared --enable-threads=posix --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-abi=m64 --with-arch-32=i686 --with-arch-directory=amd64 --with-default-libstdcxx-abi=new --with-multilib-list=m32,m64,mx32 --with-tune=generic -v Processor Details- Scaling Governor: intel_pstate performanceDisk Mount Options Details- Linux 4.4: Btrfs: relatime,rw,space_cache,ssd,subvol=/,subvolid=5- Linux 4.5: Btrfs: relatime,rw,space_cache,ssd,subvol=/,subvolid=5- Linux 4.6: Btrfs: relatime,rw,space_cache,ssd,subvol=/,subvolid=5- Linux 4.7: Btrfs: relatime,rw,space_cache,ssd,subvol=/,subvolid=5- Linux 4.4: EXT4: data=ordered,relatime,rw- Linux 4.5: EXT4: data=ordered,relatime,rw- Linux 4.6: EXT4: data=ordered,relatime,rw- Linux 4.7: EXT4: data=ordered,relatime,rw- Linux 4.4: F2FS: acl,active_logs=6,background_gc=on,extent_cache,inline_data,relatime,rw,user_xattr- Linux 4.5: F2FS: acl,active_logs=6,background_gc=on,extent_cache,inline_data,relatime,rw,user_xattr- Linux 4.6: F2FS: acl,active_logs=6,background_gc=on,extent_cache,inline_data,relatime,rw,user_xattr- Linux 4.7: F2FS: acl,active_logs=6,background_gc=on,extent_cache,inline_data,relatime,rw,user_xattr

fs-mark: 1000 Files, 1MB Sizefs-mark: 5000 Files, 1MB Size, 4 Threadsfs-mark: 4000 Files, 32 Sub Dirs, 1MB Sizeblogbench: Readblogbench: Writefio: Rand Read - Libaio - No - Yes - 4KB - Default Test Directory - IOPSfio: Rand Write - Libaio - No - Yes - 4KB - Default Test Directory - IOPSfio: Seq Read - Libaio - No - Yes - 4KB - Default Test Directory - IOPSfio: Seq Write - Libaio - No - Yes - 4KB - Default Test Directory - IOPSdbench: 1redis: GETpgbench: On-Disk - Normal Load - Read Writesqlite: Default Test DirectoryLinux 4.4Linux 4.5Linux 4.6Linux 4.7Linux 4.4Linux 4.5Linux 4.6Linux 4.7Linux 4.4Linux 4.5Linux 4.6Linux 4.7 Btrfs Btrfs Btrfs Btrfs EXT4 EXT4 EXT4 EXT4 F2FS F2FS F2FS F2FS139.57281.03141.6317323809449270161747972643446430577.042854247.292226.57151.83142.00280.27141.8717468529263220069699352535886373878.963151309.002217.07150.74140.40279.87142.4018087488664242857732462636076364482.793132359.422227.81126.04142.33280.67141.9317215689141192625733962703476391083.052782214.832227.41132.58144.70310.70142.27555506184222597478109928462323311084.493102801.063571.0566.51144.40303.33141.83573934180101941608109028398023178885.102834325.503597.3365.64142.13303.97142.60589041185751944978131428349623307984.723041782.383593.8065.53142.23320.80143.53550031164612155208094628397323165684.943148836.083713.8765.94259.63294.97259.9012079271057027562881734285405233430188.022945344.293150.0976.23262.73298.03260.672202620388419406281520283592233486187.433102704.583472.0876.87268.20295.37265.002236338394319453681663285348233046187.293128367.833106.4676.07267.23291.87267.972295280417319427481407284781233585187.183027572.713187.5976.28OpenBenchmarking.org

FS-Mark

Test: 1000 Files, 1MB Size

Linux 4.6Linux 4.7Linux 4.5Linux 4.4OpenBenchmarking.orgFiles/s, More Is BetterFS-Mark 3.3Test: 1000 Files, 1MB SizeF2FSEXT4Btrfs60120180240300SE +/- 0.64, N = 3SE +/- 0.32, N = 3SE +/- 0.75, N = 3SE +/- 0.58, N = 3SE +/- 0.18, N = 3SE +/- 0.38, N = 3SE +/- 0.55, N = 3SE +/- 0.32, N = 3SE +/- 1.02, N = 3SE +/- 0.55, N = 3SE +/- 1.48, N = 3SE +/- 1.04, N = 3268.20142.13140.40267.23142.33142.23262.73144.40142.00259.63144.70139.571. (CC) gcc options: -static

FS-Mark

Test: 5000 Files, 1MB Size, 4 Threads

Linux 4.7Linux 4.4Linux 4.6Linux 4.5OpenBenchmarking.orgFiles/s, More Is BetterFS-Mark 3.3Test: 5000 Files, 1MB Size, 4 ThreadsEXT4F2FSBtrfs70140210280350SE +/- 2.01, N = 3SE +/- 3.93, N = 3SE +/- 0.35, N = 3SE +/- 1.55, N = 3SE +/- 1.55, N = 3SE +/- 0.30, N = 3SE +/- 1.19, N = 3SE +/- 3.40, N = 3SE +/- 0.35, N = 3SE +/- 0.87, N = 3SE +/- 3.79, N = 3SE +/- 0.18, N = 3320.80291.87280.67310.70294.97281.03303.97295.37279.87303.33298.03280.271. (CC) gcc options: -static

FS-Mark

Test: 4000 Files, 32 Sub Dirs, 1MB Size

Linux 4.7Linux 4.6Linux 4.5Linux 4.4OpenBenchmarking.orgFiles/s, More Is BetterFS-Mark 3.3Test: 4000 Files, 32 Sub Dirs, 1MB SizeF2FSEXT4Btrfs60120180240300SE +/- 0.24, N = 3SE +/- 0.58, N = 3SE +/- 0.18, N = 3SE +/- 0.40, N = 3SE +/- 0.53, N = 3SE +/- 0.20, N = 3SE +/- 0.44, N = 3SE +/- 0.24, N = 3SE +/- 0.38, N = 3SE +/- 0.66, N = 3SE +/- 0.13, N = 3SE +/- 0.19, N = 3267.97143.53141.93265.00142.60142.40260.67141.87141.83259.90142.27141.631. (CC) gcc options: -static

BlogBench

Test: Read

Linux 4.7Linux 4.6Linux 4.5Linux 4.4OpenBenchmarking.orgFinal Score, More Is BetterBlogBench 1.0Test: ReadF2FSBtrfsEXT4500K1000K1500K2000K2500KSE +/- 12704.41, N = 3SE +/- 20785.44, N = 3SE +/- 11102.40, N = 6SE +/- 21281.10, N = 3SE +/- 17391.57, N = 3SE +/- 15703.05, N = 6SE +/- 15341.86, N = 3SE +/- 16571.58, N = 3SE +/- 11922.94, N = 6SE +/- 33989.92, N = 3SE +/- 187835.89, N = 6SE +/- 18109.30, N = 6229528017215685500312236338180874858904122026201746852573934173238012079275555061. (CC) gcc options: -O2 -pthread

BlogBench

Test: Write

Linux 4.6Linux 4.4Linux 4.5Linux 4.7OpenBenchmarking.orgFinal Score, More Is BetterBlogBench 1.0Test: WriteEXT4F2FSBtrfs4K8K12K16K20KSE +/- 1693.08, N = 3SE +/- 57.17, N = 3SE +/- 108.00, N = 3SE +/- 1314.03, N = 3SE +/- 2319.75, N = 3SE +/- 110.00, N = 3SE +/- 1495.01, N = 3SE +/- 66.19, N = 3SE +/- 80.01, N = 3SE +/- 1662.76, N = 3SE +/- 135.08, N = 3SE +/- 36.04, N = 3185758664394318422105709449180109263388416461914141731. (CC) gcc options: -O2 -pthread

Flexible IO Tester

Type: Random Read - IO Engine: Libaio - Buffered: No - Direct: Yes - Block Size: 4KB - Disk Target: Default Test Directory - Result: IOPS

Linux 4.4Linux 4.6Linux 4.5Linux 4.7OpenBenchmarking.orgIOPS, More Is BetterFlexible IO Tester 2.1.13Type: Random Read - IO Engine: Libaio - Buffered: No - Direct: Yes - Block Size: 4KB - Disk Target: Default Test Directory - Result: IOPSF2FSBtrfsEXT460K120K180K240K300KSE +/- 179.27, N = 3SE +/- 382.19, N = 3SE +/- 84.41, N = 3SE +/- 27.20, N = 3SE +/- 60.01, N = 3SE +/- 44.60, N = 3SE +/- 6.69, N = 3SE +/- 31.42, N = 3SE +/- 69.91, N = 3SE +/- 65.08, N = 3SE +/- 109.86, N = 3SE +/- 16.17, N = 32756282701612597472428571945361944972200691941601940622155201942741926251. (CC) gcc options: -rdynamic -std=gnu99 -O3 -ffast-math -include -lrt -laio -lm -lpthread -ldl

Flexible IO Tester

Type: Random Write - IO Engine: Libaio - Buffered: No - Direct: Yes - Block Size: 4KB - Disk Target: Default Test Directory - Result: IOPS

Linux 4.4Linux 4.6Linux 4.5Linux 4.7OpenBenchmarking.orgIOPS, More Is BetterFlexible IO Tester 2.1.13Type: Random Write - IO Engine: Libaio - Buffered: No - Direct: Yes - Block Size: 4KB - Disk Target: Default Test Directory - Result: IOPSF2FSEXT4Btrfs20K40K60K80K100KSE +/- 58.53, N = 3SE +/- 81.21, N = 3SE +/- 1164.93, N = 3SE +/- 81.30, N = 3SE +/- 85.99, N = 3SE +/- 1151.31, N = 4SE +/- 49.70, N = 3SE +/- 78.88, N = 3SE +/- 1159.30, N = 3SE +/- 95.69, N = 3SE +/- 58.46, N = 3SE +/- 474.84, N = 38173481099747978166381314732468152081090699358140780946733961. (CC) gcc options: -rdynamic -std=gnu99 -O3 -ffast-math -include -lrt -laio -lm -lpthread -ldl

Flexible IO Tester

Type: Sequential Read - IO Engine: Libaio - Buffered: No - Direct: Yes - Block Size: 4KB - Disk Target: Default Test Directory - Result: IOPS

Linux 4.4Linux 4.6Linux 4.7Linux 4.5OpenBenchmarking.orgIOPS, More Is BetterFlexible IO Tester 2.1.13Type: Sequential Read - IO Engine: Libaio - Buffered: No - Direct: Yes - Block Size: 4KB - Disk Target: Default Test Directory - Result: IOPSF2FSEXT4Btrfs60K120K180K240K300KSE +/- 56.72, N = 3SE +/- 27.79, N = 3SE +/- 3789.67, N = 3SE +/- 34.64, N = 3SE +/- 364.49, N = 3SE +/- 3140.86, N = 3SE +/- 73.04, N = 3SE +/- 43.50, N = 3SE +/- 1073.84, N = 3SE +/- 73.42, N = 3SE +/- 19.08, N = 3SE +/- 1349.38, N = 32854052846232643442853482834962636072847812839732703472839802835922535881. (CC) gcc options: -rdynamic -std=gnu99 -O3 -ffast-math -include -lrt -laio -lm -lpthread -ldl

Flexible IO Tester

Type: Sequential Write - IO Engine: Libaio - Buffered: No - Direct: Yes - Block Size: 4KB - Disk Target: Default Test Directory - Result: IOPS

Linux 4.7Linux 4.5Linux 4.4Linux 4.6OpenBenchmarking.orgIOPS, More Is BetterFlexible IO Tester 2.1.13Type: Sequential Write - IO Engine: Libaio - Buffered: No - Direct: Yes - Block Size: 4KB - Disk Target: Default Test Directory - Result: IOPSF2FSEXT4Btrfs50K100K150K200K250KSE +/- 112.34, N = 3SE +/- 49.24, N = 3SE +/- 1006.05, N = 3SE +/- 44.54, N = 3SE +/- 210.42, N = 3SE +/- 1185.59, N = 3SE +/- 145.24, N = 3SE +/- 120.01, N = 3SE +/- 1126.01, N = 3SE +/- 110.96, N = 3SE +/- 73.87, N = 3SE +/- 555.15, N = 3233585231656639102334862317886373823343023311064305233079233046636441. (CC) gcc options: -rdynamic -std=gnu99 -O3 -ffast-math -include -lrt -laio -lm -lpthread -ldl

Dbench

Client Count: 1

Linux 4.4Linux 4.5Linux 4.6Linux 4.7OpenBenchmarking.orgMB/s, More Is BetterDbench 4.0Client Count: 1F2FSEXT4Btrfs4080120160200SE +/- 2.79, N = 6SE +/- 0.07, N = 3SE +/- 0.04, N = 3SE +/- 2.74, N = 5SE +/- 0.02, N = 3SE +/- 0.04, N = 3SE +/- 2.86, N = 5SE +/- 0.04, N = 3SE +/- 0.10, N = 3SE +/- 3.57, N = 4SE +/- 0.07, N = 3SE +/- 0.30, N = 3188.0284.4977.04187.4385.1078.96187.2984.7282.79187.1884.9483.051. (CC) gcc options: -lpopt -O2

Redis

Test: GET

Linux 4.5Linux 4.7Linux 4.6Linux 4.4OpenBenchmarking.orgRequests Per Second, More Is BetterRedis 3.0.1Test: GETBtrfsEXT4F2FS700K1400K2100K2800K3500KSE +/- 8744.85, N = 3SE +/- 22529.67, N = 3SE +/- 143824.61, N = 6SE +/- 37301.93, N = 3SE +/- 113714.90, N = 6SE +/- 154397.91, N = 6SE +/- 36384.42, N = 3SE +/- 13103.08, N = 3SE +/- 47595.92, N = 4SE +/- 46011.71, N = 4SE +/- 108968.99, N = 6SE +/- 110138.79, N = 63151309.003102704.582834325.503148836.083027572.712782214.833132359.423128367.833041782.383102801.062945344.292854247.291. (CC) gcc options: -ggdb -rdynamic -lm -pthread -ldl -std=gnu99 -pipe -g3 -O3 -funroll-loops

PostgreSQL pgbench

Scaling: On-Disk - Test: Normal Load - Mode: Read Write

Linux 4.7Linux 4.5Linux 4.6Linux 4.4OpenBenchmarking.orgTPS, More Is BetterPostgreSQL pgbench 9.4.3Scaling: On-Disk - Test: Normal Load - Mode: Read WriteEXT4F2FSBtrfs8001600240032004000SE +/- 26.02, N = 3SE +/- 9.54, N = 3SE +/- 5.08, N = 3SE +/- 28.13, N = 3SE +/- 19.52, N = 3SE +/- 2.04, N = 3SE +/- 26.17, N = 3SE +/- 18.68, N = 3SE +/- 4.97, N = 3SE +/- 31.20, N = 3SE +/- 2.80, N = 3SE +/- 8.51, N = 33713.873187.592227.413597.333472.082217.073593.803106.462227.813571.053150.092226.571. (CC) gcc options: -fno-strict-aliasing -fwrapv -O2 -pthread -lpgcommon -lpgport -lpq -lpthread -lrt -lcrypt -ldl -lm

SQLite

Test Target: Default Test Directory

Linux 4.6Linux 4.5Linux 4.7Linux 4.4OpenBenchmarking.orgSeconds, Fewer Is BetterSQLite 3.8.10.2Test Target: Default Test DirectoryEXT4F2FSBtrfs306090120150SE +/- 0.06, N = 3SE +/- 0.12, N = 3SE +/- 2.64, N = 6SE +/- 0.01, N = 3SE +/- 0.11, N = 3SE +/- 0.07, N = 3SE +/- 0.05, N = 3SE +/- 0.06, N = 3SE +/- 0.13, N = 3SE +/- 0.03, N = 3SE +/- 0.03, N = 3SE +/- 0.08, N = 365.5376.07126.0465.6476.87150.7465.9476.28132.5866.5176.23151.831. (CC) gcc options: -O2 -ldl -lpthread


Phoronix Test Suite v10.8.5