Сравнение дисковых подсистем: SATA, SAS, SSD

Всем известны параметры производительности дисковых подсистем в теории. Но что на практике? Многие задают этот вопрос, некоторые строят свои гипотезы. Я решил провести серию тестов и определить «Who is who». Приступил к тестированию всеми известными утилитами dd, hdparm, далее перешел к fio, sysbench. Также был произведен ряд тестов используя UnixBench и несколько других аналогов. Было построено ряд графиков, но по мере дальнейшего тестирования было обнаружено что большинство этого ПО непригодно для адекватного сравнения разных дисков.
С помощью fio можно было составить сравнительную таблицу или график для SAS, SATA, но при тестировании SSD оказалось, что полученные результаты вовсе непригодны. Я конечно уважаю разработчиков этого всего софта, но в этот момент было принято решение создать ряд не синтетических тестов, а более близких к реальной обстановке.

Сразу скажу, что параметры теста и сами машинки были подобраны таким образом, чтобы результаты теста не были искажены типом процессора, его частотой или другими параметрами.

Тест 1

 

Создание файлов

В течении восьми циклов генерировалось создание небольших файлов с хаотическим содержанием и с постепенным ростом количества файлов на цикл. По каждому циклу измерялось время выполнения.
09b0c2a0582cb2aafe6a709ed77a8310
Из графика видно что большую скорость создания файлов имеют SSD KINGSTON SV300S3 и почти не зависят от их количества. Также стоит отметить что именно эти диски имеют более прямолинейную шкалу
По SAS дискам в Hardware RAID видно что скорость зависит от типа рейда, но совсем не зависит от количества дисков.
Но больше времени тратится не на создание файлов, как оказалось, а на их перезапись. По этому перейдем к второму тесту.

Тест 2

 

Перезапись файлов

Повторялись те что операции что в первом тесте, но файлы не создавались новые каждый раз, а использовался один и тот же файл, в который записывалась каждый раз новая информация.
3fc1682768a82a754c6e4e15d656e3f0
Сразу бросается в глаза ужасная картина по дискам SATA 7,200 rpm MB2000GCVBR. Медленная запись и по 2x 300GB SAS SEAGATE. По этому решил выбросить их из графика для наглядности по остальным.
9ab46cfd69ca46a84178c42f5934ad81
Самой быстрой подсистемой оказался одиночный SSD KINGSTON. Второе и третье место заняли 8x SEAGATE ST3300657SS и 4x SEAGATE ST3300657SS. Также видим что с ростом количества SSD в массиве скорость немного падает.

Тест 3

 

MySQL. Комбинирование sql-запросов INSERT, SELECT, UPDATE, DELETE

