Skip to content

Instantly share code, notes, and snippets.

@yorickdowne
Last active March 10, 2023 19:13
Embed
What would you like to do?
Great and less great SSDs for Ethereum nodes

Overview

Syncing an Ethereum node is largely reliant on IOPS, I/O Per Second. Budget SSDs will struggle to an extent, and some won't be able to sync at all.

This document aims to snapshot some known good and known bad models.

For size, 2TB come recommended as of mid-2022. 1TB can work for now but is getting tight.

High-level, QLC and DRAMless are far slower than "mainstream" SSDs.

IOPS wise, it's likely Geth, then Besu, then Nethermind in ascending order of IOPS requirements. I am not quite sure where Erigon fits these days.

Other than a slow SSD model, these are things that can slow IOPS down:

  • Heat. Check with smartctl -x; the SSD should be below 50C so it does not throttle.
  • TRIM not being allowed. This can happen with some hardware RAID controllers, as well as on macOS with non-Apple SSDs
  • On SATA, the controller in UEFI/BIOS set to anything other than AHCI

If you haven't already, do turn off atime on your DB volume, it'll increase SSD lifetime and speed things up a little bit.

The drive lists are ordered by interface and alphabetically by vendor name, not by preference. The lists are not exhaustive at all. @mwpastore linked a filterable spreadsheet in comments that has a far greater variety of drives and their characteristics.

The Good

"Mainstream" and "Performance" drive models that can sync mainnet execution layer clients in a reasonable amount of time. Use M.2 NVMe if your machine supports it.

Note that in some cases older "Performance" PCIe 4 drives can be bought at a lower price than a PCIe 3 "Mainstream" drive - shop around.

  • Often on sale: Samsung 970 EVO Plus, SK Hynix P31 Gold
  • Higher TBW than most: Seagate Firecuda 530, WD Red SN700
  • Lowest power draw: SK Hynix P31 Gold - great choice for Rock5 B and other low-power devices

Hardware

M.2 NVMe "Mainstream" - TLC, DRAM, PCIe 3

  • AData XPG Gammix S50 Lite
  • HP EX950
  • Mushkin Pilot-E
  • Samsung 970 EVO Plus 2TB, pre-rework (firmware 2B2QEXM7)
  • Samsung 970 EVO Plus 2TB, post-rework (firmware 3B2QEXM7 or 4B2QEXM7). In testing this syncs just as quickly as the pre-rework drive.
  • SK Hynix P31 Gold
  • WD Black SN750 (but not SN750 SE)
  • WD Red SN700

2.5" SATA "Mainstream" - TLC, DRAM

  • Crucial MX500 SATA
  • Samsung 860/870 EVO SATA
  • WD Blue 3D NAND SATA

Honorable Pi4 mention:

  • Samsung T5 USB - works but is slow, avoid if at all possible and go for M.2 NVMe instead, with Rock5 B or CM4. To clarify: If you stay with Pi4, then T5 USB or USB M.2 NVMe adapter should roughly perform the same. Choose either. Maybe consider going for NVMe and a USB adapter so you can upgrade to a Rock5 B in future.

M.2 NVMe "Performance" - TLC, DRAM, PCIe 4 or 5

  • ADATA XPG Gammix S70
  • Corsair Force MP600
  • Crucial P5 Plus
  • Kingston KC2000 / KC3000 / Fury Renegade
  • Mushkin Redline Vortex
  • Sabrent Rocket 4 Plus
  • Samsung 980 Pro (not 980) - a firmware update to 5B2QGXA7 is necessary to keep them from dying, if they are firmware 3B2QGXA7. Samsung's boot Linux is a bit broken, you may want to flash from your own Linux.
  • Samsung 990 Pro - there are reports of 990 Pro rapidly losing health. A firmware update to 1B2QJXD7 is meant to stop the rapid degradation, but won't reverse any that happened on earlier firmware.
  • Seagate Firecuda 530
  • SK Hynix P41 Platinum
  • WD Black SN850(X)

Data center SSD drives will also work well.

Cloud

  • Any baremetal/dedicated server service
  • AWS gp3 w/ >=10k IOPS provisioned and an m6i/a.xlarge

The Bad

These "Budget" drive models are reportedly too slow to sync (all) mainnet execution layer clients.

Hardware

  • AData S40G/SX8100 4TB, QLC - the 2TB model is TLC and should be fine; 4TB is reportedly too slow
  • Crucial P3 Plus, QLC and DRAMless - users report that it can sync Geth but cannot stay in sync for Nethermind
  • Kingston NV1 - probably QLC and DRAMless and thus too slow on 2TB, but could be "anything" as Kingston do not guarantee specific components
  • Kingston NV2 - like NV1 no guaranteed components
  • WD Green SN350, QLC and DRAMless
  • Anything both QLC and DRAMless will likely not be able to sync at all or not be able to consistently keep up with "chain head"
  • Crucial BX500 SATA, HP S650 SATA, probably most SATA budget drives
  • Samsung 980, DRAMless - unsure, this may belong in "Ugly". If you have one and can say for sure, please come to ethstaker Discord.
  • Samsung T7 USB, even with current firmware

Cloud

  • Contabo SSD
  • Netcup VPS Servers - reportedly able to sync Geth but not Nethermind

The Ugly

"Budget" drive models that reportedly can sync mainnet execution layer clients, if slowly.

Note that QLC drives usually have a markedly lower TBW than TLC, and will fail earlier.

Hardware

  • Corsair MP400, QLC
  • Inland Professional 3D NAND, QLC
  • Intel 660p, QLC
  • Seagata Barracuda Q5, QLC
  • WD Black SN770, DRAMless
  • Samsung 870 QVO SATA, QLC

Cloud

  • Contabo NVMe - fast enough but not enough space. 800 GiB is not sufficient.
  • Netcup RS Servers. Reportedly fast enough to sync Nethermind or Geth; still no speed demon.
@mwpastore
Copy link

42 hours with a 110GiB slice of the 905p configured as writeback cache! That exceeds my wildest expectations.

I would still like to play around with writeback vs. writethrough modes but I think my question has been answered: Yes, Optane can significantly speed up the last leg of the initial sync once it's no longer CPU-bound. If you're running on Zen 3 or Golden Cove or newer and want to fully-optimize Erigon re-sync performance, I think it's worth considering.

Newegg has Optane P1600X 118GB drives on sale for $76 a pop. This model doesn't have the absolute best peak specs but it should absolutely destroy QD1 random read. At that price point I will be adding one to my node to complement the two MX500 2TB SATA drives I have in there already.

I'll stop spamming this thread but please let me know if you have questions. Cheers and happy validating!

@yorickdowne
Copy link
Author

Very cool, thanks for all the testing! When you say writeback cache, what exactly is the setup you're using?

@mwpastore
Copy link

mwpastore commented Nov 21, 2022

When you say writeback cache, what exactly is the setup you're using?

LVM2. You create a logical volume, tell LVM2 it's a cache volume, then attach it to another LV. Something like this:

lvcreate -L 110G -n cache_1 vgeth /dev/nvme0n1
lvcreate -L 110M -n cache_1_meta vgeth /dev/nvme0n1
lvconvert --type cache-pool --poolmetadata vgeth/cache_1_meta vgeth/cache_1
lvconvert --type cache --cachepool vgeth/cache_1 --cachemode writeback vgeth/erigon-mainnet

There are easier ways to do it; I use this procedure which includes some extra steps that allow me to optionally put the metadata on a different PV than the data, or use a non-linear topology for the data and/or metadata.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment