SSD Nodes Learn 🎉 VPS от $5.50/мес
Руководства Matt ConnorАвтор: Matt Connor

ARM VPS против x86: стоит ли переходить

Сравнение производительности и стоимости ARM и x86 VPS. Узнайте, как проверить совместимость вашего стека с архитектурой arm64 с помощью команд uname -m и dpkg --print-architecture.

Что меняется при переходе на ARM VPS

ARM VPS работает на том же Linux и с тем же Nginx, что и x86 VPS, и обычно стоит дешевле в расчете на ядро. Риск при переходе заключается в совместимости. Программа, скомпилированная для x86-64, не может работать на arm64, поэтому каждый компонент вашего стека должен иметь сборку для arm64 или быть доступным для пересборки.

Большинство современных стеков проходят эту проверку без дополнительных усилий. Проблемы возникают в двух случаях: образы контейнеров, собранные только под одну архитектуру, и проприетарное ПО без версии для arm64. Приведенные ниже команды помогут ответить на оба вопроса для вашего стека до того, как вы оплатите инстанс. Если вы еще определяетесь с типом необходимого сервера, начните с того, что такое VPS и чем он отличается от виртуального хостинга.

arm64, aarch64, amd64: что означают эти названия

Выполните эти команды на любом экземпляре перед началом работы.

uname -m
dpkg --print-architecture
lscpu | head -n 12
getconf PAGESIZE

uname -m выводит aarch64 на машине с архитектурой ARM и x86_64 на машине с Intel или AMD. dpkg --print-architecture выводит arm64 и amd64 для тех же двух типов машин. Оба ответа верны. Ядро Linux и система пакетов Debian выбрали разные названия для одного и того же набора инструкций, поэтому aarch64 и arm64 означают одно, а x86_64 и amd64 — другое. Docker использует названия в стиле Debian, поэтому платформа образа отображается как linux/arm64.

На arm64 в файле /proc/cpuinfo отсутствует строка model name. Вместо неё вы увидите поле Features, а аппаратное ускорение шифрования будет указано в виде флагов, таких как aes pmull sha1 sha2. Это криптографические расширения ARMv8, которые выполняют ту же задачу, что и AES-NI на процессорах Intel и AMD: они обеспечивают аппаратное ускорение для TLS (transport layer security) и шифрования дисков. В разделе Проверка аппаратного ускорения AES на VPS описано, как провести тестирование для обеих архитектур.

Почему контейнеры ломаются первыми и как выглядит эта ошибка

В манифесте каждого Docker-образа записана архитектура, для которой он был собран. Если вы скачаете образ, содержащий только манифест amd64, на хост с архитектурой arm64, команда pull завершится успешно. Ошибка возникнет при попытке запуска первого процесса:

WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
exec /usr/local/bin/docker-entrypoint.sh: exec format error

exec format error означает, что ядро отказывается выполнять файл, так как в его заголовке ELF (executable and linkable format) указан тип машины, который данный процессор не поддерживает. Никакие настройки это не исправят. Инструкции отсутствуют на аппаратном уровне.

Проверяйте манифест перед развертыванием:

docker buildx imagetools inspect nginx:1.27

Вывод содержит по одной строке Platform: для каждого образа в списке манифестов, например, linux/amd64 и linux/arm64. Если linux/arm64 отсутствует, этот тег не запустится на ARM VPS. docker manifest inspect --verbose nginx:1.27 показывает ту же информацию, но Docker помечает docker manifest как экспериментальную команду, поведение которой может измениться в будущих релизах, поэтому лучше использовать imagetools.

Для образов, которые вы собираете самостоятельно, выполняйте сборку под обе архитектуры одной командой и отправляйте (push) список манифестов:

docker buildx build --platform linux/amd64,linux/arm64 -t registry.example.com/app:1.4 --push .

Для сборки под чужую архитектуру на одном хосте требуется эмуляция QEMU в пользовательском режиме, зарегистрированная в обработчике ядра binfmt_misc:

docker run --privileged --rm tonistiigi/binfmt --install all

