Community-maintained hardware guide for running Monad validators with optimal performance
Minimum specifications for running a Monad validator node on testnet and mainnet
Community-verified CPUs for Monad validator operations. 16 cores is the sweet spot for price/performance.
Status | Manufacturer | Model | Base Clock | Boost | Cores | Threads | TDP | NUMA | Temp @ Load |
---|---|---|---|---|---|---|---|---|---|
โ | AMD | EPYC 4584PX | 4.20 GHz | 5.70 GHz | 16 | 32 | 120W | 1 | 70ยฐC / avg 100TX |
โ | AMD | EPYC 4585PX | 4.30 GHz | 5.70 GHz | 32 | 64 | 280W | 1 | - |
โ | AMD | Ryzen 9 7950X | 4.50 GHz | 5.70 GHz | 16 | 32 | 170W | 1 | - |
โ | AMD | Ryzen 9 7950X3D | 4.20 GHz | 5.70 GHz | 16 | 32 | 120W | 1 | - |
โ | AMD | Ryzen 9 9950X | 4.30 GHz | 5.70 GHz | 16 | 32 | 170W | 1 | 80ยฐC / avg 2000TX - Need a high-performance water-cooled cooler |
โ | AMD | Threadripper PRO 7965WX | 4.20 GHz | 5.30 GHz | 24 | 48 | 350W | 1 | 65ยฐC |
PCIe Gen4 NVMe SSDs or better required. Gen5 drives provide future-proofing.
Status | Manufacturer | Model | Interface | Capacity | Seq Read | Seq Write | Random Read | Random Write |
---|---|---|---|---|---|---|---|---|
โ | Samsung | 980 PRO | PCIe 4.0 x4 | 2TB | 7,000 MB/s | 5,100 MB/s | 1,000K IOPS | 1,000K IOPS |
โ | Samsung | 990 PRO | PCIe 4.0 x4 | 2TB | 7,450 MB/s | 6,900 MB/s | 1,200K IOPS | 1,550K IOPS |
โ | Samsung | 9100 PRO | PCIe 5.0 x4 | 2TB | 14,700 MB/s | 13,300 MB/s | 1,850K IOPS | 2,600K IOPS |
โ | Samsung | PM9A1 | PCIe 4.0 x4 | 2TB | 7,000 MB/s | 5,200 MB/s | 1,000K IOPS | 850K IOPS |
โ | Micron | 7450 PRO | PCIe 4.0 x4 | 1.92TB | 5,000 MB/s | 2,400 MB/s | 734K IOPS | 185K IOPS |
Pre-built enterprise servers tested and validated for Monad validators.
Recommended | Manufacturer | Model | CPU | Memory | Storage | Notes |
---|---|---|---|---|---|---|
โ | Supermicro | AS-1015A-MT | 1x AMD EPYC 4584PX 16C/32T 120W | 2x DDR5-4800 32GB ECC UDIMM | Samsung PM9A3 SSD 1.9TB | + 990 PRO 4TB 10GbE NIC |
Community-tested custom builds for different performance tiers.
Recommended | CPU | Motherboard | Memory | Storage | Network | Notes |
---|---|---|---|---|---|---|
โ | AMD Ryzen 9 9950X | ASRock B650M Pro X3D | SK Hynix DDR5-5600 32GB ร 2 | Samsung 990 PRO 2TB ร 2 | Intel X540-T2 10GbE NIC | High-end desktop build |
โ | AMD Threadripper PRO 7965WX | ASUS PRO WS WRX90E-SAGE SE | Samsung DDR5-5600 64GB ร 2 | Samsung 9100 PRO 2TB NVMe ร 4 | Intel X540-T2 10GbE NIC | Workstation build |
Purpose: CPU Tuning Guide for Handling Intermittent Skipped Blocks and Tx Load
# Check CCDs to see which CPU belongs to which CCD
lscpu -e | awk 'NR==1{print "CPU L3"} NR>1{split($5,a,":"); print $1, a[4]}'
# e.g. AMD Threadripper PRO 7965WX
# CCD 0: 0 ~ 5, CCD 1: 6 ~ 11, CCD 2: 12 ~ 17, CCD 3: 18 ~ 23
CPU L3
0 0
1 0
2 0
3 0
4 0
5 0
6 1
7 1
8 1
...
20 3
21 3
22 3
23 3
# In monad-execution.service, the default value for ro_sq_thread_cpu is 5, and the default value for sq_thread_cpu is 6.
# On the 7965WX, core 5 belongs to CCD 0 while core 6 belongs to CCD 1.
# Therefore, it is recommended to place both values within the same CCD (e.g. CCD 1).
sudo vi /usr/lib/systemd/system/monad-execution.service
--ro_sq_thread_cpu 6 \
--sq_thread_cpu 7 \
The governor is a kernel module that sets CPU clock behavior.
Common modes:
performance
- Keeps CPU clock as high as possible (low latency, higher power draw)powersave
- Keeps CPU clock as low as possible (energy saving, lower performance)schedutil
- Dynamically adjusts frequency based on Linux scheduler load tracking (modern default)# Check current CPU governor
cpupower frequency-info | grep -A2 "current policy"
# Change to performance mode
sudo cpupower frequency-set -g performance
BIOS
OS (cpupower)
# Check current idle states
cpupower idle-info
# Disable C2
sudo cpupower idle-set -d 2
# Disable C1
sudo cpupower idle-set -d 1
# Re-enable C1
sudo cpupower idle-set -e 1
Purpose: Configure firewall PPS (Packets Per Second) limits to protect against UDP floods while maintaining Monad BFT performance
โ ๏ธ Note: These values are highly experimental and vary depending on your environment. Adjust based on your network conditions.
1. Leader sends proposal:
2. Rebroadcast load:
Proposal Size | Leader (PPS) | Non-Leader (PPS) | Network Total |
---|---|---|---|
100KB | ~451 | ~400-600 | ~300KB |
2MB | ~5,362 | ~7,267 | ~6MB |
Proposal (2MB block):
Vote messages:
Component | Leader | Non-Leader |
---|---|---|
Proposal Send | 5,163 | 5,148 |
Proposal Receive | 199 | 1,920 |
Vote Send/Receive | 398 | 398 |
Round Total | 5,760 | 7,466 |
Component | Packets/Second |
---|---|
Consensus (2.5 rounds) | ~18,665 |
Transactions (10K TPS, 3 leaders) | ~8,640 |
Block Sync | ~2,800 |
State Sync | ~1,000 |
Peer Discovery | ~200 |
TOTAL | ~31,305 PPS |
Component | Send | Receive | Total |
---|---|---|---|
Consensus | ~15MB/s | ~15MB/s | ~30MB/s |
Transactions | ~4MB/s | ~4MB/s | ~8MB/s |
Sync | ~2MB/s | ~2MB/s | ~4MB/s |
Total Bandwidth | ~21MB/s | ~21MB/s | ~42MB/s |
Metric | Warning | Critical |
---|---|---|
PPS Utilization | > 80% | > 95% |
Packet Drop Rate | > 1% | > 5% |
# Check iptables counters
iptables -L -v -n | grep hashlimit
# Monitor UDP traffic
tcpdump -i eth0 -n udp port 30303 -c 100
# Check dropped packets
netstat -su | grep -i drop
Required:Ubuntu 24.04 LTS or newer
Kernel:Linux kernel โฅ v6.8.0.60-generic
Linux kernel versions v6.8.0.56 through v6.8.0.59 contain a critical bug that causes Monad clients to hang in an uninterruptible sleep state.
Affected Versions (DO NOT USE):
Solution: Immediately upgrade to v6.8.0.60-generic
or newer.
This hardware compatibility list is community-maintained. Share your hardware configurations and help other validators optimize their setups.
Maintainers: Monad Community
Last Updated: January 2025
Version: 1.0.0