Недавно было выпущено электронное письмо через список рассылки ядра Linux, и это письмо имеет своей основной целью удалить код из реализации субархитектуры x32 (не путать с x86 IA-32).
Что позволяет использовать 32-битную модель адресации памяти. (гибридные x86 и x86_64) в 86-битных системах x64.
Что такое архитектура x32?
Важно отметить, что подархитектура x32 представляет собой гибридный ABI x86_64., что позволяет использовать 32-битную модель адресации памяти в 64-битных системах (процессор работает в 64-битном режиме, но использует 32-битные указатели и арифметические операции).
АБИ Х32 позволяет приложениям в полной мере использовать преимущества архитектуры x86_64, такие как дополнительные регистры и более быстрые инструкции, PIC ABI.
В то же время ABI X32 поддерживает 32-битные указатели памяти, что экономит память, способствует более эффективному заполнению кэша процессора и положительно влияет на общую скорость выполнения кода.
Ограничением ABI X32 является невозможность направить из приложения более 4 ГБ памяти.
Поддержка X32 была частью ядра Linux с момента его выпуска 3.4, созданного в мае 2012 года.
Разработчики будут обсуждать, продолжать ли поддерживать эту архитектуру или нет.
По словам разработчика, предлагающего удалить технологию x32 это не оправдало себя и не нашло практического применения в современных промышленных схемах.
Кроме того, иl x32 код использует довольно спорный метод работы с системными вызовами, что создает риск прерывания нормальной работы после обработки реализаций системного вызова.
Линус Торвальдс сказал, что согласится удалить x32, если не будут представлены аргументы или если системы, в которых применялась субархитектура x32, не представлены.
Линус Он также указал, что использование архитектуры x32, по-видимому, ограничивалось тестированием экстремальной производительности.s, поскольку поддержка этой субархитектуры связана с большим количеством хлопот в поддержке дистрибутивов и среды разработки.
Почта:
Привет всем.
Я серьезно подумываю отправить патч для удаления поддержки x32 в Linux.. Вот некоторые проблемы с этим:
- Не совсем понятно, есть ли у него пользователи. Насколько мне известно, он поддерживается в Gentoo и Debian.
- Система звонков работает очень странно. Большинство системных вызовов на x32 вводятся через их * родную * (т.е. не COMPAT_SYSCALL_DEFINE) точку входа, и это сделано намеренно.
Например, adjtimex () использует собственный ввод, а не совместный ввод, потому что структура x32 struct timex соответствует макету x86_64. Но некоторые системные вызовы имеют отдельные точки входа - это системные вызовы, начинающиеся с 512.
Они входят через точки входа COMPAT_SYSCALL_DEFINE.
Системные вызовы X32, которые * не * находятся в диапазоне 512, нарушают все подобия соглашения о системных вызовах ядра.
В обработчиках системных вызовов in_compat_syscall () возвращает true, но запись COMPAT_SYSCALL_DEFINE не вызывается, это безумие, и вы рискуете что-то сломать, когда люди реорганизуют свои реализации системных вызовов.
И, прежде всего, никто не пробует эти вещи.
В одном случае При тестировании x32 один из разработчиков Gentoo пришел к выводу, что прирост производительности при переходе на ABI x32 не так велик, как показывают синтетические тесты. От создателей ABI x32:
значительный прогресс наблюдается только по сравнению с предыдущей архитектурой x86, но по сравнению с текущей архитектурой x86-64 выигрыш незначителен (тесты SPEC создателей x32 показали ускорение до 40% по сравнению с классическим ABI x86_64, тесты с кодеком H.264 показал ускорение на 15-20%).