Вы здесь

Двоичный транслятор приложений «RTC» (ТВГИ.00508-01)

Средство запуска Linux-приложений в машинных кодах x86 на компьютерах архитектуры Эльбрус.

Информация
Возможности
Ограничения
Поддержка

Компонент системы двоичной трансляции, известный как RTC, позволяет запускать на компьютере архитектуры Эльбрус под управлением операционной системы «Эльбрус Линукс» (или иной ОС семейства Linux) прикладные программы для Linux в машинных кодах x86 или x86-64 — например, 1С:Предприятие или Oracle Database — без перекомпиляции из исходных текстов.

Трансляция проходит в режиме реального времени, «на лету», с адаптивной многопроходной оптимизацией, что в сочетании с аппаратными средствами поддержки трансляции, заложенными в архитектуру Эльбрус и обеспечивающими низкие накладные расходы, даёт высокую скорость работы гостевых приложений. При этом системные вызовы ядра Linux обрабатываются ядром хозяйской системы, что также снижает накладные расходы по сравнению с запуском целой системы x86 Linux через транслятор уровня системы.

Категория Особенность / возможность Примечание
система команд Реализована поддержка базового набора инструкций x86 и x86-64, а также некоторых расширений, например SSE. Конкретный набор поддерживаемых инструкций определяется возможностями аппаратуры того или иного процессора.
системные вызовы Поддерживаются гостевые приложения, использующие библиотеку libc, совместимую с версией ядра Linux, работающего на хозяйской платформе. Транслятор приложений при работе адаптирует системные вызовы приложения гостевой платформы в системные вызовы ядра ОС Эльбрус.
Поддерживается проверенный набор ioctl-запросов, который может быть расширен по запросам пользователей. Транслятор приложений при работе адаптитрует структуры данных в гостевых запросах к виду, принятому в хозяйской системе.
файловая система Статически скомпонованные программы могут быть запущены сами по себе. Динамически скомпонованные программы могут быть запущены в подходящем окружении, включающем как минимум все необходимые им динамически подгружаемые библиотеки. Определить перечень необходимых гостевых библиотек можно программой ldd.
Гостевым окружением может служить набор файлов проинсталлированной обычным способом ОС Linux x86 — как скопированный в хозяйскую файловую систему, так и подключённый напрямую с накопителя от x86-компьютера или компьютера Эльбрус под управлением транслятора системы (Lintel). На практике в той или иной степени могут быть работоспособны программы из состава Debian, Ubuntu, CentOS, Fedora, OpenSUSE и других дистрибутивов GNU/Linux. Официально в качестве гостевого окружения поддерживается только ОС Эльбрус, так как гарантировать совместимость произвольно взятой ОС невозможно. Для удобства пользователей, готовый архив с гостевым окружением ОС Эльбрус может быть предоставлен по запросу.
В гостевом окружении доступны каталоги /proc (процессы), /dev (устройства) и /sys (ядро) из хозяйской системы. Перечень пробрасываемых каталогов может быть расширен при помощи скрипта bind.sh — текущая версия транслятора позволяет задать до 64 директорий и файлов.
Категория Особенность / ограничение Примечание
система команд Не реализована поддержка инструкций AVX, AVX2, AVX-512 и др. Реализация AVX и AVX2 возможна в будущих версиях транслятора. Реализация AVX-512 требует большого объёма регистровой памяти, которого даже в Эльбрус-8СВ в обрез хватит на 2 набора (первый нужен для контрольных точек, второй для текущих преобразований).
Для процессоров Эльбрус-4С не реализована поддержка CMPXCHG16B. Аппаратура процессора Эльбрус-4С не позволяет реализовать поддержку данной инструкции.
Команда lscpu из гостевого окружения не отображает флаги возможностей процессора, как и файл /proc/cpuinfo. Некоторые программы (скрипты) из-за этого считают, что процессор не поддерживает SSE или иные наборы инструкций. Каталог /proc пробрасывается в гостевую систему из хозяйской, и программа lscpu читает данные оттуда. Надёжный метод получения информации об x86-процессоре — непосредственный вызов инструкции cpuid.
отладка Текущая реализация транслятора не поддерживает системный вызов ptrace. Через транслятор приложений могут не работать программы-отладчики.
Текущая реализация транслятора не поддерживает работу гостевого кода в режиме с установленным флагом ловушки (флаг TF регистра флагов). Данное ограничение может быть устранено в будущих версиях транслятора.
системные вызовы Запускаемое приложение должно использовать библиотеку libc, совместимую с версией ядра Linux, работающего на хозяйской платформе. Это требование продиктовано тем, что транслятор приложений при работе адаптирует системные вызовы приложения гостевой платформы в системные вызовы ядра ОС Эльбрус, то есть он закладывается на принятые в хозяйской системе стандарты системных вызовов.
При работе с аппаратурой не допускается прямых (через порты ввода-вывода или память) обращений к устройствам — допускается работа только через системный вызов ioctl. Транслятор приложений лишь адаптрирует системные вызовы ядра Linux. Задача по работе с аппаратурой напрямую, которая в Linux возлагается на ядро (модули ядра), транслятором приложений не решается.
В трансляторе имеется поддержка для ограниченного набора ioctl-запросов. Для большинства запросов в качестве одного из аргументов передается указатель на некоторую структуру данных, которую зачастую необходимо преобразовывать в вид, понятный ядру хозяйской платформы. Реализация каждого такого преобразования требует тщательной проверки, которая невозможна в отсутствие соответствующей аппаратуры у разработчиков транслятора. Список поддерживаемых ioctl-запросов может быть расширен по запросам пользователей.
оперативная память Некоторые хозяйские операционные системы устанавливают консервативную политику использования памяти, что может приводить к падениям транслятора, в том числе с выдачей сообщений с инструкциями по настройке системных параметров. Следует установить параметр overcommit_memory (в папке /proc/sys/vm) равным 0.
файловая система Пользователь, запускающий приложение через транслятор, должен иметь права на чтение исполняемого файла, а не только на запуск. Транслятор приложений — это обычная пользовательская программа, функционирующая в хозяйской операционной системе. Гостевое приложение запускается хозяйской системой не напрямую, а через транслятор под учётной записью вызывающего пользователя, и тот должен иметь возможность прочитать файл.
По умолчанию часть директорий, расположенных вне корня гостевой файловой системы, оказывается доступной при работе из гостевого окружения — это каталоги /proc, /dev и /sys. Перечень пробрасываемых каталогов может быть расширен при помощи скрипта bind.sh — текущая версия транслятора позволяет задать до 64 директорий и файлов.
системные службы Необходимо воссоздать весь набор системных служб (из нативных или транслируемых программ), на которые полагается гостевое приложение. Если гостевое приложение рассчитано на работу с iBus, например, то данная сервис должен предоставляться либо нативными средствами, либо также через транслятор. Эта особенность не специфична для транслятора и также справедлива для chroot.
Система управления гостевыми службами должна соответствовать хозяйской системе. Если гостевая служба предусматривает запуск через systemd, а хозяйская система использует sysvinit, то запуск окажется невозможен. Эта особенность не специфична для транслятора и также может иметь место при использовании chroot.

Дистрибутивы

Транслятор поставляется в составе операционных систем для компьютеров архитектуры Эльбрус. Если в имеющейся ОС такой компонент отсутствует, либо сама ОС отсутствует, то получить транслятор отдельно можно на сервере поддержки — в формате установочного пакета формата Deb (для выбора нужного варианта пакета под имеющийся процессор см. графу «deb-arch» в статье базы знаний «Идентификаторы процессоров»); документация опубликована там же в формате PDF.

Для установки пакета используйте команду:

dpkg -i имя_файла_пакета.deb

После установки, копия документации будет доступна в каталоге /opt/mcst/rtc/doc.