ARM VPS против x86: отличия и проверка совместимости
Узнайте, чем отличается ARM VPS от x86 и как проверить ваш стек перед миграцией. Разбираем команды uname -m и dpkg --print-architecture для выявления проблем с arm64.
Что меняется при переходе на 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 PAGESIZEuname -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 errorexec 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.
Для образов, которые вы собираете самостоятельно, выполняйте сборку под обе архитектуры одной командой и отправляйте список манифестов:
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 через установку одной цели (target). Стек LEMP, Node API, бинарный файл Go за Nginx или база данных Postgres — это стандартные задачи для arm64.
JIT-компилятор (just-in-time) генерирует машинный код во время выполнения программы, поэтому ему необходим генератор кода для целевой архитектуры. Современные версии поддерживают его: OpenJDK, .NET, движок V8 внутри Node.js и PyPy работают на arm64 в Linux. Основную опасность представляют устаревшие версии, зафиксированные в конфигурациях. Если скрипт развертывания устанавливает версию среды выполнения, выпущенную несколько лет назад, следует проверить примечания к выпуску на предмет поддержки aarch64, а не полагаться на то, что она заработает сама.
Библиотеки, содержащие написанный вручную код на ассемблере x86 или интринсики SSE и AVX, представляют собой менее очевидную проблему. Большинство из них имеют путь выполнения через NEON (векторный набор инструкций ARM) или обычный fallback на 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 на инстансе и узнайте точное число, вместо того чтобы полагаться на предположения. Размер страницы — не единственное решение ядра, которое затрагивает вас, поскольку версия, поставляемая провайдером, также определяет планирование задач на ядрах процессора, и планирование с учетом кэша, добавленное в Linux 7.2, одинаково работает как на arm64, так и на x86-64.
Стоит знать о нескольких менее значимых различиях. На 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. Другое оборудование на базе ARMv8-A и ARMv9-A с поддержкой UEFI получает поддержку по мере возможности. Одноплатные компьютеры, использующие только device tree, такие как Raspberry Pi, не поддерживаются. Гостевая система работает только на узле своей архитектуры, «живая» миграция возможна только между узлами одной архитектуры, а кластеры со смешанной архитектурой официально не поддерживаются.
Такова объективная ситуация на август 2026 года. Тот факт, что разработчик гипервизора выпускает версию для arm64 с тем же жизненным циклом, что и для x86-64, — это реальный прогресс для платформы. Список оборудования, поддерживаемого с первого дня, ограничен двумя семействами процессоров.
Контрольный список действий перед коммитом
- Запустите
uname -mна тестовом экземпляре и убедитесь, что он выводитaarch64. - Запустите
docker buildx imagetools inspectдля каждого образа в вашем файле Compose и убедитесь в наличии строки платформыlinux/arm64для каждого из них. - Запустите
apt updateна экземпляре ARM и изучите каждое предупреждениеSkipping acquire, которое он выводит. - Откройте страницу загрузки для каждого проприетарного агента, от которого вы зависите, и найдите сборку для arm64 или aarch64 по названию.
- Запустите
getconf PAGESIZEи зафиксируйте ответ перед тем, как определять объем памяти. - Запустите собственный тест производительности как на плане 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.