Была создана InnoDB таблица со следующей структурой:
CREATE TABLE `table` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `time` int(11) NOT NULL, `uid` int(11) NOT NULL, `status` varchar(32) NOT NULL, PRIMARY KEY (`id`), FULLTEXT KEY `status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=cp1251;

Одновременно генерировалось несколько запросов:
— INSERT;
— UPDATE с выборкой по PRIMARY KEY;
— UPDATE с выборкой по FULLTEXT (поиск по 4 символам из 24-х): WHERE `status` LIKE ‘%(string)%’;
— DELETE FROM с выборкой по PRIMARY KEY;
— DELETE FROM с выборкой без использования ключа: WHERE `time`>(int);
— SELECT с выборкой без использования ключа: WHERE `time`>(int);
— SELECT с выборкой по PRIMARY KEY;
— SELECT с выборкой по FULLTEXT (поиск по 4 символам из 24-х): WHERE `status` LIKE ‘%(string)%’;
— SELECT с выборкой без использования ключа: WHERE `uid`>(int).

be828f9c49e5178d4335c446aad93117
И снова наблюдаем ту же картину что во втором тесте.
790912a958ab2bd2f5daf805b7aa4f1a

В следующих тестах использую утилиту sysbench, которая генерирует файлы большого объема:
128 файлов, общим размером 10 Гб, 30 Гб и 50 Гб.
Размер блока 4 Кб.
Сразу хочу обратить внимание, что на некоторых графиках, по некоторым серверам нету данных на 10 Гб. Это связано с тем что на данных машинах имеется оперативной памяти более 10 Гб и выполняется кэширование данных. Отсутствие некоторых результатов на 50 Гб обусловлено нехваткой дискового пространства, в случае с SSD KINGSTON SV300S3.

Тест 4

 

Линейная запись (создание файлов)

24a5d7470f2f7bd463efff9a472185d7
Видно что лучшие показатели имеются у всех вариациях с SSD KINGSTON SV300S3, а также у 8x SEAGATE ST3300657SS в RAID10. Очень хорошо просматривается рост скорости с увеличение количества дисков SAS.
Здесь тот самый момент, где отлично видно что SSD совершенно разные бывают. Разница в 4 раза!

Тест 5

 

Линейная запись (перезапись файлов)

069b45769177a8314860ba64c334a48e
Лидеры все те же. Если сравнивать 2x SSD от INTEL и 2x SAS разницы практически никакой.

Тест 6

 

Линейное чтение

fbbb6085b642058b2074c722e765dcd0
Здесь же видим чуть иную картину. Лидируют 4x SSD KINGSTON RAID10, с минимальным изменением результатов при увеличении объема файлов, и 8x SEAGATE в RAID10, с постепенным спадом скорости, на скоростях 700 Мбит/сек и 600 Мбит/сек.
Линии по 1x SSD KINGSTON и 2x SSD KINGSTON RAID1 совпали. Проще говоря для линейного чтения лучше брать или RAID10 или одиночный диск. Использование RAID1 не оправдано.
Хорошо видно что показали 2x SAS RAID1 и 4x SAS RAID10 очень похожи. Но при увеличении количества дисков в два раза просматривается огромный прирост скорости.
2x SSD Intel RAID1 имеет не малое падение скорости на промежутке 10 Гб — 30 Гб, а далее идут на одной скорости с SATA RAID1.

Тест 7

 

Рандомное чтение

bae51e7066fa51a13bf065083a115072
В лидерах все SSD:
— 4x KINGSTON RAID10;
— 2x KINGSTON RAID1, 2x INTEL RAID1;
— 1 KINGSTON.

Всех остальных скопировал на следующий график для наглядности.
6989dc579081b0c3685a1fc647bf729f1
Наивысшую скорость среди этих имеет естественно 8x SAS RAID10, но скорость резко падает. Но исходя из данных по 2x SAS и 4x SAS предположу что с дальнейшем ростом объемом скорость стабилизируется.

Тест 8

 

Рандомная запись

4c16057d32847be7606284271fccf53d
Отличные показатели имеет 2x 120GB SSD INTEL SSDSC2CT12 Hardware RAID1 SAS1068E со стабильной скоростью 30 Мбит/сек. По KINGSTON с ростом количества дисков скорость, как ни странно, падает. На четвертом месте 8x SAS SEAGATE.

Тест 9

 

Комбинированные операции рандомного чтения и записи

Все мы знаем, что ни на одном сервере нету только чтения или только записи. Всегда выполняются обе операции. И в большинстве случаев это как раз рандомные операции, а не линейные. И так, посмотрим, что у нас получилось.
a7a714b6a678392c66e529edc15d3145
За счет отличной скорости записи с большим отрывом идет 2x SSD INTEL, за которым следует SSD KINGSTON. Третье место разделили 2x SSD KINGSTON и 8x SAS SEAGATE.

Тест 10

После проведения всех этих тестов я решил что будет удобно вывести зависимость скорости от соотношения операций рандомного чтения и рандомной записи.
938bfef12b899d6f6043758abc06926b
У кого рост скорости, у кого падение, а у 8x SAS RAID10 прямая линия.

Тест 11

Произвел также сравнение больших массивов из SAS дисков, по которому видно, что от скорости диска больше зависит, чем от их количества.
39af68bcbf8d0270d3ef6cc351daa0c5

Пришло время подвести итоги.
Машин было много, но не достаточно. К сожалению мне не удалось определить являются ли показатели по SSD INTEL SSDSC2CT12 их особенностью или же особенностью рейдового контроллера. Но полагаю, что таки контроллера.

  1. С ростом количества SAS дисков в массиве все показатели только улучшаются.
  2. Для MySQL медленные подсистемы это SATA RAID1 и SAS RAID1. По остальным отличия есть, но они не столь существенны.
  3. Для линейно записи хороши как большие массивы из SAS дисков в RAID10, так и SSD. Смысла использовать массивы из SSD нет. Стоимость растет, а производительность на месте.
  4. Для линейного чтения хороши любые большие массивы. Но на практике лин. чтение без записи у нас почти не встретить.
  5. Рандомное чтение за SSD одиночными или в Software RAID.
  6. Для рандомной записи лучше использовать Hardware RAID из SSD, хотя не сильно поступаются и одиночные SSD.
  7. Рандомные чтение/запись, то есть один из самых важных показателей, имеют лучшие результаты на Hardware RAID из SSD.
  8. Обобщая все вышесказанное, для большинства задач лучше использовать большие массивы (>=8) из SAS или Hardware RAID из SSD. Но для некоторых задач корректнее будет использовать одинарные SSD.
  9. Исходя из объемов SSD, которые преимущественно предлагаются на нашем рынке, под VDS-ноды стоит использовать максимальной производительности процессоры в паре с большими SAS массивами или же средненькие процессоры и одинарные SSD. Считаю что использование hw raid для двух SSD будет дороговато.
  10. Если вам необходима быстрая система и нет необходимости в большом дисковом пространстве 2x SSD в Hardware RAID будет лучшим выбором. Если желаете немного сэкономить в ущерб производительности, тогда можно взять одинарный SSD или два SSD в софтовом рейде.

Вопросы, которые остались без ответов:

  1. Что происходит при увеличении количества SSD в Hardware RAID?
  2. Что дешевле под виртуальные сервера: дорогие машинки и один большой массив из SAS или же несколько средненьких серверов с одинарными SSD? В этом вопросе также следует учесть надежность/долговечность SAS и SSD, так как по последним ходят разные слухи.

Кроме перечисленных тестов и серверов было еще множество, но они не попали в результаты, так как на них проводилась «калибровка» тестов и многие их них были признаны некорректными.
Также производилось тестирование RAMDisk. Показатели были довольно хорошие, но не лучшие. Вероятно из-за того что это была виртуальная машина.

Все тесты, кроме последнего, производились только на выделенных серверах.

Благодарности:

  1. vds4you за предоставление большого числа виртуальных машин, на основании которых производилась калибровка тестов;
  2. PlusServer за предоставление четырех первых тестируемых машин на SSD/SAS, которые довольно таки продолжительное время тестировались. К сожалению в данные графики они попали. А также двух SATA из текущих тестов;
  3. FastVPS за предоставление всех серверов с SSD KINGSTON;
  4. ServerClub за предоставление машин с SSD INTEL Hardware RAID, а также всех машин с SAS дисками;
  5. всем кто принимал участие в обсуждении первоначальных тестов, в частности на форуме searchengines