Используйте эмуляцию для сборки и тестирования. Не используйте её для обслуживания трафика. В документации Docker указано, что эмуляция с помощью QEMU «может быть значительно медленнее нативных сборок, особенно для ресурсоемких задач, таких как компиляция, сжатие или распаковка», поэтому эмулируемый x86-сервис на ARM-инстансе сведет на нет всю экономию, ради которой вы совершили переход. Настройка хоста для нативного случая идентична для обеих архитектур: запуск Docker на VPS описывает этот процесс, а существующий файл Compose будет работать без изменений, как только каждый образ в нем получит манифест arm64.

Будут ли нужные мне пакеты доступны для arm64?

Ubuntu и Debian собирают практически весь архив для архитектуры arm64, поэтому apt install nginx postgresql redis-server работает одинаково на обеих архитектурах. Проблемы могут возникнуть только со сторонними репозиториями.

Запросите информацию напрямую через apt на ARM-инстансе:

apt-cache policy some-vendor-agent
apt-get install -s some-vendor-agent

Сообщение apt-cache policy с текстом Candidate: (none) означает, что ни один из подключенных репозиториев не содержит сборку этого пакета для данной архитектуры. Команда apt-get install -s имитирует установку, не внося изменений, и в аналогичном случае завершается с выводом E: Unable to locate package.

Внимательно изучите вывод команды apt update, вместо того чтобы пролистывать его. Репозиторий поставщика, предназначенный только для amd64, прямо указывает на это:

N: Skipping acquire of configured file 'main/binary-arm64/Packages' as repository 'https://repo.example.com/apt stable InRelease' doesn't support architecture 'arm64'

Репозиторий настроен и доступен, но в нем нет ничего, что можно установить на эту машину. Проверьте также саму запись в файле источников. Строка, зафиксированная параметром [arch=amd64], игнорируется на хосте arm64, поэтому пакет кажется отсутствующим, хотя реальная причина кроется в этой привязке.

Какие рабочие нагрузки безопасны, а какие требуют предварительной проверки

Интерпретируемые среды выполнения и байт-код по своей природе переносимы. PHP, Python, Ruby и Node.js имеют пакеты для arm64 в основных дистрибутивах. Go и Rust поддерживают кросс-компиляцию под arm64 путем установки одной цели. Стек LEMP, API на Node.js, бинарный файл Go за Nginx или база данных Postgres — это стандартные задачи для arm64.

Компилятор с опережением (JIT) создает машинный код во время выполнения программы, поэтому ему требуется генератор кода для целевой архитектуры. Текущие версии поддерживают его: OpenJDK, .NET, движок V8 внутри Node.js и PyPy — все они поддерживают arm64 на Linux. Настоящую опасность представляют зафиксированные старые версии. Скрипт развертывания, который устанавливает версию среды выполнения многолетней давности, следует проверить по примечаниям к выпуску на предмет поддержки aarch64, а не предполагать, что он будет работать.

Библиотеки, содержащие написанный вручную ассемблерный код x86 или интринсики SSE и AVX, являются менее очевидной проблемой. У большинства из них есть путь выполнения через NEON (набор векторных инструкций ARM) или обычный резервный вариант на C, поэтому они компилируются и работают. Производительность может отличаться от сборки для x86 в любую сторону. Измерьте её на своем экземпляре, вместо того чтобы делать прогнозы на основе статей.

Программное обеспечение с закрытым исходным кодом — это реальное препятствие. Агент мониторинга от вендора, лицензированный драйвер базы данных, коммерческая панель управления или антивирусный демон поставляются в виде скомпилированного бинарного файла, и если вендор не выпустил сборку для arm64, вы ничего не сможете с этим поделать. cPanel и WHM — самый наглядный пример в хостинге: системные требования указывают x86_64 и не упоминают ARM, поэтому сервер с панелью управления остается на x86 (проверено в августе 2026 года, стоит перепроверить на странице требований самого вендора). Если это единственное, что вас сдерживает, альтернативы cPanel, которые стоит запускать на VPS — это то, с чего нужно начать, проверяя поддержку архитектуры для каждой из них таким же образом.

