btrfs icon indicating copy to clipboard operation
btrfs copied to clipboard

Performance - NTFS vs WinBtrfs

Open theChaosCoder opened this issue 7 years ago • 59 comments

I couldn't find any benchmarks or any information about the performance of WinBtrfs, so I made a quick test with CrystalDiskMark 5. It seems that winbtrfs has better random writes/reads but lower seq. write/read performance.

Have you made similar observations?

OS : Windows 10 Professional [10.0 Build 16299] (x64) WinBtrfs v1.0.1 on HDD

WinBTRFS with LZO Sequential Read (Q= 32,T= 1) : 119.619 MB/s Sequential Write (Q= 32,T= 1) : 93.616 MB/s Random Read 4KiB (Q= 32,T= 1) : 1.381 MB/s [ 337.2 IOPS] Random Write 4KiB (Q= 32,T= 1) : 1.874 MB/s [ 457.5 IOPS] Sequential Read (T= 1) : 117.870 MB/s Sequential Write (T= 1) : 122.909 MB/s Random Read 4KiB (Q= 1,T= 1) : 0.672 MB/s [ 164.1 IOPS] Random Write 4KiB (Q= 1,T= 1) : 4.304 MB/s [ 1050.8 IOPS]

NTFS Sequential Read (Q= 32,T= 1) : 152.757 MB/s Sequential Write (Q= 32,T= 1) : 145.346 MB/s Random Read 4KiB (Q= 32,T= 1) : 0.951 MB/s [ 232.2 IOPS] Random Write 4KiB (Q= 32,T= 1) : 1.098 MB/s [ 268.1 IOPS] Sequential Read (T= 1) : 154.369 MB/s Sequential Write (T= 1) : 146.380 MB/s Random Read 4KiB (Q= 1,T= 1) : 0.395 MB/s [ 96.4 IOPS] Random Write 4KiB (Q= 1,T= 1) : 1.153 MB/s [ 281.5 IOPS]

btrfs

theChaosCoder avatar Nov 02 '17 23:11 theChaosCoder

Thank you, that's interesting to know!

My guess is that the sequential reads and writes are slower because unlike NTFS Btrfs does checksumming. Have you tried running it in a directory with the nocsum flag turned on?

maharmstone avatar Nov 02 '17 23:11 maharmstone

I can't find such a flag in btrfs properties. I guess I need btrfs-tools for that!?

And CrystalDiskMark creates a random folder in the root dir everytime... can I set nocsum for the whole drive?

theChaosCoder avatar Nov 03 '17 00:11 theChaosCoder

If you have the shell extension installed, it should be a checkbox on the Btrfs properties tab. And yes, from memory I think you can set it on the root directory.

maharmstone avatar Nov 03 '17 00:11 maharmstone

I can see Disable Copy-on-Write (= nocsum?).

I used dd now for testing seq speed dd if=/dev/zero of=asd bs=1M count=2024 conv=fdatasync,notrunc

With cow disabled the speed is more or less the same. With cow enabled it is about 30-40mb/s slower.

theChaosCoder avatar Nov 03 '17 01:11 theChaosCoder

Now with my ssd

btrfs_ssd

theChaosCoder avatar Nov 03 '17 11:11 theChaosCoder

@theChaosCoder what about disabling lzo but leaving cow? lzo makes btrfs be more cpu dependent and takes speed away (how much depends on your cpu)

claunia avatar Nov 13 '17 20:11 claunia

SSD - WinBtrfs 1.0.1 (Debug) @maharmstone Could the debug version of winbtrfs affect the write rate significantly?

b1 b2

theChaosCoder avatar Nov 15 '17 13:11 theChaosCoder

actually the compression should make the /dev/zero test much FASTER, as zeroes compress extremely well

Could the debug version of winbtrfs affect the write rate significantly? - idk, but it could definitely have a significant impact on the compression

@maharmstone are you sure its called nocsum ? because in linux its called nodatasum

divinity76 avatar Dec 10 '17 21:12 divinity76

