На этой странице
Бенчмарки полезны, только если их результаты воспроизводимы. В этом руководстве собраны краткая методика и точные команды для тестирования процессора, памяти, дисков и сети: с ними вы сможете проверить новый сервер, честно сравнить две машины или выявить проблему. Мы не публикуем результаты бенчмарков наших серверов: эти команды позволяют измерить производительность вашего.
Методика: как получить сопоставимые результаты
- Тестируйте систему без нагрузки. Остановите свои приложения и с помощью
topубедитесь, что процессор и диски больше ничем не заняты. После новой установки дождитесь окончания начальной синхронизации RAID: в выводеcat /proc/mdstatне должно быть выполняющихся операцийresyncилиrecovery. - Запускайте каждый тест трижды и берите медиану. Если результаты прогонов сильно различаются, выясните причину, прежде чем доверять каким-либо цифрам.
- Записывайте условия теста: модель процессора (
lscpu), ядро (uname -r), версию ОС, версии инструментов, файловую систему, схему RAID и точную командную строку. - Сравнивайте сопоставимое: на обеих машинах должны быть одинаковые ОС, ядро, версия инструмента и параметры. Другое число потоков, размер блока или глубина очереди делают два результата несравнимыми.
Установите инструменты в Ubuntu или Debian:
apt install -y sysbench p7zip-full fio iperf3В AlmaLinux или Rocky Linux пакеты sysbench и 7-Zip устанавливаются из EPEL:
dnf install -y epel-release
dnf install -y sysbench p7zip-plugins fio iperf3Процессор: sysbench и 7-Zip
sysbench cpu --threads=1 --time=30 run
sysbench cpu --threads=$(nproc) --time=30 runСравнивайте показатель events per second. Однопоточный результат отражает производительность одного ядра, от которой зависят большинство игровых серверов и многие веб-запросы. Многопоточный результат показывает общую производительность для сборки, рендеринга и виртуализации. Этот тест вычисляет простые числа в кэше процессора, поэтому почти ничего не говорит о памяти или реальных приложениях.
7z b
7z b -mmt1Встроенный бенчмарк 7-Zip оценивает скорость сжатия и распаковки в MIPS; смотрите на строку Tot:, которая объединяет оба показателя. Параметр -mmt1 ограничивает тест одним потоком.
Память: sysbench
sysbench memory --threads=1 --memory-block-size=1M --memory-total-size=100G run
sysbench memory --threads=$(nproc) --memory-block-size=1M --memory-total-size=100G runСмотрите строку MiB/sec. Добавьте --memory-oper=read, чтобы измерять чтение вместо записи. Многопоточная пропускная способность сильно зависит от числа каналов памяти: 8- или 12-канальная платформа EPYC масштабируется гораздо лучше двухканальной десктопной.
Диски: fio
Никогда не запускайте тесты записи fio на «сыром» устройстве (например, /dev/nvme0n1), разделе или md-массиве, где хранятся данные: fio перезапишет их и уничтожит файловую систему и метаданные RAID. Всегда тестируйте файл на смонтированной файловой системе, как показано ниже, при достаточном запасе свободного места.
Каждая команда выполняется 60 секунд после 5-секундного разогрева, работает в обход страничного кэша (--direct=1) и использует тестовый файл размером 8 ГБ:
fio --name=seq-read --filename=/var/tmp/fio.test --size=8G --rw=read --bs=1M --ioengine=libaio --iodepth=16 --numjobs=1 --direct=1 --runtime=60 --time_based --ramp_time=5 --group_reporting
fio --name=seq-write --filename=/var/tmp/fio.test --size=8G --rw=write --bs=1M --ioengine=libaio --iodepth=16 --numjobs=1 --direct=1 --runtime=60 --time_based --ramp_time=5 --group_reporting
fio --name=rand-read --filename=/var/tmp/fio.test --size=8G --rw=randread --bs=4k --ioengine=libaio --iodepth=32 --numjobs=4 --direct=1 --runtime=60 --time_based --ramp_time=5 --group_reporting
fio --name=rand-write --filename=/var/tmp/fio.test --size=8G --rw=randwrite --bs=4k --ioengine=libaio --iodepth=32 --numjobs=4 --direct=1 --runtime=60 --time_based --ramp_time=5 --group_reporting
rm /var/tmp/fio.test- Результат последовательных операций блоками 1M — пропускная способность (
BW=): она важна для резервного копирования, медиафайлов и больших файлов. - Результат случайных операций блоками 4k —
IOPS: этот показатель важен для баз данных и виртуальных машин. Смотрите такжеclat percentiles: 99-й и 99.9-й перцентили говорят об интерактивных нагрузках больше, чем среднее значение. - RAID 1 может читать с обоих дисков, поэтому параллельное случайное чтение может превысить возможности одного диска, тогда как каждая запись выполняется на оба.
- Кэш записи SSD: многие SSD принимают записываемые данные в быстрый кэш и замедляются, когда он заполняется. Более длительный прогон (
--runtime=300) покажет устойчивую скорость. - ZFS кэширует данные в оперативной памяти, что может завышать результаты чтения: используйте тестовый файл больше объема ОЗУ или тестируйте свое реальное приложение.
На современных ядрах --ioengine=io_uring — хорошая альтернатива libaio; используйте один и тот же движок на всех сравниваемых машинах.
Сеть: iperf3
iperf3 измеряет пропускную способность между двумя машинами, которыми вы управляете. Запустите сервер на одной стороне, откройте на время теста TCP-порт 5201 в ее файрволе, а по завершении остановите сервер сочетанием Ctrl+C:
iperf3 -sНа другой машине проверьте оба направления (-R меняет направление на обратное):
iperf3 -c 203.0.113.10 -P 4 -t 30
iperf3 -c 203.0.113.10 -P 4 -t 30 -RПри стандартном MTU 1500 байт полезная нагрузка TCP достигает примерно 940 Мбит/с на порту 1 Гбит/с и примерно 9,4 Гбит/с на порту 10 Гбит/с; на 10 Гбит/с используйте больше потоков (-P 8). Результаты также ограничены возможностями другой стороны, расстоянием и всеми сетями на пути: чтобы измерить порт, тестируйте до сервера в том же регионе, а чтобы измерить маршрут — до ваших пользователей. О проверке задержки и маршрутов см. руководство по тестированию сети.
Интерпретация и сравнение результатов
- Подбирайте тест под нагрузку: однопоточная производительность процессора и задержка — для игровых серверов, IOPS и задержка при случайном доступе блоками 4k — для баз данных, многопоточная производительность процессора и пропускная способность памяти — для сборки и виртуализации.
- Завершайте проверку собственным приложением. Синтетические тесты изолируют один компонент; нагрузочный тест реального сервиса, например
pgbenchдля PostgreSQL, отвечает на тот вопрос, который вас действительно интересует. - Сравнивайте честно: одинаковые команды, одинаковые ОС и ядро, системы без нагрузки, по три прогона на каждой. Оборудование всех тарифов указано на странице Сравнение серверов.
- Ищите причину выбросов. Результат намного ниже, чем у аналогичного оборудования, может указывать на троттлинг или аппаратную неисправность: в первую очередь проверьте состояние дисков и температуру.
Следующие шаги
- Проверьте маршрут до ваших пользователей с помощью mtr и iperf3.
- Нужно больше ядер или более быстрые накопители? Сравните производительные и корпоративные серверы.
- Результаты намного ниже возможностей оборудования? Отправьте команды и их вывод в поддержку.