Ядра и размер страницы: в чем еще различаются ARM-инстансы

Серверы x86-64 практически взаимозаменяемы. ARM-серверы менее однородны, и различия между ними скрыты на уровне ниже вашего приложения.

Размер страницы памяти — это параметр, который влияет на работу в production. Большинство ядер arm64 используют страницы по 4 KiB, как и x86-64. Некоторые используют 64 KiB. В Red Hat Enterprise Linux 8 для aarch64 по умолчанию поставлялось ядро с размером страницы 64 KiB, а в RHEL 9 значение по умолчанию вернули к 4 KiB, сохранив отдельный пакет kernel-64k для рабочих нагрузок, требующих большего размера. Размер страницы 64 KiB повышает минимальный объем потребляемой памяти для процесса с множеством мелких отображений, так как минимальный блок, который может выделить ядро, становится в шестнадцать раз больше. Запустите getconf PAGESIZE на инстансе и узнайте точное значение, вместо того чтобы полагаться на предположения.

Стоит знать о нескольких менее значимых различиях. В архитектуре arm64 нет пакетов микрокода процессора для операционной системы, поэтому обновления прошивки поступают от вашего провайдера, а не через apt. ARM-серверы загружаются через UEFI (unified extensible firmware interface) и описывают оборудование через ACPI (advanced configuration and power interface). Некоторые функции x86 не имеют аналогов в ARM, включая шифрование памяти AMD SEV и технологию виртуализации GPU Intel GVT-g.

Стала ли серверная платформа ARM зрелой?

В плане программного обеспечения — да. Дистрибутивы Debian, Ubuntu, Fedora и RHEL выпускают полноценные сборки для arm64, а официальные образы на Docker Hub по умолчанию являются мультиархитектурными.

Самым ярким недавним подтверждением стал Proxmox. 5 августа 2026 года Proxmox анонсировал первую официально поддерживаемую версию Proxmox Virtual Environment для arm64 — 9.2, которая использует общие репозитории пакетов и цикл выпуска с версией для x86-64. Она построена на базе Debian 13.5 с ядром Linux 7.0, QEMU 11.0, LXC 7.0 и ZFS 2.4, а конфигурация и инструментарий идентичны версии для x86-64, за исключением небольшого набора архитектурно-зависимых элементов.

Ознакомьтесь с предостережениями в том же анонсе, так как они показывают, насколько узким остаётся список официально поддерживаемого серверного оборудования ARM. Proxmox подтвердил совместимость с системами NVIDIA Grace и NVIDIA Vera с первого дня после совместного тестирования с NVIDIA и Supermicro на оборудовании Grace Hopper. Другое оборудование на базе UEFI архитектур ARMv8-A и ARMv9-A поддерживается по мере возможности. Одноплатные компьютеры, использующие только Device tree, такие как Raspberry Pi, не поддерживаются. Гостевая система запускается только на узле своей архитектуры, «живая» миграция работает только между узлами одной архитектуры, а кластеры со смешанной архитектурой официально не поддерживаются.

Такова объективная ситуация на август 2026 года. Тот факт, что разработчик гипервизора выпускает версию arm64 с тем же жизненным циклом, что и x86-64, — это реальный прогресс для платформы. Список оборудования, поддерживаемого с первого дня, ограничен двумя семействами процессоров.

Контрольный список перед фиксацией изменений

  1. Запустите uname -m на тестовом экземпляре и убедитесь, что он выводит aarch64.
  2. Запустите docker buildx imagetools inspect для каждого образа в вашем файле Compose и убедитесь в наличии строки платформы linux/arm64 для каждого из них.
  3. Запустите apt update на ARM-экземпляре и ознакомьтесь с каждым предупреждением Skipping acquire, которое он выводит.
  4. Откройте страницу загрузки для каждого проприетарного агента, от которого вы зависите, и найдите сборку arm64 или aarch64 по названию.
  5. Запустите getconf PAGESIZE и запишите результат перед определением объема памяти.
  6. Проведите собственное тестирование производительности как на ARM-плане, так и на x86-плане, между которыми вы выбираете.

Чего не утверждает эта статья

Мы не будем предоставлять вам соотношение цены и производительности для ARM и x86. Стоимость одного ядра различается в зависимости от провайдера и тарифного плана, а показатели, измеренные на чужом оборудовании, не гарантируют аналогичных результатов у вас. Вместо этого проведите измерения самостоятельно. Наше руководство по тестированию производительности VPS описывает работу с sysbench и fio с использованием воспроизводимой методики, а сколько на самом деле стоит VPS затрагивает финансовую сторону сравнения. Выбор системы хранения данных не зависит от архитектуры процессора, и сравнение NVMe и SATA SSD на VPS посвящено этой части вопроса. Запустите одинаковые тесты на обоих тарифах, по возможности используя вашу реальную рабочую нагрузку, и принимайте решение на основе полученных цифр.

FAQ

Будут ли мои Docker-контейнеры работать на ARM VPS?

Они будут работать, если каждый образ в стеке содержит запись linux/arm64 в своем манифесте. Проверьте каждый образ с помощью docker buildx imagetools inspect <image> и найдите строку Platform: linux/arm64. Официальные образы на Docker Hub обычно поддерживают несколько архитектур. Образы от небольших поставщиков, а также образы, собранные вами на машине x86, часто не имеют такой поддержки. Для собственных образов выполните пересборку с помощью docker buildx build --platform linux/amd64,linux/arm64 ... --push, чтобы один тег подходил для обеих архитектур.

Что означает exec format error на ARM-сервере?

Ядро попыталось выполнить бинарный файл, ELF-заголовок которого указывает на другой тип архитектуры, и получило отказ. На хосте arm64 это почти всегда означает, что используется бинарный файл или образ контейнера для x86-64. Docker сначала выводит предупреждение о том, что запрошенная платформа образа linux/amd64 не совпадает с обнаруженной платформой хоста linux/arm64/v8. Решение заключается в сборке под нужную архитектуру. Никакие изменения конфигурации не позволят бинарному файлу x86-64 работать на ARM в нативном режиме.

Являются ли arm64 и aarch64 одним и тем же?

Да. Это два названия для 64-битного набора инструкций ARM. Ядро сообщает aarch64 через uname -m, в то время как пакеты Debian и Ubuntu, а также строки платформ Docker используют arm64. Такое же разделение существует и для другой стороны, где uname -m сообщает x86_64, а пакеты используют amd64. Если на странице загрузки предлагаются только файлы aarch64, это подходящие файлы для машины, которую dpkg --print-architecture называет arm64.

Быстрее ли ARM VPS, чем x86 VPS?

На этот вопрос нет общего ответа, и любое соотношение, которое вы встретите, было измерено на оборудовании, которое не является вашим. Скорость зависит от конкретной модели процессора, количества предоставленных ядер, того, как провайдер управляет конкуренцией между арендаторами, и того, насколько эффективно ваша рабочая нагрузка использует векторные инструкции. Проведите бенчмарк для двух тарифов, между которыми вы выбираете, по возможности используя вашу собственную рабочую нагрузку, и сравните полученные показатели.

Что нужно проверить перед переносом продуктового сервера на arm64?

Выполните четыре проверки в указанном порядке. Убедитесь, что каждый образ контейнера имеет манифест arm64. Убедитесь, что каждый сторонний репозиторий apt публикует binary-arm64. Убедитесь, что для каждого агента с закрытым исходным кодом есть версия для aarch64. Затем запустите getconf PAGESIZE на целевом экземпляре, так как ядро с размером страницы 64 KiB меняет объем потребляемой памяти для процессов с большим количеством мелких отображений. Любой пункт, не прошедший одну из этих четырех проверок, является основанием для того, чтобы оставить конкретный сервер на x86.

#arm64#cpu-architecture#vps#docker#performance