x32 АБИ
x32 ABI — это двоичный интерфейс приложения (ABI) и один из интерфейсов ядра Linux . x32 ABI предоставляет 32-битные целые числа, длинные числа и указатели (ILP32) на 64-битном оборудовании Intel и AMD. ABI позволяет программам использовать преимущества набора команд x86-64 (большее количество регистров ЦП , лучшая производительность с плавающей запятой, более быстрый позиционно-независимый код , общие библиотеки , параметры функций, передаваемые через регистры, более быстрая инструкция системного вызова ) при использовании 32-битные указатели и, таким образом, позволяют избежать накладных расходов, связанных с 64-битными указателями. [1] [2] [3]
Подробности
[ редактировать ]Хотя x32 ABI ограничивает программу виртуальным адресным пространством размером 4 ГиБ, он также уменьшает объем памяти, занимаемой программой, за счет уменьшения указателей. Это может позволить ему работать быстрее за счет размещения большего количества кода и данных в кэше . [1] [2] [3] Наилучшие результаты во время тестирования были получены при тесте 181.mcf SPEC CPU 2000, в котором версия ABI x32 была на 40% быстрее, чем версия x86-64. [3] [4] В среднем x32 на 5–8% быстрее в целочисленных тестах процессора SPEC по сравнению с x86-64. В тестах SPEC CPU с плавающей запятой нет преимущества в скорости по сравнению с x86-64. [5] Есть также несколько тестов приложений, демонстрирующих преимущества x32 ABI. [6] [7]
Особенность | i386 АБИ | x32 АБИ | x86-64 АБИ |
---|---|---|---|
Указатели | 4 байта | 8 байт | |
Макс. память на процесс | 4 ГиБ | 128 ТиБ | |
Целочисленные регистры | 6 (ПИК) | 15 | |
регистры ФП | 8 | 16 | |
64-битная арифметика | Нет | Да | |
с плавающей запятой Арифметика | х87 | СШЭ | |
Соглашение о вызовах | Память | Регистры | |
ПИК пролог | 2–3 инструкции | Никто |
История
[ редактировать ]Запуск пользовательского пространства, состоящего в основном из программ, скомпилированных в режиме ILP32 и которые также имеют основной доступ к 64-битным инструкциям ЦП, не является чем-то необычным, особенно в области «классических RISC» микросхем. Например, операционная система Solaris делает это как для SPARC , так и для x86-64. Что касается Linux , Debian также предоставляет пользовательское пространство ILP32. Основная причина заключается в несколько «более дорогой» природе кода LP64 . [8] точно так же, как это было показано для x86-64. В этом отношении x32 ABI расширяет концепцию ILP32-on-64bit на платформу x86-64.
Несколько человек обсуждали преимущества ABI x86-64 с 32-битными указателями за годы, прошедшие после Athlon 64 выпуска в 2003 году, в частности Дональд Кнут в 2008 году. [9] Публично заметного прогресса в реализации такого режима не было до 27 августа 2011 года, когда Ханс Петер Анвин объявил в списке рассылки ядра Linux , что он и HJ Lu работают над x32 ABI. [10]
В тот же день Линус Торвальдс выразил обеспокоенность тем, что использование 32-битных значений времени в x32 ABI может вызвать проблемы в будущем. [11] [12] Это связано с тем, что использование 32-битных значений времени может привести к переполнению значений времени в 2038 году . [11] [12] По этому запросу разработчики x32 ABI изменили значения времени на 64-битные. [13]
Презентация на конференции Linux Plumbers Conference 7 сентября 2011 г. была посвящена x32 ABI. [2]
ABI x32 был объединен с ядром Linux для версии 3.4, а поддержка была добавлена в библиотеку GNU C в версии 2.16. [14]
В декабре 2018 года обсуждался вопрос о прекращении поддержки x32 ABI, чего не произошло по состоянию на апрель 2023 года. [15] И этого не произошлопо состоянию на май 2024 года, и даже больше, он получил новое развитие. [16]
Принятие
[ редактировать ]Дистрибутив Linux | Дополнительная информация |
---|---|
Дебиан | Порт X32 |
Генту | Мультибиблиотека через abi_x86_x32 флаги использования |
Йокто Проект | X32 АБИ |
Т2 СДЕ | х86-64 |
Ссылки
[ редактировать ]- ^ Jump up to: а б Торстен Лемхейс (13 сентября 2011 г.). «Журнал ядра: x32 ABI устраняет недостатки 64-битной системы» . www.h-online.com. Архивировано из оригинала 28 октября 2011 года . Проверено 1 ноября 2011 г.
- ^ Jump up to: а б с «x32 — собственный 32-битный ABI для x86-64» . linuxplumbersconf.org . Проверено 12 июня 2012 г.
- ^ Jump up to: а б с "x32-аби" . Сайты Google . Проверено 1 ноября 2011 г.
- ^ «181.mcf Файл описания теста производительности SPEC CPU2000» . Корпорация стандартной оценки эффективности. 14 октября 1999 г. Проверено 1 ноября 2011 г.
- ^ Х.Дж. Лу; Х. Питер Анвин; Милинд Гиркар (сентябрь 2011 г.). «X32 — собственный 32-битный ABI для X86-64» .
- ^ Раушмайр, Натали; Стрейт, Ахим (2013). «Оценка x32-ABI в контексте приложений LHC» . Procedia Информатика . 18 : 2233–2240. дои : 10.1016/j.procs.2013.05.394 .
- ^ «Приложения, извлекающие выгоду из недооцененного x32-ABI» . www.sempria.de . Проверено 22 мая 2023 г.
- ^ Тони Бурк (22 января 2004 г.). «Действительно ли 64-битные двоичные файлы медленнее, чем 32-битные?» . Проверено 25 марта 2014 г.
- ^ Дональд Кнут (февраль 2008 г.). «Последние новости: Пламя о 64-битных указателях» . Проверено 15 мая 2012 г.
- ^ Х. Питер Анвин (27 августа 2011 г.). «RFD: номера системных вызовов x32 ABI» . Проверено 15 мая 2012 г.
- ^ Jump up to: а б Джонатан Корбет (29 августа 2011 г.). «Системный вызов ABI x32» . LWN.net . Проверено 1 ноября 2011 г.
- ^ Jump up to: а б Линус Торвальдс (26 августа 2011 г.). «Re: RFD: номера системных вызовов x32 ABI» . LWN.net . Проверено 26 февраля 2016 г.
- ^ Лу, HJ (24 ноября 2011 г.). «Обновление статуса проекта X32» . libc-alpha (список рассылки) . Проверено 17 октября 2019 г.
- ^ О'Донелл, Карлос (30 июня 2012 г.). «Библиотека GNU C версии 2.16 теперь доступна» . libc-alpha (список рассылки) . Проверено 27 декабря 2016 г.
- ^ «Можем ли мы отказаться от поддержки исходной версии Linux x32?» . ЛКМЛ . Проверено 13 марта 2019 г.
- ^ «Первая половина окна слияния 6.10» . ЛВН . Проверено 17 мая 2024 г.