Средство запуска Linux-приложений в машинных кодах x86 на компьютерах архитектуры Эльбрус.
Вы здесь
Двоичный транслятор приложений «RTC» (ТВГИ.00508-01)
Компонент системы двоичной трансляции, известный как 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.