NVMe-диски в VPS: почему это быстрее SSD в 5–7 раз

Основы и выбор
NVMe-диски в VPS: почему это быстрее SSD в 5–7 раз

NVMe VPS — это виртуальный сервер, у которого дисковая подсистема построена на накопителях, подключённых напрямую к шине PCIe, а не через устаревший интерфейс SATA. Разница не маркетинговая: на последовательных операциях NVMe обгоняет SATA SSD в 5–7 раз, а на случайном чтении мелкими блоками — именно так работают базы данных и CMS — отрыв бывает ещё больше. В этой статье разберём, чем протокол NVMe отличается от AHCI, откуда берётся скорость, где она видна на практике и как за пять минут проверить диск на своём VPS командами fio и dd.

Что такое NVMe и чем протокол отличается от AHCI

NVMe (Non-Volatile Memory Express) — протокол обмена данными, спроектированный специально под флеш-память. Обычный SATA SSD, каким бы быстрым ни был сам чип памяти, общается с системой через протокол AHCI, который разрабатывался в середине 2000-х для механических жёстких дисков. Тогда головка физически ездила по пластине, и глубокий параллелизм не имел смысла.

Отсюда три фундаментальных ограничения SATA SSD:

  • Потолок интерфейса. SATA III даёт 6 Гбит/с — на практике это 550–600 МБ/с. Больше из этого разъёма не выжать, какой бы быстрый накопитель в него ни вставили.
  • Одна очередь команд. AHCI поддерживает одну очередь глубиной 32 команды. NVMe — до 65 535 очередей по 65 536 команд в каждой (те самые «~64K»). Каждое ядро процессора может работать со своей очередью, не мешая остальным.
  • Лишние прослойки. Команда в AHCI проходит через SATA-контроллер и несколько уровней абстракции. NVMe общается с накопителем напрямую по PCIe, поэтому задержка одной операции — десятки микросекунд против ~0,1–0,2 мс у SATA SSD.

Для домашнего ноутбука разница между одной очередью и 64 тысячами почти незаметна. Для сервера, где параллельно к диску обращаются Nginx, PHP-FPM, MySQL и фоновые задачи, — принципиальна: запросы разных процессов не выстраиваются в один узкий коридор.

PCIe-линии: откуда берётся пропускная способность

NVMe-накопитель подключается через линии PCIe — те же, что использует видеокарта. Типичный серверный NVMe занимает четыре линии (x4):

  • PCIe 3.0 x4 — около 3,9 ГБ/с теоретического потолка, реальные диски читают до ~3 500 МБ/с;
  • PCIe 4.0 x4 — вдвое больше, топовые накопители выдают до ~7 000 МБ/с.

Сравните с 550–600 МБ/с у SATA — вот и «в 5–7 раз быстрее» ещё до разговора о случайном доступе. Важная оговорка: это скорость физического диска на узле. На VPS вы делите её с соседями по серверу, но и ваша доля от NVMe в разы больше, чем доля от SATA SSD.

SSD или NVMe: сравнение в цифрах

Ниже — типичные порядки величин для одиночных накопителей, без RAID и кеширования:

ПараметрHDD (SATA)SATA SSDNVMe SSD
Интерфейс и протоколSATA III, AHCISATA III, AHCIPCIe 3.0/4.0 x4, NVMe
Последовательное чтение100–200 МБ/с450–550 МБ/с3 000–7 000 МБ/с
Случайное чтение 4K~100–200 IOPSдесятки тысяч IOPSсотни тысяч IOPS
Задержка операции5–10 мс~0,1–0,2 мсдесятки микросекунд
Очереди команд1 × 321 × 32до 65 535 × 65 536

Ключевая строка — не последовательное чтение, а случайные операции блоками 4 КБ (random 4K). Большие файлы сервер читает подряд редко; базы данных, файлы сессий, кеш и логи — это тысячи мелких обращений в разные места диска одновременно.

Где разница видна на практике

Базы данных. MySQL или PostgreSQL при каждом запросе, не попавшем в буферный пул, идут на диск за страницами индексов и данных — это как раз случайное чтение 4K. На SATA SSD сложный запрос с десятком таких промахов занимает миллисекунды, на NVMe — сотни микросекунд. При сотнях запросов в секунду это разница между «летает» и «упёрлось в диск».

TTFB и скорость сайта. Некешированная страница WordPress — это 20–50 SQL-запросов плюс чтение десятков PHP-файлов. Быстрый диск снижает время до первого байта (TTFB), которое влияет и на поведенческие факторы, и на позиции в поиске. Остальные способы разгона разобрали в статье как ускорить WordPress.

Типовые серверные сценарии, где NVMe экономит время:

  • установка пакетов и обновления системы — apt распаковывает тысячи мелких файлов;
  • сборка Docker-образов и деплой приложений;
  • снятие и восстановление дампов базы, ротация и анализ логов;
  • бэкапы: скопировать 50–100 ГБ с NVMe можно в разы быстрее, а значит короче окно нагрузки;
  • очереди задач и брокеры сообщений с записью на диск.

Общее правило: чем больше в нагрузке мелких случайных операций, тем сильнее выигрыш. Поэтому «в 5–7 раз» на линейном чтении на практике превращается в кратный прирост отзывчивости всего сервера.

