МЦСТ выпустила важные обновления ПО

МЦСТ выпустила важные обновления ПО

Эльбрус Линукс 8.0.

Введены следующие улучшения:

  • Компиляторы: lcc-1.27.10, llvm13.
  • Ядро: 5.10.0-1.12
  • Основная библиотека: glibc-2.35
  • Добавление gtk4+-4.6.6, ceph-14.2.22
  • Обновление базовых компонентов: zlib, readline, strace, expat, libcap, dpkg, krb5, lvm2, gc, guile, ncurses, libgpg-error, gnupg, apt, autoconf, make, meson, python3, xorg-server

Больше информации на официальном сайте МЦСТ. Также был анонсирован выпуск нового транслятора приложений rtc-5.0 в составе дистрибутива(на финишной прямой).

Двоичные компиляторы – транслятор приложений 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 Онлайн компилятор e2k

Вы можете изучать предупреждения, ошибки и ассемблерный код, выдаваемые компилятором, а также просматривать результат выполнения скомпилированной программы для архитектуры Эльбрус(E2K). Поддерживаются языки, C++, Fortran, Rust.

Доступ к серверам Эльбрус Доступ к серверам Эльбрус

К серверам на процессорах архитектуры Эльбрус открылся бесплатный удаленный доступ, которым вы можете воспользоваться и возможно портировать что то полезное.

Руководство по эффективному программированию на e2k

Данное руководство содержит основные материалы для обучения эффективному программированию на платформе Эльбрус и применимо на любом варианте Linux-подобной операционной системы.

Телеграмм канал Эльбрус

Чат про администрирование и создание программ на платформе Эльбрус(E2K).