YABS — скрипт для бенчмарка серверов, который стал стандартом в хостинг-комьюнити

Купил VPS, зашёл по SSH, и первый вопрос: что мне за это продали? Провайдер обещал «высокопроизводительный NVMe-сервер», а на деле может оказаться перегруженная нода с тормозными дисками. Проверить это руками — долго и муторно. Нужно ставить fio, настраивать iperf3, качать Geekbench, разбираться с параметрами каждого инструмента. Или можно выполнить одну команду.

YABS (Yet-Another-Bench-Script) — bash-скрипт, который прогоняет тесты дисков, сети и CPU за одну сессию. Одна строка в терминале, 10–15 минут ожидания, и у вас на руках полная картина производительности сервера. Без установки зависимостей, без root-прав.

Проект живёт на GitHub, набрал 6000+ звёзд и 544 форка. Автор — Mason Rowe. Лицензия — WTFPL (да, «Do What The Fuck You Want To Public License», и нет, я не шучу).

Зачем нужен ещё один бенчмарк-скрипт

До YABS существовали bench.sh, nench.sh, ServerBench. Все они решают примерно ту же задачу, но с оговорками. bench.sh использует dd для тестирования дисков — а это, мягко говоря, не самый точный инструмент. nench добавил fio, но остался ограниченным по сетевым тестам. YABS собрал лучшее из всех подходов и упаковал в один скрипт: fio для дисков, iperf3 для сети, Geekbench для CPU.

Что меня лично подкупает: скрипт не требует ничего. Ни sudo, ни предустановленных пакетов. Он сам качает прекомпилированные бинарники fio и iperf3 (собранные через Holy Build Box для портативности), скачивает Geekbench, прогоняет тесты и убирает за собой. Если fio или iperf3 уже стоят на сервере — используются локальные версии.

Запуск — одна строка

curl -sL https://yabs.sh | bash

Или через wget:

wget -qO- yabs.sh | bash

Домен yabs.sh — это не шутка, он реально работает и редиректит на скрипт из репозитория. Удобно, запоминается с первого раза.

Полный прогон занимает 10–15 минут. На слабых VPS с одним ядром — до 20 минут, в основном из-за Geekbench.

Что тестируется

Диски: fio с четырьмя размерами блоков

Скрипт запускает fio в режиме случайного чтения/записи (50/50) с четырьмя размерами блоков: 4k, 64k, 512k, 1m. Это не синтетика ради синтетики — такой набор хорошо показывает поведение диска в разных сценариях.

4k — это ваша база данных, случайные мелкие операции, то, от чего зависит отзывчивость сервера. 64k и 512k — типичная работа с файлами. 1m — последовательные операции, копирование больших файлов.

На выходе — скорости чтения и записи в MB/s плюс IOPS для каждого размера блока. Пример с выделенного сервера на Xeon E-2276G:

Block Size | 4k            (IOPS) | 64k           (IOPS)
Read       | 405.41 MB/s (101.3k) | 407.96 MB/s   (6.3k)
Write      | 406.48 MB/s (101.6k) | 410.11 MB/s   (6.4k)
Total      | 811.90 MB/s (202.9k) | 818.08 MB/s  (12.7k)

101k IOPS на 4k-блоках — это NVMe, тут без вопросов. Для сравнения: на дешёвых VPS за $5/мес я видел 1.5k IOPS на тех же 4k-блоках. Разница в 67 раз. И это при том, что оба провайдера писали «NVMe» в характеристиках.

Если fio скачать не удалось или тест упал, скрипт автоматически откатывается на dd — менее точно, но хоть что-то.

Отдельная деталь для пользователей ZFS: скрипт предупреждает, если на файловой системе мало места, потому что ZFS ведёт себя странно при заполненных пулах, и результаты будут недостоверными.

Сеть: iperf3 по нескольким точкам

Сетевые тесты идут через iperf3 с 8 параллельными потоками. По умолчанию проверяются несколько серверов: Clouvider (Лондон, Нью-Йорк), Scaleway (Париж) и другие. Тестируются и IPv4, и IPv6, если он доступен.

Каждый тест — это примерно 20 секунд на одну точку (10 секунд на загрузку, 10 на выгрузку). Скрипт пытается подключиться к серверу 5 раз, и если тот занят — пропускает.

Provider        | Location (Link)           | Send Speed      | Recv Speed      | Ping
Clouvider       | London, UK (10G)          | 1.61 Gbits/sec  | 2.39 Gbits/sec  | 77.5 ms
Clouvider       | NYC, NY, US (10G)         | 9.10 Gbits/sec  | 8.85 Gbits/sec  | 1.21 ms

Важный момент: тесты iperf жрут трафик. На сервере с ограниченным каналом или лимитом трафика стоит запускать с флагом -r (сокращённый список серверов) или -i (вообще отключить сетевые тесты). Я однажды забыл про это на VPS с месячным лимитом в 500 ГБ — не катастрофа, но лучше держать в голове.

Скрипт также выводит информацию о сети: провайдер, ASN, локация. Данные берутся из ip-api.com.

CPU: Geekbench 6

По умолчанию запускается Geekbench 6 — скачивается архив, распаковывается, прогоняется тест. На выходе — single-core и multi-core скоры плюс ссылка на полный отчёт на сайте Geekbench, где можно сравнить результаты с другими системами.

Geekbench 6 Benchmark Test:
---------------------------------
Test            | Value
Single Core     | 1549
Multi Core      | 5278
Full Test       | https://browser.geekbench.com/v6/cpu/1021916

