Купил 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