@theChaosCoder Cow seems to have a big impact on write performance The native btrfs of the Linux kernel may perform better? May NTFS compression be worse than Btrfs's lzo performance? CrystalDiskMark may be able to work on Linux mono

daiaji avatar Jun 22 '18 12:06 daiaji

According to this benchmark https://quixdb.github.io/squash-benchmark/ the ms-compress:LZNT1 is indeed slower then lzo. Since windows8.1 you can compress files also with xpress and lzx. But I couldn't find any usefull benchmarks.

Wimlib implemented both of them https://wimlib.net/compression.html

theChaosCoder avatar Jun 22 '18 12:06 theChaosCoder

@theChaosCoder It's interesting! I saw lz4 with amazing compression speed and pressure! In terms of revenue, this is far more applicable to transparent compression of file systems than Lzo.

I saw lz4 with amazing compression speed and pressure! In terms of revenue, this is far more applicable to transparent compression of file systems than Lzo.

But they don't seem to care lz4😥

Btrfs seems to be showing poor 4K write performance. Is this perhaps a reason for non-native support?

daiaji avatar Jun 25 '18 04:06 daiaji

It would be also cool to test how performance compares with the "original" linux.

mirh avatar Apr 02 '19 01:04 mirh

I was just testing git status (using cygwin git), or a pretty large repo:

NTFS: git status -s 4.40s user 23.98s system 257% cpu 11.034 total BTRFS 1.1: git status -s 6.84s user 417.06s system 104% cpu 6:45.84 total

So approximately 40x slower. BTRFS seems to be highly CPU limited. The git process has many threads all in sync primitives, for example:

0	ntoskrnl.exe!KeSynchronizeExecution+0x5be6
1	ntoskrnl.exe!KeWaitForSingleObject+0x12e6
2	ntoskrnl.exe!KeWaitForSingleObject+0xadb
3	ntdll.dll!ZwClose+0x14
4	KERNELBASE.dll!CloseHandle+0x62
5	cygwin1.dll!setpassent+0xa87
6	cygwin1.dll!umask+0xf97
7	cygwin1.dll!acl_get_perm+0x930a

or

0	ntoskrnl.exe!KeSynchronizeExecution+0x5be6
1	ntoskrnl.exe!KeWaitForSingleObject+0x12e6
2	ntoskrnl.exe!KeWaitForSingleObject+0xadb
3	ntoskrnl.exe!KeWaitForSingleObject+0x1ff
4	ntoskrnl.exe!IofCompleteRequest+0x748
5	ntoskrnl.exe!KeLeaveCriticalRegion+0x37
6	btrfs.sys+0xa502
7	ntoskrnl.exe!IofCallDriver+0x59
8	FLTMGR.SYS!FltIsCallbackDataDirty+0x2e7
9	FLTMGR.SYS!FltDecodeParameters+0x406
10	ntoskrnl.exe!IofCallDriver+0x59
11	cbfs6.sys+0x2e3b
12	cbfs6.sys+0x10da
13	ntoskrnl.exe!IofCallDriver+0x59
14	ntoskrnl.exe!SeQueryInformationToken+0x2e14
15	ntoskrnl.exe!NtDeviceIoControlFile+0x1e40
16	ntoskrnl.exe!ObfDereferenceObjectWithTag+0xc6
17	ntoskrnl.exe!SeLockSubjectContext+0x899
18	ntoskrnl.exe!NtClose+0xcd
19	ntoskrnl.exe!setjmpex+0x6f83
20	ntdll.dll!ZwClose+0x14
21	KERNELBASE.dll!CloseHandle+0x62
22	cygwin1.dll!setpassent+0xa87
23	cygwin1.dll!umask+0xf97
24	cygwin1.dll!acl_get_perm+0x930a

I haven't yet dug into the code enough to understand why this would be so much worse than NTFS, but it's bad enough that I'll have to at least investigate before using it for day-to-day work.

corngood avatar Apr 10 '19 15:04 corngood

That cbfs6.sys looked suspicious to me, so I disabled it. I'm not sure how I ended up with it installed.

The status time was reduced a lot: git status -s 4.48s user 64.51s system 121% cpu 56.931 total. Now it's only 6x slower. There was no noticeable effect on NTFS.

On NTFS, git uses ~22% of a 16-thread ryzen CPU, but on BTRFS it uses ~7% (one core). I'm still getting similar call stacks:

ntoskrnl.exe!KeSynchronizeExecution+0x5be6
ntoskrnl.exe!KeWaitForSingleObject+0x12e6
ntoskrnl.exe!KeWaitForSingleObject+0xadb
ntoskrnl.exe!KeWaitForSingleObject+0x1ff
ntoskrnl.exe!KeCheckProcessorGroupAffinity+0x98a
ntoskrnl.exe!ExIsResourceAcquiredSharedLite+0x7cb
ntoskrnl.exe!KiCheckForKernelApcDelivery+0x27
ntoskrnl.exe!KeLeaveCriticalRegion+0x37
btrfs.sys+0xa502
ntoskrnl.exe!IofCallDriver+0x59
FLTMGR.SYS!FltIsCallbackDataDirty+0x2e7
FLTMGR.SYS!FltDecodeParameters+0x406
ntoskrnl.exe!IofCallDriver+0x59
ntoskrnl.exe!SeQueryInformationToken+0x2e14
ntoskrnl.exe!NtDeviceIoControlFile+0x1e40
ntoskrnl.exe!ObfDereferenceObjectWithTag+0xc6
ntoskrnl.exe!SeLockSubjectContext+0x899
ntoskrnl.exe!NtClose+0xcd
ntoskrnl.exe!setjmpex+0x6f83
ntdll.dll!ZwClose+0x14
KERNELBASE.dll!CloseHandle+0x62
cygwin1.dll!setpassent+0xa87
cygwin1.dll!umask+0xf97
cygwin1.dll!acl_get_perm+0x930a

corngood avatar Apr 10 '19 15:04 corngood

Thanks David. btrfs.sys+0xa502 is the call to FsRtlExitFileSystem at the end of drv_close, which makes sense given the call stack.

One characteristic of Git is that it has lots of small files... my hunch is that you have a lot of data stored as inline files, and it's choking on the per-subvolume metadata lock. I'll give it a proper look when I get the chance.

maharmstone avatar Apr 10 '19 19:04 maharmstone

Yeah, I'm running git status on a clean working tree with 174k files. So it should just be a ton of metadata reads.

Could you point me at the lock you're describing? I'm guessing somewhere under drv_create?

corngood avatar Apr 11 '19 11:04 corngood

Well, it turned out to be a whole number of things. It's nowhere near done, and it still needs a lot of testing, but on my machine the most recent patches bring git status on the Linux kernel down from over 15 minutes to under 8 seconds. That's the same as doing the same thing on Linux, so it's probably more or less optimal speed-wise.

maharmstone avatar Apr 14 '19 21:04 maharmstone

Wow, that's awesome. I'll try to find some time to build master (I assume this is the stuff you pushed recently) and run my benchmarks again.

Thanks.

corngood avatar Apr 14 '19 21:04 corngood

That sounds amazing, thank you for your work!

Have you also tested how sequential performance with relatively few files was affected?

Atemu avatar Apr 14 '19 22:04 Atemu

@maharmstone I gave it a try. I was able to create a new volume, subvolume, directory, snapshot, but the first time I tried to write something to a file I got a crash:

FYI I built it with VS2017, so this may not be relevant to you.

*******************************************************************************
*                                                                             *
*                        Bugcheck Analysis                                    *
*                                                                             *
*******************************************************************************

KERNEL_SECURITY_CHECK_FAILURE (139)
A kernel component has corrupted a critical data structure.  The corruption
could potentially allow a malicious user to gain control of this machine.
Arguments:
Arg1: 0000000000000003, A LIST_ENTRY has been corrupted (i.e. double remove).
Arg2: ffff94855b0ed940, Address of the trap frame for the exception that caused the bugcheck
Arg3: ffff94855b0ed898, Address of the exception record for the exception that caused the bugcheck
Arg4: 0000000000000000, Reserved

Debugging Details:
------------------


KEY_VALUES_STRING: 1


STACKHASH_ANALYSIS: 1

