This post comes from
While working on the service architecture for one of our projects, I considered several SATA SSD options as the possible main storage for our data. The system will be quite write-intensive, so the main interest is the write performance on capacities close to full-sized storage.
After some research I picked several candidates (prices are, obviously, for the actual date of publication of this post):
- Samsung 840 Pro, 512GB, the current price is $450
- Samsung 840 Evo, 750GB, $525. I considered these new SSDs because of the availability of models with large capacity, 750GB-1TB
- Intel DC S3500, 480GB, $650. This model is more expensive in $/GB, as Intel positions these devices for data center usage
- SanDisk Extreme II 480 GB, $450. This device caught my attention with good results in some third-party benchmarks
The devices are all attached to an LSI MegaRAID SAS 9260-4i raid controller with 512MB cache, and configured as individual RAID0 virtual devices.
The testing workload I used was random writes with 16KiB block size sent in 8 threads as asynchronous IO on an ext4 file system. Asynchronous IO is used in the most recent MySQL/InnoDB, and theoretically shows the best possible throughput.
For the Samsung 840 Evo I used a 600GiB file size, and for the rest 350GiB, to emulate 70-80% filling.
My thoughts on these results:
- I frankly expected more from Samsung devices, but they ended up below 50MiB/sec in random writes.
- SanDisk is definitely attractive for absolute throughput, but significant instability is a concern.
- Intel shows performance, but also it is the most expensive.
So I am going to run further tests on the Intel and SanDisk drives to find out which one is more suitable for our needs.
For reference, here's the script I used for tests:
sz=350G sysbench --test=fileio --file-total-size=$sz --file-num=64 prepare sysbench --test=fileio --file-total-size=$sz --file-test-mode=rndwr --max-time=180000 --max-requests=0 --num-threads=8 --rand-init=on --file-num=64 --file-io-mode=async --file-extra-flags=direct --file-fsync-freq=0 --file-block-size=16384 --report-interval=10 run