Был куплен сервер с железкой P4800X (об этом можно почитать тут). Основной задачей сервер ещё не нагружен, а посмотреть на что способен ssd диск за 2000$ на 375Gb очень интересно. Замер делался только iops запись.
Для начала я решил сделать тесты на обновления БД. Сделал таблицу с 2мя колонками integer и 2мя колонками string. Сделал 40 потоков (20 физически ядер) которые ковыряли бы БД. В самой БД 40млн строк, каждому потоку по 1млн. Получилось 16170 iops, как видно на графиках.
3 скриншота: iops, cpu-jumps, read-write. За один промежуток времени. Первый блок — это инициализация, как в один поток создавалось 40млн записей в БД. Второй блок — это как они обновлялись в 40 потоков.
Тогда я переделал таблицу на 4 колонки integer — получил уже 19130 iops. Но всё равно далеко до заявленных 500000 iops на запись.
На этих графиках виден кусочек нагрузки из предыдущего теста и также блок с инициализацией и использованием. Удивительно, что замена string->integer дало +15% производительности.
Любопытно, что и в первом и во втором тесте мы упираемся в скорость 400мб/сек скорость записи.
Огорчил меня такой результат, тогда я попробовал делать записи файлов напрямую. Попробовал сделать 40 файликов по 1мб и в 40 потоков писать туда чего-то в случайную позицию. Вот тут эта железка выдала 243110 iops.
Решил не мучать дольше 15 минут — такая нагрузка очень сильно выедает ресурс ssd.
Любопытно, что в этом случае общая скорость записи: 1gb/сек.
Утилизация 100% — то есть больше выжать из данной железки невозможно, возможно мы упираемся в процессор. Куда же делась половина заявленных iops на запись? Возможно я неправильно тестирую? Скорей всего да. Но извините эта железка должна не бэнчмарки гонять, а бизнес-задачу решать. И вот бенчмарк похожий на бизнес-задачу она решает с вот такими характеристиками, как вы видите на графиках.
Далее я попытался сделать замеры на чтение — но 125Gb оперативы свободной кэширует всё что можно. Выедать скриптом память или отключать кэш — посчитал неприемлемым, на сём и успокоился.
Мне до покупки сей железки очень хотелось бы увидеть подобные тесты.
Вот теперь они есть — надеюсь это кому-то поможет.
Сам бэнчмарк тут.
Готов применить ваши нагрузочные скрипты на данной железке.
Комментарии (9)
Arxitektor
19.11.2017 20:39Тогда я переделал таблицу на 4 колонки integer — получил уже 19130 iops.
Попробуй прогнать тест на RAM диске. какой результат даст?
VioletGiraffe
19.11.2017 21:17Как память может что-то кэшировать при чтении? Как раз чтение — это и есть реальный бенчмарк, потому что запись можно кэшировать, и обращаться к накопителю уже последовательно. А вот чтение — нет.
ildarz
20.11.2017 10:47Как память может что-то кэшировать при чтении?
Путем предварительного считывания данных в память. Ваш КО.
VioletGiraffe
20.11.2017 10:55Спасибо, кэп. А как оперативная память может что-то кэшировать при случайном чтении по всему объёму накопителя?
ildarz
20.11.2017 12:03Например, вы думаете, что читаете случайный блок размером 512 байт, а СХД берет и считывает в кэш страйп в 256К. Или, скажем, сервер БД кэширует базы просто при старте.
Все зависит от того, как, что и чем тестируем, и чистых результатов надо специально добиваться, а не думать, что они сами собой получатся. А то тут иногда попадаются люди, которы с SATA HDD тысячи iops снимают. :)VioletGiraffe
20.11.2017 12:12Логично. Тест в реальных условиях на БД интересен тем, что показывает, как решается конечная задача, но плохо харктеризует технические особенности накопителя. Нужен специальный бенчмарк.
nApoBo3
20.11.2017 15:30Нужен не специальный, а повторяемый и максимально близкий к реальной задаче, в идеале с ней совпадающий, сервера не на бенчмарках гоняют.
grekazrail
19.11.2017 21:17fio, diskspd, на крайняк iometer… Разные паттерны? Толку от этого обзора, извините, нет.
celebrate
Дак а fio с direct=1 что показывает ?