TIMELINE_ANALYSIS: 1


DUMP_CLASS: 1

DUMP_QUALIFIER: 401

BUILD_VERSION_STRING:  17134.1.amd64fre.rs4_release.180410-1804

SYSTEM_MANUFACTURER:  MSI

SYSTEM_PRODUCT_NAME:  MS-7A33

SYSTEM_SKU:  To be filled by O.E.M.

SYSTEM_VERSION:  3.0

BIOS_VENDOR:  American Megatrends Inc.

BIOS_VERSION:  5.50

BIOS_DATE:  09/20/2017

BASEBOARD_MANUFACTURER:  MSI

BASEBOARD_PRODUCT:  X370 GAMING PLUS (MS-7A33)

BASEBOARD_VERSION:  3.0

DUMP_TYPE:  1

BUGCHECK_P1: 3

BUGCHECK_P2: ffff94855b0ed940

BUGCHECK_P3: ffff94855b0ed898

BUGCHECK_P4: 0

TRAP_FRAME:  ffff94855b0ed940 -- (.trap 0xffff94855b0ed940)
NOTE: The trap frame does not contain all registers.
Some register values may be zeroed or incorrect.
rax=ffffbf07850ba2e8 rbx=0000000000000000 rcx=0000000000000003
rdx=ffffbf0784f89220 rsi=0000000000000000 rdi=0000000000000000
rip=fffff805b5500194 rsp=ffff94855b0edad0 rbp=0000000000000080
 r8=ffffbf0784cda7a8  r9=000000000000001b r10=ffffe303c99024c0
