This test creates a new piece store (pieces.NewStore
) and tries to write as many 2.3 Mb files as possible.
Variables:
2.3 Mb is chosen because the 64 Mb block size and 29 EC parameter results with 2.3 Mb piece size.
TLDR;
On a real physical server machine (which also runs other workloads):
Note: This machine also had other production workloads (like a storagenode) at the same time
name time/op
ReadWrite/sync-SHA256-8 80.0ms ± 0%
ReadWrite/nosync-SHA256-8 6.61ms ±15%
ReadWrite/sync-BLAKE3-8 79.1ms ± 4%
ReadWrite/nosync-BLAKE3-8 2.18ms ± 8%
name speed
ReadWrite/sync-SHA256-8 29.0MB/s ± 0%
ReadWrite/nosync-SHA256-8 355MB/s ±14%
ReadWrite/sync-BLAKE3-8 29.3MB/s ± 4%
ReadWrite/nosync-BLAKE3-8 1.07GB/s ± 9%
This shows that Blake have 4x better potential.
name time/op
ReadWrite/sync-SHA256-12 4.64ms ± 1%
ReadWrite/nosync-SHA256-12 4.62ms ± 0%
ReadWrite/sync-BLAKE3-12 1.01ms ± 1%
ReadWrite/nosync-BLAKE3-12 1.00ms ± 2%
name speed
ReadWrite/sync-SHA256-12 500MB/s ± 1%
ReadWrite/nosync-SHA256-12 502MB/s ± 0%
ReadWrite/sync-BLAKE3-12 2.30GB/s ± 1%
ReadWrite/nosync-BLAKE3-12 2.32GB/s ± 2%
name time/op
ReadWrite/sync-SHA256-8 19.0ms ±40%
ReadWrite/nosync-SHA256-8 9.53ms ±27%
ReadWrite/sync-BLAKE3-8 16.1ms ± 0%
ReadWrite/nosync-BLAKE3-8 4.94ms ±86%
name speed
ReadWrite/sync-SHA256-8 127MB/s ±31%
ReadWrite/nosync-SHA256-8 250MB/s ±24%
ReadWrite/sync-BLAKE3-8 144MB/s ± 0%
ReadWrite/nosync-BLAKE3-8 560MB/s ±67%
cd storagenode/pieces/b
CGO_ENABLED=0 go test -c
And the binary is used to execute tests:
./b.test -test.v -test.benchtime=1000x -test.bench 'BenchmarkReadWrite' | tee -a server.txt
go install golang.org/x/perf/cmd/benchstat@latest
benchstat server.txt
Note: we need to use counter based (1000x
) and not timer based limit to write the same amount of bytes. Results of tests with time based limit couldn't be compared as one test may write significant more bytes.
Used main commit:
commit f35b4163f98de6c8a9032a738c12ce3766a2314d (origin/main, origin/HEAD)
Author: NickolaiYurchenko
Date: Mon Aug 22 17:47:43 2022 +0300
web/satellite: multiple passphrase notification added
But it also includes the piece hash patches:
https://github.com/elek/storj/commit/9bd26c777c272e152d7b90ec6703d93d484219c4
curl https://gist.githubusercontent.com/elek/7b1eb55b37d2988534bb05ce98f7f6e0/raw/hw.sh | tee | sudo bash
VENDOR
Manufacturer: ASUS
Product Name: System Product Name
MEMORY
Size: 32 GB
Non-Volatile Size: None
Volatile Size: 32 GB
Cache Size: None
Logical Size: None
Size: 32 GB
Non-Volatile Size: None
Volatile Size: 32 GB
Cache Size: None
Logical Size: None
CPUs
Version: 12th Gen Intel(R) Core(TM) i5-12400
Max Speed: 4400 MHz
Core Enabled: 6
Thread Count: 12
DISKS
NAME SIZE TYPE FSTYPE MOUNTPOINT VENDOR MODEL
sda 3.6T disk ATA WDC WD40EFRX-68N32N0
└─sda1 3.6T part linux_raid_member
└─md127 3.6T raid1 ext4
nvme0n1 931.5G disk Samsung SSD 980 PRO 1TB
├─nvme0n1p1 100M part vfat /boot
├─nvme0n1p2 16M part
├─nvme0n1p3 243.4G part ntfs
├─nvme0n1p4 611M part ntfs
└─nvme0n1p5 687.4G part crypto_LUKS
└─root 687.4G crypt ext4 /
VENDOR
Manufacturer: FUJITSU
Product Name:
MEMORY
Size: 16384 MB
Size: 16384 MB
CPUs
Version: Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz
Max Speed: 8300 MHz
Core Enabled: 4
Thread Count: 8
DISKS
NAME SIZE TYPE FSTYPE MOUNTPOINT VENDOR MODEL
sda 3.7T disk ATA TOSHIBA_MG04ACA400EY
├─sda1 3.7T part linux_raid_member
│ └─md0 3.7T raid1 ext4 /
└─sda2 1M part
sdb 3.7T disk ATA TOSHIBA_MG04ACA400EY
├─sdb1 3.7T part linux_raid_member
│ └─md0 3.7T raid1 ext4 /
└─sdb2 1M part
VENDOR
Manufacturer: Google
Product Name: Google Compute Engine
MEMORY
Size: 16 GB
Size: 16 GB
CPUs
Version: Not Specified
Max Speed: 2000 MHz
Version: Not Specified
Max Speed: 2000 MHz
Version: Not Specified
Max Speed: 2000 MHz
Version: Not Specified
Max Speed: 2000 MHz
Version: Not Specified
Max Speed: 2000 MHz
Version: Not Specified
Max Speed: 2000 MHz
Version: Not Specified
Max Speed: 2000 MHz
Version: Not Specified
Max Speed: 2000 MHz
DISKS
NAME SIZE TYPE FSTYPE MOUNTPOINT VENDOR MODEL
sda 200G disk Google PersistentDisk
├─sda1 199.9G part ext4 /
├─sda14 3M part
└─sda15 124M part vfat /boot/efi