Если нужно, можно переключиться на Geekbench 5 (флаг -5) или Geekbench 4 (-4). Geekbench 4 менее требователен к памяти — пригодится на VPS с 1 ГБ RAM, где шестая версия может не запуститься. Флаг -9 включает одновременно четвёртую и пятую версии. А можно вообще отключить Geekbench (-g), если интересуют только диски и сеть.

У кого есть лицензия Geekbench — можно положить файл geekbench.license в рабочую директорию:

echo "email@domain.com ABCDE-12345-FGHIJ-57890" > geekbench.license

Флаги и кастомизация

Скрипт управляется через флаги, которые передаются после --:

curl -sL https://yabs.sh | bash -s -- -flags

Базовые:

  • -f или -d — отключить тесты дисков
  • -i — отключить сетевые тесты
  • -g — отключить Geekbench
  • -n — не показывать информацию о сети
  • -r — сокращённый набор iperf-серверов
  • -b — принудительно использовать прекомпилированные бинарники вместо локальных

Комбинируются свободно. Хотите только тест дисков? -ig отключит сеть и Geekbench.

Для экспорта результатов:

  • -j — вывести JSON в терминал
  • -w results.json — записать JSON в файл
  • -s "https://example.com/yabs/post" — отправить результаты на сервер

Можно указать несколько URL через запятую. Поддерживаемые сервисы: YABSdb и VPSBenchmarks.

Есть и свежая фича: кастомные iperf-серверы через флаг -p:

curl -sL https://yabs.sh | bash -s -- -p "example.com:5201-5210:MyServer:New York (10G):IPv4|IPv6"

Полезно, если стандартные серверы далеко от вашей локации или вы хотите протестировать связность с конкретным дата-центром.

Практическое применение

Я использую YABS в двух сценариях. Первый — при покупке нового VPS. Запустил скрипт, посмотрел цифры, сравнил с тем, что обещал провайдер. Если 4k IOPS ниже 5–10 тысяч — это, скорее всего, шпиндельный HDD или перегруженное хранилище, какие бы буквы ни стояли в описании тарифа.

Второй — мониторинг деградации. Прогнал YABS при покупке, сохранил результаты (-w baseline.json). Через полгода прогнал снова. Если 4k IOPS упали вдвое — провайдер подсадил на ноду ещё десяток клиентов.

На VPSBenchmarks собрана база результатов YABS от разных провайдеров. Там можно сравнить производительность до покупки — достаточно найти нужный тариф и посмотреть чужие замеры. Сообщества LowEndTalk и LowEndSpirit годами собирают и обсуждают результаты YABS в отдельных тредах — тысячи записей.

Совместимость и ограничения

Протестированные дистрибутивы: CentOS 6+, Debian 8+, Fedora 30, Ubuntu 16.04+. На практике работает почти везде, где есть bash и curl или wget.

ARM-платформы поддерживаются экспериментально. На Raspberry Pi и ARM-based VPS (Ampere на Oracle Cloud, Graviton на AWS) скрипт в целом работает, но автор честно предупреждает: тестирование на ARM ограниченное, баги возможны.

На Windows скрипт можно запустить через WSL 2. Именно WSL 2, не первую версию — там бинарники не заведутся.

Минимальные требования к RAM — 2 ГБ для Geekbench 6. На машинах с 1 ГБ лучше использовать Geekbench 4 (-4) или отключить тест CPU совсем. Если на сервере нет swap и RAM впритык, Geekbench может упасть или, хуже того, OOM-киллер прибьёт что-нибудь нужное.

Про безопасность

Пайпить curl в bash — вечная тема для холиваров. И YABS тут не исключение. Скрипт тянет прекомпилированные бинарники fio и iperf3 из своего репозитория, плюс скачивает Geekbench. Код открыт, бинарники собираются автором через Holy Build Box. Но если вы параноите (и правильно делаете), можно скачать скрипт, прочитать, а потом запустить локально:

wget https://raw.githubusercontent.com/masonr/yet-another-bench-script/master/yabs.sh
# ... прочитать, убедиться, что всё ок ...
bash yabs.sh

Автор также ведёт документацию по компиляции бинарников в директории bin/ репозитория — можно пересобрать самостоятельно.

Чего не хватает

У скрипта нет встроенного теста латентности дисков (ioping-стиль). fio показывает пропускную способность и IOPS, но для задач вроде баз данных часто важнее именно латентность.

Набор iperf-серверов ограничен Европой и Северной Америкой. Если сервер в Азии или Южной Америке — стандартные точки будут далеко, и результаты покажут больше географию, чем реальную скорость канала. Частично это решается флагом -p с кастомными серверами, но найти публичные iperf3-серверы в нужном регионе — отдельное приключение.

Geekbench — закрытый проприетарный бенчмарк. Кому-то это принципиально. Альтернативы вроде sysbench или stress-ng дали бы open-source вариант, но сравнимость результатов пострадает — у Geekbench огромная база для сравнения.

Обновления выходят нечасто. Последний заметный коммит — апрель 2023. Скрипт работает и не ломается, но если хочется bleeding edge (вроде поддержки Geekbench 7 или новых iperf-серверов), придётся подождать или форкнуть.

Итого

YABS делает одну вещь и делает её хорошо: за 10 минут даёт внятную картину производительности Linux-сервера. Одна команда, три инструмента (fio, iperf3, Geekbench), читаемый вывод. Результаты можно экспортировать в JSON и отправить на VPSBenchmarks для сравнения.

Для быстрой проверки VPS после покупки — пожалуй, лучшего инструмента нет. Для серьёзного нагрузочного тестирования продакшн-систем — нет, тут нужны другие подходы. Но если вопрос «что мне продали за эти деньги?» — YABS ответит за 10 минут.

Подробное описание: YABS на DevTrends

Репозиторий: github.com/masonr/yet-another-bench-script

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *