⟵ Все статьи
Читать на:

NVMe против SSD и HDD: как диск влияет на скорость сайта и как это измерить

NVMe против SSD и HDD: как диск влияет на скорость сайта и как это измерить

В описании тарифов диск обычно упоминают одной строкой — «NVMe» или «SSD», — и мимо неё легко пройти, глядя на количество ядер. На практике именно диск чаще всего определяет, как быстро открывается админка, за сколько отрабатывает выгрузка каталога и переживёт ли сайт наплыв посетителей.

Разберём, чем эти типы дисков отличаются на самом деле, где разница видна невооружённым глазом, а где ею можно пренебречь — и как измерить скорость диска на своём сервере несколькими командами.

Три типа дисков за три абзаца

HDD — механический диск с вращающимися пластинами и подвижной головкой. Чтобы прочитать данные, головке нужно физически доехать до нужного места: на это уходят миллисекунды. Для последовательного чтения больших файлов он до сих пор годится и стоит дёшево, но на множестве мелких обращений — а это ровно то, чем занимается база данных — он безнадёжно проигрывает.

SSD — микросхемы памяти без движущихся частей, подключённые по интерфейсу SATA. Задержка падает примерно в сто раз, но сам интерфейс упирается в потолок около 550 МБ/с — он проектировался ещё под механические диски.

NVMe — те же микросхемы, но подключённые напрямую к шине PCI Express, минуя устаревший интерфейс. Отсюда и скорость в несколько гигабайт в секунду, и главное — способность обрабатывать десятки тысяч параллельных запросов вместо одной очереди.

Цифры, которые имеют значение

Сравнивать диски по гигабайтам в секунду — самая частая ошибка. Для сайта важнее две другие характеристики: IOPS (сколько мелких операций в секунду диск успевает выполнить) и задержка отклика.

Ориентировочно: HDD выдаёт 100–200 IOPS при задержке в единицы миллисекунд; SATA SSD — порядка 50–90 тысяч IOPS при задержке около 0,1 мс; NVMe — сотни тысяч IOPS при задержке в десятки микросекунд. Разница между HDD и SSD измеряется сотнями раз, между SSD и NVMe — в среднем от трёх до десяти раз.

Перевести это на язык сайта просто: страница интернет-магазина с фильтрами делает десятки запросов к базе, и каждый из них ждёт диск. Когда очередь запросов растёт, разница в задержке умножается на их количество — так «сайт слегка подтормаживает» превращается в «страница грузится шесть секунд».

Где разница видна, а где нет

Заметно сильнее всего: работа базы данных, админка WordPress и Битрикса, распаковка и установка пакетов, сборка проектов, импорт и выгрузка каталогов, восстановление из резервной копии, запуск контейнеров Docker.

Почти незаметно: раздача статичных страниц и картинок (их всё равно кеширует память и браузер), VPN-туннель, простой Telegram-бот, отдача видео — там узкое место в сети, а не в диске.

То есть для VPN или бота переплачивать за самый быстрый диск смысла нет. А вот для сайта с базой данных это первое, на что стоит смотреть после объёма памяти.

Все наши тарифы — на NVMe. Сервер готов примерно через минуту после оплаты.

Создать сервер

Как измерить скорость диска на своём сервере

Проверить, что вам действительно досталось, можно за пять минут. Если сервера ещё нет: в панели NodexGo нажмите «Создать сервер», выберите локацию (рядом с каждой показан ваш реальный пинг), тариф, образ Ubuntu 24.04 и период оплаты — 1, 3, 6 или 12 месяцев. IP-адрес и пароль root придут в панель и на почту, после чего подключаемся:

ssh root@IP-адрес-сервера

Ставим инструмент для честного замера. Утилита fio умеет нагружать диск ровно так, как это делает база данных, — мелкими случайными операциями:

apt update && apt install -y fio

Первый тест — последовательное чтение, та самая цифра «гигабайты в секунду» из рекламы:

