Больше информации на официальном сайте МЦСТ.
Также был анонсирован выпуск нового транслятора приложений rtc-5.0 в составе дистрибутива(на финишной прямой).
Для процессоров Эльбрус V6 включен режим расположения вторичного пространства (x86-memory) в начале виртуального пространства компилятора приложений. Для этого пришлось rtc сделать 64-битным (но только для e2c3 и e16c). Такой подход убирает часть лишних преобразований адресных аргументов системных вызовов.
Для более старых архитектур (<= V5) по-прежнему вторичное пространство
расположено высоко. Аппаратура автоматически при использовании сегментных операций обращения в память прибавляет к указанному в команде адресу смещение 0x100000000000. Из-за этого все аргументы системных вызовов, которые содержат адреса (x86-адреса), приходится преобразовывать - за аппаратуру прибавлять смещение, а в случае 32-битных x86-приложений использовать 64-битные системные вызовы.
В ядре ОС реализована специальная файловая система на базе proc,
позволяющая скрыть служебные процессы и потоки компилятора приложений от x86-приложений. Также обработка стандартных файлов файловой системы proc (например, ссылки /proc/self/exe или содержимого /proc/self/maps) производится в ядре. x86-приложение не должно заметить ни одного следа присутствия компилятора приложений через подмененную файловую систему proc.
Поддержан системный вызов unshare, необходимый для запуска docker. Теперь докер-контейнеры в кодах х86/х86-64 можно запускать целиком через компилятор приложений.
После установки компилятора приложений появилась возможность непосредственного запуска x86-приложений из нативной командной строки. По
умолчанию так можно запускать лишь статические x86-приложения, но при желании
можно легко настроить и запуск динамических приложений (через конфигурационный файл default.conf), но как и прежде придется развернуть подходящую гостевую файловую систему.
В ядро добавлены специальные скрытые файловые дескрипторы, которые не видны в файловой системе proc (даже нативной), они используются для логирования, общения со служебными процессами/потоками, запуска x86-приложения. Опять же для возможности запуска docker'а потребовалось загружать в память x86-приложение не по пути (по которому открытый и удаленный файл оказывался недоступным), а через файловый дескриптор (который по-прежнему существовал в ядре).
За счет использования mnt namespace'ов в компиляторе приложений более не требуется следить за x86-путями, это автоматически делает ядро. Старт бинарного компилятора реализует полноценный chroot, из которого в нативный корень больше уже не выбраться. Это потребовало на стороне ядра реализовать дополнительные структуры данных, в которых хранится информация о компиляторах приложений, ведь они расположены вне x86-мира, но по-прежнему должны быть доступны для использования при выполнении x86-execve.
В ядро добавлены специфические ресурсные лимиты. Так ulimit -s при запуске
под бинарным компилятором повлияет только на ограничение по размеру x86-стека, а не нативного (то есть не на стек компилятора приложений). Помимо стека учтен и лимит на размер виртуальной памяти.
Добавлена возможность сброса x86-dump'ов памяти при падении x86-приложений
из-за соответствующих сигналов. Также пользователям будет доступен более
широкий диапазон средств, позволяющий проводить предварительную отладку по
обнаруженным проблемам (в документации про это будет новый раздел)
Один из главных эффектов для пользователей: в новом rtc-5.0 поддержана работа гостевых Яндекс-Браузера и Chromium.
Обновился двоичный транслятор уровня системы - Lintel 5.0
Изменения и доработки Lintel 5.0:
Добавлена поддержка встроенного serial-устройства(доступен в виде одного COM-порта)
Добавлена поддержка нескольких контроллеров периферийных интерфейсов(проверена на ограниченном наборе машин)
Добавлена поддержка MSI-X прерываний
Добавлена поддержка POST Memory Management(PMM) в x86bios
Добавлена возможность удаленной работы с программой x86bios через COM-соединение
Добавлена возможность запуска бинарного компилятора с USB-устройства
Добавлена возможность выбора USB-устройства для автоматической загрузки
Доработан механизм эмуляции сетевого контроллера в режиме Intel PRO
Исправлены ошибки надежности
Разработка нативного (языкового) компилятора
В уходящем году основные усилия были сосредоточены на повышении качества внутреннего тестирования надёжности компилятора, введены новые способы тестирования. Это критически важно ввиду разрастания кодовой базы и поддержании надёжности на возрастающем количестве поколений архитектуры Эльбрус. Сборка самого компилятора теперь проводится в режиме Технологии безопасных вычислений («защищённый режим»). Также был проведён ряд важных, но внешне малозаметных изменений «под капотом», их плоды должны стать ощутимыми в 2024 году.
В конце 2023 г. создана текущая передовая ветка LCC 1.28. CLang из LLVM-13 доведён до состояния высокого качества.
За год только за счёт повышения качества компилятора достигнут средний прирост производительности 2-3% на разных пакетах тестов.
Расширены возможности по тестированию приложений/поиску ошибок при помощи Технологии безопасных вычислений («защищённый режим»), программных санитайзеров (поддержан Address Sanitizer 11.0)
Поддержаны kernel-headers от linux-6.1, binutils-2.41, glibc-2.38
Поддержано следующее поколение системы команд Эльбрус (v7) для раннего тестирования эмуляторов и прототипов разрабатываемых процессоров
К библиотеке EML за год добавлено 900 функций (в сумме поддержано 3601 функция). Поддержаны LAPACK-3.11, CLAPACK/LAPACKE. Поддержан OpenMP 4.0, начали работу над OpenMP 4.5, обеспечена совместимость с gfortran-13.1
Основные планы на 2024
В конце года планируется к формированию ветка LCC 1.29.
Введение технологий для широкого практического применения различных профилей при компиляции: траекторный профиль, семплинговый профиль, частичное доверие профилю, и другие.
Поддержка LTO в компиляторе LCC
Поддержка LLVM-17
Поддержка нейросетевых библиотек, в том числе с JIT-компиляцией.
Вы можете изучать предупреждения, ошибки и ассемблерный код, выдаваемые компилятором, а также просматривать результат выполнения скомпилированной программы для архитектуры Эльбрус(E2K). Поддерживаются языки, C++, Fortran, Rust.
К серверам на процессорах архитектуры Эльбрус открылся бесплатный удаленный доступ, которым вы можете воспользоваться и возможно портировать что то полезное.
Данное руководство содержит основные материалы для обучения эффективному программированию на платформе Эльбрус и применимо на любом варианте Linux-подобной операционной системы.