X32 ABI - x32 ABI - Wikipedia

В x32 ABI является двоичный интерфейс приложения (ABI) и один из интерфейсы ядра Linux. Это позволяет программам использовать преимущества x86-64 набор инструкций (большее количество Регистры процессора, лучше производительность с плавающей запятой, быстрее позиционно-независимый код, общие библиотеки, параметры функции передаются через регистры, быстрее системный вызов инструкция) при использовании 32-битной указатели и, таким образом, избегая накладных расходов на 64-битные указатели.[1][2][3]

Подробности

Хотя x32 ABI ограничивает программу виртуальное адресное пространство 4 ГиБ, это также уменьшает объем памяти, занимаемой программой, за счет уменьшения размера указателей. Это может позволить ему работать быстрее, добавив больше кода. и больше данных в тайник.[1][2][3] Лучшие результаты во время тестирования были у 181.mcf. SPEC Тест CPU 2000, в котором версия x32 ABI была на 40% быстрее, чем версия x86-64.[3][4] В среднем, x32 на 5–8% быстрее в целочисленных тестах SPEC CPU по сравнению с x86-64. В тестах с плавающей запятой SPEC CPU нет преимущества в скорости по сравнению с x86-64.[5]

Сравнение ABI
Особенностьi386 ABIx32 ABIx86-64 ABI
Указатели4 байта8 байт
Максимум. память на процесс4 ГиБ128 ТиБ
Целочисленные регистры6 (ПОС)15
Регистры FP816
64-битный арифметикаНетда
Плавающая точка арифметикаx87SSE
Соглашение о вызовеобъем памятиРегистры
ПОС пролог2–3 инструкцииНикто

История

Запуск пользовательского пространства, состоящего в основном из программ, скомпилированных в ILP32 режим и которые также имеют принципиальный доступ к 64-битным инструкциям ЦП, не было редкостью, особенно в области "классических RISC" чипов. Например, Операционная система Solaris делает это для обоих SPARC и x86-64. На Linux сторона, Debian также поставляется пользовательское пространство ILP32. Основная причина - несколько "более дорогой" характер LP64 код,[6] точно так же, как это было показано для x86-64. В этом отношении x32 ABI расширяет концепцию ILP32-on-64bit на платформу x86-64.

Несколько человек обсуждали преимущества x86-64 ABI с 32-битными указателями за годы, прошедшие после Athlon 64 выпуск 2003 г., в частности Дональд Кнут в 2008.[7] До 27 августа 2011 г. не было заметного публичного прогресса в реализации такого режима, когда Ханс Петер Анвин объявил Список рассылки ядра Linux что он и Х. Дж. Лу работали над x32 ABI.[8]

В тот же день Линус Торвальдс ответил с беспокойством, что использование 32-битных значений времени в x32 ABI может вызвать проблемы в будущем.[9][10] Это потому, что использование 32-битных значений времени приведет к значения времени перетекать в 2038 год.[9][10] Следуя этому запросу, разработчики x32 ABI изменили значения времени на 64-битные.[11]

Презентация на Конференция сантехников Linux 7 сентября 2011 г. накрыл x32 ABI.[2]

ABI x32 был объединен с ядром Linux для выпуска 3.4 с добавлением поддержки в Библиотека GNU C в версии 2.16.[12]

В декабре 2018 года было решено отказаться от x32 ABI, чего не произошло по состоянию на ноябрь 2020 года.[13]

Рекомендации

  1. ^ а б Торстен Лемхейс (13 сентября 2011). «Журнал ядра: x32 ABI устраняет 64-битные недостатки». www.h-online.com. Архивировано из оригинал 28 октября 2011 г.. Получено 2011-11-01.
  2. ^ а б c «x32 - собственный 32-битный ABI для x86-64». linuxplumbersconf.org. Получено 2012-06-12.
  3. ^ а б c "x32-abi". Сайты Google. Получено 2011-11-01.
  4. ^ "181.mcf Файл описания эталонного теста SPEC CPU2000". Standard Performance Evaluation Corporation. 1999-10-14. Получено 2011-11-01.
  5. ^ Х. Дж. Лу; Х. Питер Анвин; Милинд Гиркар (сентябрь 2011 г.). «X32 - собственный 32-битный ABI для X86-64».
  6. ^ Тони Бурк (22 января 2004 г.). "Действительно ли 64-битные двоичные файлы медленнее 32-разрядных двоичных файлов?". Получено 2014-03-25.
  7. ^ Дональд Кнут (февраль 2008 г.). "Последние новости: пламя о 64-битных указателях". Получено 15 мая 2012.
  8. ^ Х. Питер Анвин (27 августа 2011 г.). «RFD: x32 номера системных вызовов ABI». Получено 15 мая 2012.
  9. ^ а б Джонатан Корбет (29 августа 2011 г.). "Системный вызов x32 ABI". LWN.net. Получено 2011-11-01.
  10. ^ а б Линус Торвальдс (26.08.2011). "Re: RFD: x32 номера системных вызовов ABI". LWN.net. Получено 2016-02-26.
  11. ^ Лу, Х. Дж. (2011-11-24). «Обновление статуса проекта X32». libc-alpha (Список рассылки). Получено 2019-10-17.
  12. ^ О'Донелл, Карлос (30 июня 2012 г.). «Библиотека GNU C версии 2.16 теперь доступна». libc-alpha (Список рассылки). Получено 27 декабря 2016.
  13. ^ «Можем ли мы отказаться от поддержки Linux x32?». LKML. Получено 13 марта 2019.

внешняя ссылка