While working on the service architecture for one of our projects, I considered several SATA SSD options as the possible main storage for the data. The system will be quite write intensive, so the main interest is the write performance on capacities close to full-size storage.
After some research I picked several candidates (I show prices obviously actual for the date of publishing this post):
- Samsung 840 Pro, 512GB, the current price $450
- Samsung 840 Evo, 750GB, price $525. I consider these new SSD because of availability of models with big capacity, 750GB-1TB
- Intel DC S3500, 480GB, price $650. This model is more expensive in $/GB, as Intel positions these devices for data center usage
- SanDisk Extreme II 480 GB, price $450. This device caught my attention by good results in some third-party benchmarks
The devices are all attached to a LSI MegaRAID SAS 9260-4i raid controller with 512MB cache, and configured as individual RAID0 virtual devices.
Testing workload is: random writes, 16KiB block size sending in 8 threads as asynchronous IO on ext4 file system. Asynchronous IO is used in the most recent MySQL/InnoDB and theoretically it shows the best possible throughput.
For the Samsung 840 Evo I used 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 a decent performance, but also it is the most expensive
So I am going to run further tests on Intel and SanDisk to find out which one is more suitable for our needs.
For the reference the script I used for tests:
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