M2/NVM vs M2/Sata vs SATA/6GB benchmarks

Matthew Wilcox willy at linux.intel.com
Sun Feb 14 01:32:58 PST 2016


Hi Marc,

I shan't have time to look at this for another week, but I've added
the NVMe mailing list so somebody else can comment in the meantime. 

On Sat, Feb 13, 2016 at 07:13:33PM -0800, Marc MERLIN wrote:
> Hi Matthew,
> 
> I didn't find a list for NVMe, I'll Cc linux-ide in case this is useful
> to others.
> 
> I just got a Thinkpad P70 skylake laptop and thought I'd try 3 SSDs:
> NVMe/M2 vs Sata/M2 vs Sata/6GB.
> I'm not a benchmarking filesystem expert, so my apologies if I made some
> stupid choices, but hopefully the benchmarks are still useful.
> 
> I'll give the conclusions first. The buffer cache issue with NVMe is weird,
> maybe there is a non default setting I need to tweak?
> 
> a) NVMe is faster for big contiguous I/O, even through dmcrypt
> b) M2 NVMe and M2 sata do not seem to go through buffer cache for writes, but SATA/6GB does
> c) When using buffer cache, SATA/6GB beats NVMe/M2 and SATA/M2 by a lot on block reads. Why?
> d) for random I/O, NVMe is up to 50% faster, and faster with ext4 than btrfs
> e) Encrypted NVMe is a bit faster than non encrypted Sata/M2
> f) At $328 for 512GB M2/NVMe vs $168 for 500GB M2/Sata, unless you're doing big contiguous I/O, the 2x price difference is hard to justify, cached I/O and random I/O are not significantly faster on NVMe.
> 
> 
> 
> 3 SSDs:
> 1) M2/SATA Samsung 850 EVO 500 GB M.2 3.5-Inch SSD (MZ-N5E500BW) 33c/GB
> 
> 2) M2/NVMe: Samsung 950 PRO -Series 512GB PCIe NVMe - M.2 Internal SSD 2-Inch MZ-V5P512BW 64c/GB
> 70:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd Device a802 (rev 01)
> 
> 3) SATA6G: Samsung 850 EVO 2 TB 2.5-Inch SATA III Internal SSD (MZ-75E2T0B/AM) 30c/GB
> 
> For price comparison
> Seagate 2TB Laptop HDD SATA 6Gb/s 32MB Cache 2.5-Inch Internal Bare Drive (ST2000LM003) 4.6c/GB
> 
> Laptop: Skylake Lenovo Thinkpad P70
> Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz x 8 (4 cores HT)
> 
> Filesystem: btrfs on top of 
> cryptsetup luksFormat --align-payload=8192 -s 256 -c aes-xts-plain64 /dev/device
> ddd test: sync; dd if=/mnt/ram/file of=file bs=100M count=100 conv=fdatasync; dd if=file of=/dev/null bs=100M
> dd0 test: sync; dd if=/dev/zero of=file bs=100M count=100 conv=fdatasync; dd if=file of=/dev/null bs=1M
> 
> Summary: 
> 0) NVMe only really looks faster on big block sequential read/write (indeed 4X read, 2X write).
>    On Random I/O, it's no faster. Other overheads kill its performance advantage.
> 1) For Cached I/O NVMe seems slowed down by dmcrypt in hdparm/ioz ranread/write whereas M2/Sata is not
> 2) 2TB Sata 6GB SSD is faster for read/write encrypted than NVMe is non encrypted (except hdparm)
> 3) iozone through block cache is faster on M2/SATA than M2/NVMe, weird
> 4) iozone through block cache is much faster for everything on Sata6G, also weird
> 5) iozone direct I/O shows NVMe is fastest (by 50% only) and external SATA just a bit faster than M2/Sata
> 6) when using dmcrypt, NVMe is only marginally faster in iozone than Sata/M2 or Sata/6G
> 7) kernel build speed is same on SATA/M2 and NVMe/M2, encrypted or not, but SATA6G is 10% faster (probably the same effect that block cache works better on SATA/6G than SATA/M2 or NVMe/M2)
> 8) ext4 does better on iozone -I (directIO) than btrfs, 2x as fast on random read for NVMe
> 
> 
> 
> 		SATA/M2 dmcrypt	SATA/M2		NVMe dmcrypt	NVMe		SATA6GB/dmcrypt
> hdparm -t	 534MB/s	 517MB/s	1307MB/s	2140MB/s	 534MB/s
> ddd 10GB read	 550MB/s	 560MB/s	2000MB/s	2400MB/s	 550MB/s
> ddd 10GB write	 500MB/s	 503MB/s	1300MB/s	1200MB/s	 506MB/s
> 
> dd with /dev/zero hits optimizations that actually penalize NVMe:
> dd0 10GB read	   7GB/s	 6.7GB/s	 2.3GB/s	 4.4GB/s	 6.6GB/s
> dd0 10GB write	 495MB/s	 503MB/s	 1.3GB/s	 1.3GB/s	 2.0GB/s
> 
> iozone -e -a -s 4096 -i 0 -i 1 -i 2 (cache makes Sata6G faster than M2, weird):
> ioz read 4KB	1760MB/s	1790MB/s	 675MB/s	 766MB/s	7863MB/s
> ioz write 4KB	 268MB/s	 298MB/s	 295MB/s	 291MB/s	 777MB/s
> ioz ranread4KB	5535MB/s	7392MB/s	3185MB/s	7261MB/s	7892MB/s
> ioz ranwrite4KB	 288MB/s	 329MB/s	 205MB/s	 381MB/s	 796MB/s
> 
> iozone -I -e -a -s 4096 -i 0 -i 1 -i 2 (direct IO):
> 		SATA/M2 dmcrypt	 SATA/M2	 NVMe dmcrypt	 NVMe		 SATA6GB
> 										 dmcrypt notcrypted
> 		 btrfs		 btrfs   ext4	 btrfs		 btrfs   ext4	 btrfs     ext4
> ioz read 4KB	 255MB/s	 303MB/s 408MB/s 303MB/s	 396MB/s 562MB/s 310MB/s 379MB/s
> ioz write 4KB	 195MB/s	 238MB/s 344MB/s 257MB/s	 358MB/s 361MB/s 233MB/s 365MB/s
> ioz ranread4KB	 305MB/s	 351MB/s 482MB/s 476MB/s	 699MB/s1434MB/s 309MB/s 475MB/s
> ioz ranwrite4KB	 265MB/s	 223MB/s 392MB/s 260MB/s	 217MB/s 315MB/s 254MB/s 366MB/s
> 
> 
> Details of each test, per type of drive;
> ================================================================================
> saruman M2 SATA 512GB encrypted btrfs
> 
> saruman:/tmp# hdparm -t /dev/mapper/cryptroot
>  Timing buffered disk reads: 1604 MB in  3.00 seconds = 534.03 MB/sec
> 
> iozone -e -a -s 4096 -i 0 -i 1 -i 2:
>                                                               random    random
>               kB  reclen    write  rewrite    read    reread    read     write
>             4096       4   257076   281089  1761711  6094733  6066754   290373
>             4096     512   277108   295167  1588844  8426437 11128258   318731
>             4096    4096   268940   308248  1760087  8062616  8377131   320802
> 
> iozone -I -e -a -s 4096 -i 0 -i 1 -i 2:
>             4096       4    38626    45227   102236   111141    30936    64317
>             4096     512   138467   128878   134674   137832   140067   126248
>             4096    4096   195439   273100   255379   307300   305605   265093
> 
> 
> saruman:/mnt/mnt# sync; dd if=/dev/zero of=file bs=100M count=100 conv=fdatasync; dd if=file of=/dev/null bs=1M
> 10485760000 bytes (10 GB) copied, 21.1761 s, 495 MB/s
> 10485760000 bytes (10 GB) copied, 1.49373 s, 7.0 GB/s
> 
> kernel 4.4.1 make -j8:
> real    17m54.712s
> user    126m26.620s
> sys     6m21.948s
> 
> btrfs send/receive encrypted partition to non encrypted, 87GB: 10mn30
> 
> saruman M2 SATA non encrypted btrfs
> -----------------------------------
> saruman:/mnt/mnt4# hdparm -t /dev/sdc4
> /dev/sdc4:
>  Timing buffered disk reads: 1554 MB in  3.00 seconds = 517.93 MB/sec
> 
> iozone -e -a -s 4096 -i 0 -i 1 -i 2:
>                                                               random    random
>               kB  reclen    write  rewrite    read    reread    read     write
>             4096       4   285020   297565  1739944  7434579  6605595   305785
>             4096     512   310937   336617  1298278  3703511  5483860   299416
>             4096    4096   298433   317101  1790911  7392988  7434579   337476
> iozone -I -e -a -s 4096 -i 0 -i 1 -i 2:
>             4096       4    47219    93497   118900   126065    39160    86462
>             4096     512   214381   213388   194307   209215   206951   209289
>             4096    4096   238792   221839   303768   352951   351342   223618
> ext4 iozone -I -e -a -s 4096 -i 0 -i 1 -i 2:
>             4096       4   119524   146035   150173   159105    53090   140697
>             4096     512   358954   354810   366466   423088   419760   375542
>             4096    4096   344087   398828   408259   478337   482569   392487
> 
> saruman:/mnt/mnt3#  sync; dd if=/dev/zero of=file bs=100M count=100 conv=fdatasync; dd if=file of=/dev/null bs=1M
> 10485760000 bytes (10 GB) copied, 20.8537 s, 503 MB/s
> 10485760000 bytes (10 GB) copied, 1.55651 s, 6.7 GB/s
> 
> kernel 4.4.1 make -j8:
> real    17m55.612s
> user    126m31.952s
> sys     6m27.452s
> 
> 
> ********************************************************************************
> saruman M2 NVMe 512GB encrypted btrfs
> 
> saruman:/tmp# hdparm -t /dev/mapper/cryptroot2
> /dev/mapper/cryptroot2:
>  Timing buffered disk reads: 3924 MB in  3.00 seconds = 1307.56 MB/sec
> 
> iozone -e -a -s 4096 -i 0 -i 1 -i 2:
>                                                               random    random
>               kB  reclen    write  rewrite    read    reread    read     write
>             4096       4   284205   341651   742181  6195843  6178018   341101
>             4096     512   314351   319573   864883  8865630  8902382   384993
>             4096    4096   295741   201042   675234  3281854  3185110   205974
> iozone -I -e -a -s 4096 -i 0 -i 1 -i 2:
>             4096       4    80042    83160   122616   127129    41421    53963
>             4096     512   168713   153333   167710   209923   198123   168026
>             4096    4096   257968   258566   303023   490828   476440   260014
> 
> 
> saruman:/mnt/mnt2# sync; dd if=/dev/zero of=file bs=100M count=100 conv=fdatasync; dd if=file of=/dev/null bs=1M
> 10485760000 bytes (10 GB) copied, 8.01494 s, 1.3 GB/s
> 10485760000 bytes (10 GB) copied, 4.63397 s, 2.3 GB/s
> 
> kernel 4.4.1 make -j8:
> real    17m57.513s
> user    126m58.360s
> sys     6m25.164s
> 
> btrfs send/receive encrypted partition to non encrypted, 87GB: 7mn
> (33% faster than Sata M2)
> 
> saruman M2 NVMe non encrypted btrfs
> -----------------------------------
> saruman:/mnt/mnt4# hdparm -t /dev/nvme0n1p4
> /dev/nvme0n1p4:
>  Timing buffered disk reads: 6422 MB in  3.00 seconds = 2140.38 MB/sec
> 
> 
> iozone -e -a -s 4096 -i 0 -i 1 -i 2:
>                                                               random    random
>               kB  reclen    write  rewrite    read    reread    read     write
>             4096       4   274808   271851   684271  2634219  2280673   177630
>             4096     512   290191   336755   668196  3362795  4039655   184779
>             4096    4096   291427   340345   766588  7355007  7261741   381768
> iozone -I -e -a -s 4096 -i 0 -i 1 -i 2:
>             4096       4    94814   117116   147645   159695    44075   108039
>             4096     512   271130   267800   239969   325933   301841   271062
>             4096    4096   358602   275933   396591   719099   699939   217665
> ext4 iozone -I -e -a -s 4096 -i 0 -i 1 -i 2:
>             4096       4   107281   200735   205900   263035    54832   124219
>             4096     512   537478   374641   525060  1173664  1139338   558807
>             4096    4096   361545   526137   562632  1483477  1434069   315883
> 
> saruman:/mnt/mnt4# sync; dd if=/dev/zero of=file bs=100M count=100 conv=fdatasync; dd if=file of=/dev/null bs=1M
> 10485760000 bytes (10 GB) copied, 7.90653 s, 1.3 GB/s
> 10485760000 bytes (10 GB) copied, 2.35863 s, 4.4 GB/s
> 
> kernel 4.4.1 make -j8:
> real    17m54.221s
> user    126m46.264s
> sys     6m10.592s
> 
> 
> ********************************************************************************
> saruman Samsung Evo 850 2TB SSD encrypted btrfs
> 
> hdparm -t
>  Timing buffered disk reads: 1606 MB in  3.00 seconds = 534.87 MB/sec
> 
> iozone -e -a -s 4096 -i 0 -i 1 -i 2:
>                                                               random    random
>               kB  reclen    write  rewrite    read    reread    read     write
>             4096       4   513924   738957  8586475  9144037  8017464   697665
>             4096     512   772100   820362  9287391 10136778 10586522   840551
>             4096    4096   719099   777517  7863339  8047509  7892238   796108
> 
> iozone -I -e -a -s 4096 -i 0 -i 1 -i 2
>             4096       4    76626    47961    92886    80947    36063    63788
>             4096     512   135087   138998   143127   150981   144393   132219
>             4096    4096   233245   234058   310797   311552   309855   254080
> 
> ext4 iozone -I -e -a -s 4096 -i 0 -i 1 -i 2 (unencrypted)
>             4096       4   118013   141212   130575   111534    42343   138654
>             4096     512   336347   312192   332847   414404   424542   342707
>             4096    4096   365227   364638   379298   484160   475122   366536
> 
> 
> saruman:/tmp# sync; dd if=/dev/zero of=file bs=100M count=100 conv=fdatasync; dd if=file of=/dev/null bs=1M
> 10485760000 bytes (10 GB) copied, 5.23919 s, 2.0 GB/s
> 10485760000 bytes (10 GB) copied, 1.58287 s, 6.6 GB/s
> 
> 
> kernel 4.4.1 make -j8:
> real    16m4.305s
> user    104m0.816s
> sys     7m2.832s
> 
> 
> -- 
> "A mouse is a device used to point at the xterm you want to type in" - A.S.R.
> Microsoft is to operating systems ....
>                                       .... what McDonalds is to gourmet cooking
> Home page: http://marc.merlins.org/                         | PGP 1024R/763BE901



More information about the Linux-nvme mailing list