Как проверить диск на VPS: fio и dd

Внутри виртуальной машины диск обычно виден как /dev/vda (virtio), а не /dev/nvme0n1, поэтому по имени устройства тип накопителя не определить. Надёжный способ один — измерить. На Ubuntu 24.04 установите fio:

sudo apt update && sudo apt install -y fio

Случайное чтение 4K — главный тест для серверной нагрузки:

fio --name=randread --filename=test.fio --size=1G --rw=randread --bs=4k \
  --ioengine=libaio --direct=1 --iodepth=32 --numjobs=4 \
  --runtime=60 --time_based --group_reporting

Смешанная нагрузка 70 % чтения / 30 % записи — ближе к реальной работе базы данных:

fio --name=mixed --filename=test.fio --size=1G --rw=randrw --rwmixread=70 --bs=4k \
  --ioengine=libaio --direct=1 --iodepth=32 --numjobs=4 \
  --runtime=60 --time_based --group_reporting

Линейную скорость грубо оценит dd (флаг oflag=direct обходит кеш ОС, иначе намерите скорость оперативной памяти):

dd if=/dev/zero of=test.dd bs=1M count=1024 oflag=direct status=progress

После тестов удалите временные файлы: rm test.fio test.dd.

Ориентиры для чтения результатов: единицы тысяч IOPS на random 4K — это либо SATA SSD, либо жёсткий лимит, либо перегруженный узел. Десятки тысяч IOPS и выше на VPS — уверенный уровень NVMe. Полный набор тестов CPU, диска и сети собран в гайде как протестировать VPS.

Почему у дешёвых хостеров «SSD» может быть медленным

Слово «SSD» на витрине тарифов само по себе ничего не гарантирует. Типичные причины медленного диска:

  1. Лимиты IOPS. Гипервизор позволяет ограничить виртуальную машину, например, 500 IOPS — формально диск твердотельный, а по отзывчивости ближе к HDD.
  2. Оверселлинг. На один накопитель сажают столько клиентов, что очередь запросов постоянно забита. Симптом — скорость «плавает» по времени суток.
  3. Старые накопители. Изношенные SATA SSD потребительского класса заметно деградируют под постоянной записью.
  4. Сетевые хранилища. Данные едут по сети до СХД, и задержка каждой операции выше, чем у локального NVMe, даже при красивых паспортных IOPS.
  5. Контейнерная виртуализация. В OpenVZ/LXC «сосед» может занять дисковую очередь целиком; KVM изолирует ресурсы честнее — подробности в статье KVM или OpenVZ.

Вывод: выбирая тариф, смотрите не на слово «SSD», а на конкретику — тип накопителя, тип виртуализации и возможность быстро всё проверить. Чек-лист выбора — в статье как выбрать VPS-сервер. В тарифах Cheap-Host с этим прозрачно: NVMe стоит во всех конфигурациях, виртуализация — KVM с выделенными ресурсами, а сервер разворачивается за 45–60 секунд — можно сразу прогнать fio и убедиться в цифрах самостоятельно.

FAQ

Чем NVMe отличается от обычного SSD?

Оба — флеш-накопители без движущихся частей. Разница в подключении: обычный SSD работает через SATA и протокол AHCI с одной очередью команд, NVMe — напрямую через PCIe с тысячами параллельных очередей. Итог: 3 000–7 000 МБ/с против ~550 МБ/с и в разы меньшая задержка операций.

Увидит ли небольшой сайт разницу между SSD и NVMe?

Статический лендинг с включённым кешем — почти нет. Но любой проект с базой данных (WordPress, интернет-магазин, форум) быстрее отдаёт некешированные страницы, шустрее работает в админке и стабильнее переживает наплыв посетителей. Обновления, бэкапы и деплой ускоряются в любом случае.

Как убедиться, что на VPS действительно NVMe?

Только измерением: внутри виртуальной машины диск виден как виртуальное устройство (/dev/vda), и его имя ничего не скажет. Запустите fio-тест случайного чтения 4K: десятки тысяч IOPS и выше — уровень NVMe, единицы тысяч — повод задать хостеру вопросы.

Что такое IOPS и сколько их нужно моему проекту?

IOPS — число операций ввода-вывода в секунду. Небольшому сайту хватает нескольких тысяч, нагруженной базе данных нужны десятки тысяч. Запас не бывает лишним: пики трафика, бэкап или переиндексация съедают IOPS мгновенно.

NVMe — это дорого?

Уже нет. Накопители подешевели, и нормальная практика — ставить их во все тарифы без наценки. У Cheap-Host, например, NVMe есть даже в конфигурации за 450 ₽/мес.

Вывод

NVMe — не маркетинговая приставка, а другой класс дисковой подсистемы: прямое подключение по PCIe, до ~64 тысяч очередей команд вместо одной у AHCI и задержки в микросекундах. Для сервера это быстрые запросы к базе, низкий TTFB и предсказуемая работа под нагрузкой. Если для проекта нужен быстрый VPS — у Cheap-Host есть тариф Pro за 750 ₽/мес: 12 vCPU, 16 ГБ RAM и 128 ГБ NVMe на KVM-виртуализации, с безлимитным трафиком и выдачей сервера за минуту. Разверните, прогоните fio из этой статьи — и цифры всё скажут сами: cheap-host.onl.

Читайте также