LinuxDoc.ru - Новости Linux - Анализ использования ассемблерных вставок в коде открытых проектов

Анализ использования ассемблерных вставок в коде открытых проектов

LinuxDoc.Ru,
Стив Макинтаир (Steve McIntyre), несколько лет занимавший пост лидера проекта Debian, опубликовал результаты исследования интенсивности использования ассемблерного кода в открытых проектах. Исследование проведено инженерной группой консорциума Linaro, занимающегося адаптацией и оптимизацией открытых проектов и Linux для платформы ARM, совместно с разработчиками дистрибутивов Ubuntu и Fedora.

Исследование нацелено на выявление областей, требующих доработки в процессе внедрения новой 64-разрядной архитектуры ARMv8 (AArch64) и серверных систем на базе архитеутуры ARMv7. Наличие специфичных для различных архитектур ассемблерных вставок является одним из признаков необходимости портирования кода для использовании на новой архитектуре или проведения дополнительных оптимизаций. В итоге, после изучения кода всех пакетов в репозиториях Ubuntu и Fedora, был сформирован список из 1435 пакетов, включающих ассемблерные вставки и проведён анализ где и для чего они используются и действительно ли подобные вставки необходимы.

Основные выводы:

Подавляющее большинство приложений в репозиториях не требуют отдельного портирования. Например, из более 20 тысяч src-пакетов в репозитории Ubuntu 13.04 только около 1200 (6%) содержат ассемблерные вставки.

Большинство пакетов с ассемблерными вставками будут работать на других архитектурах без дополнительного портирования так как ассемблерный код используется только для оптимизации и предусматривает наличие замены на C/C++ или связан с реализацией дополнительных возможностей, что не блокирует сборку приложения на новых архитектурах.

Большая часть ассемблерных вставок малозначительна и не создаёт должного увеличения производительности. Часто разработчики пытаются использовать тривиальный код с надеждой увеличить скорость выполнения тех или иных действий, но при этом общий эффект подавляется другими узкими местами.

Наименее приоритетными категориями портирования называются игры и десктоп-приложения. В первую очередь планируется портировать системные компоненты, библиотеки и базовые инструменты. Среди пакетов, требующих портирования, отмечаются: ядро, gcc, (e)glibc, klibc, libffi, binutils, gdb, device-tree-compiler, libunwind, openjdk, mpfr, llvm, gmp. Будут работать, но требуют реализации дополнительных оптимизаций grub2, TBB, openssl, libatomic-ops, libgcrypt, php, postgres, mysql, libaio. Кроме того, в первоочерёдный список портирования попали zlib, libgc, libjpeg, dlmalloc, nss и gnulib.

В списке основных проблем упоминается необдуманное копирование оптимизаций из одного приложения в другое, во многих пакетах они применены не к месту и не приводят к ожидаемому разработчиками эффекту. Часто подобным образом расползается по проектам код, содержащий ошибки. Другой проблемой является встраивание библиотек в программу, вместо их использования в качестве зависимости. Некоторые ассемблерные вставки нельзя трактовать иначе, как код, забытый десятилетия назад. Например, был обнаружен код для систем Vax, образца 1970-х годов. Также во многих местах ассемблерный код присутствует в коде, но не используется.

Выявленные ассемблерные компоненты были разделены на следующие категории (проценты указаны относительно числа пактов с ассемблерными вставками):

38.1% пакетов используют ассемблерный код для выполнения различных низкоуровневых операций, таких как прямое взаимодействие с оборудованием и определение типа аппаратного обеспечения. Многие программы используют инструкции CPUID для идентификации CPU, при этом данные чаще всего используются лишь для статистики/диагностики и напрямую не связаны с работой приложения. Популярно также использование инструкций RDTSC для взаимодействия с таймером в программах для тестирования производительности.

30.4% пакетов используют ассемблерные вставки для оптимизации производительности, например, для ускорения мультимедийных операций применяются инструкции SIMD (MMX/SSE/SSE2). Многие из ассемблерных оптимизаций типовые и скопированы из других пакетов не разбираясь особо как именно работает код.

18.1% пакетов связны со встраиванием в состав кода различных типовых библиотек, содержащих ассемблерные вставки, например, чаще всего встраиваются libjpeg, gettext, gnulib, libgc, sqlite и zlib.

11.1% пакетов попали в список по ошибке, например, файлы с расширением ".s" были приняты за код на ассемблере или программмы содержат ассемблерный код в форме данных, в комментариях или в документации.

В 10% пакетов ассемблерный код используется для реализации различных атомарных примитивов, таких как блокировки и операции инкремента/декремента.

9.3% пакетов включают ассемблерный код, необходимый для обеспечения работы на других операционных системах или сторонних платформах, т.е. в Linux такой код не используется.

В 2.9% пакетов ассемблерные вставки используются для прямого управления содержимым служебных областей исполняемых файлов или библиотек.
linux

Новости Linux

. Анализ использования ассемблерных вставок в коде открытых проектов Анализ использования ассемблерных вставок в коде открытых проектов
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
Если Вы обнаружите в опубликованных документах ошибки, опечатки, несоответствия и неточности - сообщите о них.
>>> Состоялся экспериментальный выпуск открытой реализации Win32 API - Wine 3.16. С момента выпуска версии 3.15 было закрыто 43 отчёта об ошибках и внесено 205 изменений.
>>> Подготовлен новый стабильный релиз интерфейса для упрощения настройки параметров сети - NetworkManager 1.14. Плагины для поддержки VPN, OpenConnect, PPTP, OpenVPN и OpenSWAN развиваются в рамках собственных циклов разработки.
>>> Доступна для тестирования бета-версия пользовательской оболочки Plasma 5.14, построенной с использованием платформы KDE Frameworks 5 и библиотеки Qt 5 с применением OpenGL/OpenGL ES для ускорения отрисовки. Протестировать новый выпуск можно через Live-сборку от проекта openSUSE и сборки от проекта KDE Neon. Пакеты для различных дистрибутивов можно найти на данной странице. Релиз ожидается 9 октября.
>>> Линус Торвальдс сообщил о временном уходе с поста координатора разработки ядра Linux. До возвращения Линуса его место займёт Грег Кроа-Хартман (Greg Kroah-Hartman), отвечающий за поддержку стабильной ветки ядра. Основной задачей Грега станет доведение до конца разработки выпуска 4.19, который сейчас находится на стадии четвёртого кандидата в релизы. Точных сроков не называется, но предполагается, что Линус вернётся к работе к моменту открытия следующего окна приёма изменений, в рамках которого начнётся формирование ядра 4.20.


Редакция портала:

Добро пожаловать на сайт, посвященный документации к ОС Linux, ее переводу и распространению. Мы надеемся, что Вы найдете тут всю необходимую информацию. Здесь представлены три основных вида документации на русском языке: руководства (man-pages), HOWTO и mini-HOWTO. В скором будущем возможно появление и других видов документации.
Авторские права на представленные документы принадлежат авторам перевода и распространяются в соответствии со Стандартной Общественной Лицензией, если в документе не указано обратное.
Если Вы обнаружите в опубликованных документах ошибки, опечатки, несоответствия и неточности - сообщите о них.