fio --name=seqread --rw=read --bs=1M --size=1G --numjobs=1 --runtime=30 --time_based --group_reporting --filename=/root/fiotest

Второй тест — то, что действительно происходит на боевом сервере: случайные операции блоками по 4 КБ в 16 потоков. Именно эта цифра отвечает за скорость сайта:

fio --name=randrw --rw=randrw --rwmixread=70 --bs=4k --iodepth=16 --size=1G --numjobs=4 --runtime=30 --time_based --group_reporting --filename=/root/fiotest

В выводе смотрите на строку IOPS и на задержку lat (avg). Для NVMe нормальны десятки тысяч IOPS и задержка в сотни микросекунд. Если видите сотни IOPS и миллисекунды — под вами механический диск или сильно перегруженное хранилище.

После теста уберите за собой файл, он занимает гигабайт:

rm -f /root/fiotest

Как понять, что тормозит именно диск

На работающем сервере проще всего посмотреть на нагрузку по устройству. Ставим набор утилит и запускаем наблюдение:

apt install -y sysstat
iostat -x 5 3

Ключевая колонка — %util. Значения около 100% означают, что диск занят постоянно и стал узким местом. Соседняя колонка await показывает среднее время ожидания операции: для NVMe это доли миллисекунды.

Ещё один надёжный признак — процессы, которые висят в состоянии ожидания ввода-вывода. Проверить их можно так:

top -bn1 | head -3

В строке %Cpu смотрите на значение wa (iowait): устойчивые 20–30% означают, что процессор простаивает в ожидании диска.

Как выжать из NVMe максимум

Быстрый диск легко испортить неверными настройками. Первое: файловая система ext4 по умолчанию записывает время последнего доступа к каждому файлу — это лишние записи на ровном месте. Отключается одним параметром в /etc/fstab:

nano /etc/fstab
/dev/vda1  /  ext4  defaults,noatime  0  1

Второе: база данных должна знать, что под ней быстрый диск. Для MySQL и MariaDB имеет смысл поднять лимит операций ввода-вывода — стандартное значение рассчитано на механику:

nano /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
innodb_io_capacity = 2000
innodb_io_capacity_max = 4000
innodb_flush_neighbors = 0
systemctl restart mysql

Третье: следите за свободным местом. Заполненный на 95% накопитель теряет в скорости и способен уронить базу данных — проверяйте регулярно:

df -h

Что важнее диска

Честный порядок приоритетов при выборе сервера выглядит так: сначала памяти должно хватать (её нехватка убивает процессы и обнуляет любую скорость диска), затем нужен быстрый диск, и только потом — дополнительные ядра. Процессор в веб-проектах упирается в потолок реже всего.

И помните: самый быстрый диск не спасёт сайт без кеширования и с тяжёлыми запросами к базе. Оптимизация обычно даёт больший прирост, чем смена железа, — но начинать с заведомо медленного диска всё равно не стоит, потому что упрётесь вы в него очень быстро.

Коротко

HDD сегодня годится только под хранение архивов и резервных копий. SATA SSD — рабочий вариант для сайта без большой базы. NVMe — то, что нужно магазину, панели администрирования, базе данных и контейнерам: разница ощущается в первый же день работы в админке.

Проверить свой сервер можно командами fio и iostat из этой статьи. Если окажется, что упираетесь не в диск, а в память, в карточке сервера в панели есть кнопка «Увеличить мощности»: тариф меняется на старший, диск и IP-адрес сохраняются, переустанавливать ничего не нужно.

NVMe на всех тарифах — от 1 vCPU / 2 ГБ до 16 vCPU / 32 ГБ.

Посмотреть тарифы

Мы используем файлы cookie: необходимые — для входа в аккаунт и языка интерфейса, аналитические — чтобы понимать, какими страницами пользуются. Сторонних рекламных систем у нас нет. Подробнее