r11=ffffbf0784fa5180 r12=0000000000000000 r13=0000000000000000
r14=0000000000000000 r15=0000000000000000
iopl=0         nv up ei pl nz ac pe cy
btrfs!RtlFailFast+0x5 [inlined in btrfs!reap_fcb+0x374]:
fffff805`b5500194 cd29            int     29h
Resetting default scope

EXCEPTION_RECORD:  ffff94855b0ed898 -- (.exr 0xffff94855b0ed898)
ExceptionAddress: fffff805b5500194 (btrfs!RtlFailFast+0x0000000000000005)
   ExceptionCode: c0000409 (Security check failure or stack buffer overrun)
  ExceptionFlags: 00000001
NumberParameters: 1
   Parameter[0]: 0000000000000003
Subcode: 0x3 FAST_FAIL_CORRUPT_LIST_ENTRY

CPU_COUNT: 10

CPU_MHZ: bb8

CPU_VENDOR:  AuthenticAMD

CPU_FAMILY: 17

CPU_MODEL: 1

CPU_STEPPING: 1

BLACKBOXBSD: 1 (!blackboxbsd)


BLACKBOXPNP: 1 (!blackboxpnp)


BUGCHECK_STR:  0x139

PROCESS_NAME:  System

CURRENT_IRQL:  0

DEFAULT_BUCKET_ID:  FAIL_FAST_CORRUPT_LIST_ENTRY

ERROR_CODE: (NTSTATUS) 0xc0000409 - The system detected an overrun of a stack-based buffer in this application. This overrun could potentially allow a malicious user to gain control of this application.

EXCEPTION_CODE: (NTSTATUS) 0xc0000409 - The system detected an overrun of a stack-based buffer in this application. This overrun could potentially allow a malicious user to gain control of this application.

EXCEPTION_CODE_STR:  c0000409

EXCEPTION_PARAMETER1:  0000000000000003

ANALYSIS_SESSION_HOST:  DAVIDM

ANALYSIS_SESSION_TIME:  04-15-2019 10:44:02.0736

ANALYSIS_VERSION: 10.0.17763.1 amd64fre

LAST_CONTROL_TRANSFER:  from fffff80354a63f69 to fffff80354a53380

STACK_TEXT:  
ffff9485`5b0ed618 fffff803`54a63f69 : 00000000`00000139 00000000`00000003 ffff9485`5b0ed940 ffff9485`5b0ed898 : nt!KeBugCheckEx
ffff9485`5b0ed620 fffff803`54a64310 : 00000000`00000000 00000000`00000000 ffff3ef1`fccc8d42 00000000`00000000 : nt!KiBugCheckDispatch+0x69
ffff9485`5b0ed760 fffff803`54a6291f : 00000000`00000000 ffffe303`c9799840 ffff9680`4e11c140 fffff803`54b942d4 : nt!KiFastFailDispatch+0xd0
ffff9485`5b0ed940 fffff805`b5500194 : ffffbf07`84fa5358 ffffbf07`84fa53b0 00000000`00000080 ffffbf07`84fa53c0 : nt!KiRaiseSecurityCheckFailure+0x2df
ffff9485`5b0edad0 fffff805`b5500225 : ffffbf07`850ba2f8 00000000`00000000 ffffbf07`845f45a8 fffff803`548dc56a : btrfs!reap_fcb+0x374 [c:\users\davidm\src\btrfs\src\btrfs.c @ 1539] 
ffff9485`5b0edb00 fffff805`b55595a4 : ffffe303`c9901498 00000000`00000080 00000000`00000000 ffffe303`c9901ed8 : btrfs!reap_fcbs+0x35 [c:\users\davidm\src\btrfs\src\btrfs.c @ 1566] 
ffff9485`5b0edb30 fffff805`b552231c : ffffe303`c9900180 ffffffff`00000000 ffffe303`c9901498 00000000`00000000 : btrfs!free_trees+0x294 [c:\users\davidm\src\btrfs\src\treefuncs.c @ 830] 
ffff9485`5b0edbb0 fffff803`5491d4f7 : 00000000`00000080 fffff805`b55221e0 ffffe303`c9799700 ffffe303`c9900030 : btrfs!flush_thread+0x13c [c:\users\davidm\src\btrfs\src\flushthread.c @ 7417] 
ffff9485`5b0edc10 fffff803`54a5a7f6 : ffff9680`4eb48180 ffffe303`c9799700 fffff803`5491d4b0 00000000`00000000 : nt!PspSystemThreadStartup+0x47
ffff9485`5b0edc60 00000000`00000000 : ffff9485`5b0ee000 ffff9485`5b0e8000 00000000`00000000 00000000`00000000 : nt!KiStartSystemThread+0x16


THREAD_SHA1_HASH_MOD_FUNC:  818543b709ef8d2737be9d90f2fa14bbad26c6c9

THREAD_SHA1_HASH_MOD_FUNC_OFFSET:  6344d02533c08a46dd2133fb140b0c34a3378718

THREAD_SHA1_HASH_MOD:  ed006da84d64fd1acd771fbd8008f29200185557

FOLLOWUP_IP: 
btrfs!reap_fcb+374 [c:\users\davidm\src\btrfs\src\btrfs.c @ 1539]
fffff805`b5500194 cd29            int     29h

FAULT_INSTR_CODE:  8b4829cd

FAULTING_SOURCE_LINE:  c:\users\davidm\src\btrfs\src\btrfs.c

FAULTING_SOURCE_FILE:  c:\users\davidm\src\btrfs\src\btrfs.c

FAULTING_SOURCE_LINE_NUMBER:  1539

FAULTING_SOURCE_CODE:  
 11060:     )
 11061: 
 11062: {
 11063: 
>11064:     __fastfail(Code);
 11065: }
 11066: 
 11067: #endif // _MSC_VER
 11068: 
 11069: //


SYMBOL_STACK_INDEX:  4

SYMBOL_NAME:  btrfs!reap_fcb+374

FOLLOWUP_NAME:  MachineOwner

MODULE_NAME: btrfs

IMAGE_NAME:  btrfs.sys

DEBUG_FLR_IMAGE_TIMESTAMP:  5cb480a6

STACK_COMMAND:  .thread ; .cxr ; kb

BUCKET_ID_FUNC_OFFSET:  374

FAILURE_BUCKET_ID:  0x139_3_CORRUPT_LIST_ENTRY_btrfs!reap_fcb

BUCKET_ID:  0x139_3_CORRUPT_LIST_ENTRY_btrfs!reap_fcb

PRIMARY_PROBLEM_CLASS:  0x139_3_CORRUPT_LIST_ENTRY_btrfs!reap_fcb

TARGET_TIME:  2019-04-15T13:37:01.000Z

OSBUILD:  17134

OSSERVICEPACK:  0

SERVICEPACK_NUMBER: 0

OS_REVISION: 0

SUITE_MASK:  272

PRODUCT_TYPE:  1

OSPLATFORM_TYPE:  x64

OSNAME:  Windows 10

OSEDITION:  Windows 10 WinNt TerminalServer SingleUserTS

OS_LOCALE:  

USER_LCID:  0

OSBUILD_TIMESTAMP:  2018-09-14 23:18:09

BUILDDATESTAMP_STR:  180410-1804

BUILDLAB_STR:  rs4_release

BUILDOSVER_STR:  10.0.17134.1.amd64fre.rs4_release.180410-1804

ANALYSIS_SESSION_ELAPSED_TIME:  818

ANALYSIS_SOURCE:  KM

FAILURE_ID_HASH_STRING:  km:0x139_3_corrupt_list_entry_btrfs!reap_fcb

FAILURE_ID_HASH:  {e9082920-3c50-4ffc-06c2-baea55bd1ea1}

Followup:     MachineOwner
---------

corngood avatar Apr 15 '19 13:04 corngood

That's not good. I hope that it can be fixed.

Zero3K avatar Apr 19 '19 02:04 Zero3K

NTFS

CrystalDiskMark 6.0.2 x64 (C) 2007-2018 hiyohiyo Crystal Dew World : https://crystalmark.info/

  • MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]

  • KB = 1000 bytes, KiB = 1024 bytes

    Sequential Read (Q= 32,T= 1) : 2815.107 MB/s Sequential Write (Q= 32,T= 1) : 1615.286 MB/s Random Read 4KiB (Q= 8,T= 8) : 1231.131 MB/s [ 300569.1 IOPS] Random Write 4KiB (Q= 8,T= 8) : 970.043 MB/s [ 236826.9 IOPS] Random Read 4KiB (Q= 32,T= 1) : 439.156 MB/s [ 107215.8 IOPS] Random Write 4KiB (Q= 32,T= 1) : 225.975 MB/s [ 55169.7 IOPS] Random Read 4KiB (Q= 1,T= 1) : 44.427 MB/s [ 10846.4 IOPS] Random Write 4KiB (Q= 1,T= 1) : 110.803 MB/s [ 27051.5 IOPS]

    Test : 500 MiB [C: 58.7% (55.4/94.4 GiB)] (x1) [Interval=5 sec] Date : 2020/03/28 23:28:04 OS : Windows 10 Enterprise [10.0 Build 18363] (x64)

BTRFS

CrystalDiskMark 6.0.2 x64 (C) 2007-2018 hiyohiyo Crystal Dew World : https://crystalmark.info/

  • MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]

  • KB = 1000 bytes, KiB = 1024 bytes

    Sequential Read (Q= 32,T= 1) : 2302.475 MB/s Sequential Write (Q= 32,T= 1) : 130.982 MB/s Random Read 4KiB (Q= 8,T= 8) : 727.899 MB/s [ 177709.7 IOPS] Random Write 4KiB (Q= 8,T= 8) : 1.350 MB/s [ 329.6 IOPS] Random Read 4KiB (Q= 32,T= 1) : 399.801 MB/s [ 97607.7 IOPS] Random Write 4KiB (Q= 32,T= 1) : 2.295 MB/s [ 560.3 IOPS] Random Read 4KiB (Q= 1,T= 1) : 40.229 MB/s [ 9821.5 IOPS] Random Write 4KiB (Q= 1,T= 1) : 1.204 MB/s [ 293.9 IOPS]

    Test : 500 MiB [F: 26.5% (206.7/781.3 GiB)] (x1) [Interval=5 sec] Date : 2020/03/28 23:30:32 OS : Windows 10 Enterprise [10.0 Build 18363] (x64)

Same drive two different partitions, may be unfair. But 30-99% slower? There are much more serious issues than speed however. This is with default settings.

XPG SX8200 1tb i76700k 2900mhz ram

Chaython avatar Mar 29 '20 05:03 Chaython

Thanks for this. I've not done any rigorous testing yet, but like you I found that write speeds on Btrfs were worse than read speeds, whereas on NTFS they are about the same.

The difference in your read speeds is probably due to the checksumming that Btrfs does.

maharmstone avatar Mar 29 '20 13:03 maharmstone

Having had a look at what it's doing, I'm not sure that the figures for random writes tell you anything meaningful at all - certainly it's not indicative of a bug that needs to be fixed. It's slow because it has to traverse a list of thousands of extents, whereas NTFS does everything in place.

The only time you're likely to encounter random writes in practice is with databases and VM images, and the official advice for these has always been to make sure they're marked nocow.

maharmstone avatar Mar 29 '20 15:03 maharmstone

Different software, different run, much faster but innacurate[?] disks wouldn't let me run a write test while the drive was active...a Fio script I was recommended gave errors creating a tmp dir to benchmark... But this read speed is much more accurate to the device's specifications than in windows. Screenshot from 2020-03-29 13-33-48

Chaython avatar Mar 29 '20 19:03 Chaython

Adding to the performance testimonies, here are some crystaldiskmark results on a 960 EVO NVMe with 2 separate partitions.

NTFS

------------------------------------------------------------------------------
CrystalDiskMark 8.0.1 x64 (C) 2007-2021 hiyohiyo
                                  Crystal Dew World: https://crystalmark.info/
------------------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
* KB = 1000 bytes, KiB = 1024 bytes

[Read]
  SEQ    1MiB (Q=  8, T= 1):  2375.063 MB/s [   2265.0 IOPS] <  3447.45 us>
  SEQ    1MiB (Q=  1, T= 1):  1388.444 MB/s [   1324.1 IOPS] <   754.82 us>
  RND    4KiB (Q= 32, T= 1):   620.412 MB/s [ 151467.8 IOPS] <   204.52 us>
  RND    4KiB (Q=  1, T= 1):    46.323 MB/s [  11309.3 IOPS] <    88.29 us>

[Write]
  SEQ    1MiB (Q=  8, T= 1):  1510.362 MB/s [   1440.4 IOPS] <  5539.39 us>
  SEQ    1MiB (Q=  1, T= 1):  1507.275 MB/s [   1437.4 IOPS] <   695.16 us>
  RND    4KiB (Q= 32, T= 1):   525.530 MB/s [ 128303.2 IOPS] <   242.68 us>
  RND    4KiB (Q=  1, T= 1):   203.812 MB/s [  49758.8 IOPS] <    20.00 us>

Profile: Default
   Test: 1 GiB (x5) [C: 67% (86/127GiB)]
   Mode: [Admin]
   Time: Measure 5 sec / Interval 5 sec 
   Date: 2021/02/03 19:26:04
     OS: Windows 10  [10.0 Build 19041] (x64)

BTRFS (xxHash, no compression)

------------------------------------------------------------------------------
CrystalDiskMark 8.0.1 x64 (C) 2007-2021 hiyohiyo
                                  Crystal Dew World: https://crystalmark.info/
------------------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
* KB = 1000 bytes, KiB = 1024 bytes

[Read]
  SEQ    1MiB (Q=  8, T= 1):  2030.902 MB/s [   1936.8 IOPS] <  4120.17 us>
  SEQ    1MiB (Q=  1, T= 1):   852.324 MB/s [    812.8 IOPS] <  1229.54 us>
  RND    4KiB (Q= 32, T= 1):   772.471 MB/s [ 188591.6 IOPS] <   164.25 us>
  RND    4KiB (Q=  1, T= 1):    41.672 MB/s [  10173.8 IOPS] <    98.17 us>

[Write]
  SEQ    1MiB (Q=  8, T= 1):   697.329 MB/s [    665.0 IOPS] < 11957.07 us>
  SEQ    1MiB (Q=  1, T= 1):   341.835 MB/s [    326.0 IOPS] <  3064.89 us>
  RND    4KiB (Q= 32, T= 1):     4.059 MB/s [    991.0 IOPS] < 32151.50 us>
  RND    4KiB (Q=  1, T= 1):     5.613 MB/s [   1370.4 IOPS] <   729.17 us>

Profile: Default
   Test: 1 GiB (x5) [E: 64% (68/105GiB)]
   Mode: [Admin]
   Time: Measure 5 sec / Interval 5 sec 
   Date: 2021/02/03 19:32:40
     OS: Windows 10  [10.0 Build 19041] (x64)

BTRFS (xxHash, zstd:3 compression)

------------------------------------------------------------------------------
CrystalDiskMark 8.0.1 x64 (C) 2007-2021 hiyohiyo
                                  Crystal Dew World: https://crystalmark.info/
------------------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
* KB = 1000 bytes, KiB = 1024 bytes

[Read]
  SEQ    1MiB (Q=  8, T= 1):  2024.762 MB/s [   1931.0 IOPS] <  4133.89 us>
  SEQ    1MiB (Q=  1, T= 1):   992.458 MB/s [    946.5 IOPS] <  1056.03 us>
  RND    4KiB (Q= 32, T= 1):   758.915 MB/s [ 185282.0 IOPS] <   167.19 us>
  RND    4KiB (Q=  1, T= 1):    41.257 MB/s [  10072.5 IOPS] <    99.15 us>

[Write]
  SEQ    1MiB (Q=  8, T= 1):   230.245 MB/s [    219.6 IOPS] < 36239.66 us>
  SEQ    1MiB (Q=  1, T= 1):   338.777 MB/s [    323.1 IOPS] <  3093.65 us>
  RND    4KiB (Q= 32, T= 1):     5.213 MB/s [   1272.7 IOPS] < 25038.44 us>
  RND    4KiB (Q=  1, T= 1):     5.735 MB/s [   1400.1 IOPS] <   713.74 us>

Profile: Default
   Test: 1 GiB (x5) [L: 64% (68/105GiB)]
   Mode: [Admin]
   Time: Measure 5 sec / Interval 5 sec 
   Date: 2021/02/03 19:46:45
     OS: Windows 10  [10.0 Build 19041] (x64)

Read speeds are still lower overall, but very usable, write speeds however are somewhat of a letdown, and compression totally destroys performance, but that was to be expected.

All in all those are trade-offs that I'm willing to make since my workload of choice will be gaming so this shouldn't matter much. My steam library sits on a ntfs volume striped across 2 SATA SSDs, mounting this on linux requires libldm and I'd like to get rid of it, I'll give raid0 btrfs a try and see how that goes.

alucryd avatar Feb 04 '21 10:02 alucryd

Does that benchmark take into account the fact that compressed data results in more "raw" (uncompressed) data wrote/read ?

lapineige avatar Feb 04 '21 11:02 lapineige

Paragon's ntfs driver doesn't require any extra dependencies, on top of possibly being even faster than ext4.

mirh avatar Feb 04 '21 13:02 mirh

Does that benchmark take into account the fact that compressed data results in more "raw" (uncompressed) data wrote/read ?

That is a good question I'm afraid I can't answer. Will see how real world workloads fare, that's what matters after all.

Paragon's ntfs driver doesn't require any extra dependencies, on top of possibly being even faster than ext4.

The whole point is to get rid of NTFS and use a superior filesystem (checksum, native raid, better transparent compression). Speed is hardly the deciding factor for me, and I'd rather have windows lag behind than having linux being limited by windows. Plus the paragon driver is still relatively new and hasn't landed in the kernel yet, so there's that.

alucryd avatar Feb 04 '21 15:02 alucryd

That is a good question I'm afraid I can't answer. Will see how real world workloads fare, that's what matters after all.

Maybe if you can measure the time to open/write a very big file (set) (be cautious about caching and so on, it can bias the result, a lot) you can have an estimation 🤔

I'm asking because I'm surprised that compression really destroy the performances, on my setup when I compared btrfs with and without compression (on linux) I saw no impact of compression on read and write speed (but thanks to the compression the "real" speed was better).

lapineige avatar Feb 04 '21 17:02 lapineige