Почему системы x86-64 имеют только 48-битное виртуальное адресное пространство? - PullRequest
80 голосов
/ 16 июля 2011

В книге я прочитал следующее:

32-разрядные процессоры имеют 2 ^ 32 возможных адресов, в то время как современные 64-разрядные процессоры имеют 48-разрядное адресное пространство

Я ожидал, что если это 64-битный процессор, адресное пространство также должно быть 2 ^ 64.

Так что мне было интересно, в чем причина этого ограничения?

Ответы [ 10 ]

118 голосов
/ 16 июля 2011

Потому что это все, что нужно.48 бит дают адресное пространство 256 терабайт.Это много.В ближайшее время вы не увидите систему, которая нуждается в большем, чем это.

Таким образом, производители процессоров пошли по пути.Они используют набор инструкций, который допускает полное 64-битное адресное пространство, но современные процессоры используют только младшие 48 бит.Альтернатива заключалась в том, чтобы тратить транзисторы на обработку большего адресного пространства, которое не требовалось в течение многих лет.

Поэтому, когда мы приближаемся к 48-битному пределу, это просто вопрос выпуска процессоров, которые обрабатываютполное адресное пространство, но это не потребует никаких изменений в наборе команд и не нарушит совместимость.

17 голосов
/ 16 июля 2011

Любой ответ, относящийся к размеру шины и физической памяти, немного ошибочен, поскольку вопрос OP касался виртуального адресного пространства , а не физического адресного пространства .Например, предположительно аналогичный предел для некоторых 386-х был пределом физической памяти, которую они могли использовать, а не виртуальным адресным пространством, которое всегда было полными 32 битами.В принципе, вы можете использовать целые 64 бита виртуального адресного пространства даже с несколькими МБ физической памяти;Конечно, вы могли бы сделать это путем замены или для специализированных задач, где вы хотите отобразить одну и ту же страницу по большинству адресов (например, определенные операции с разреженными данными).

Я думаю, что реальный ответ заключается в том, что AMD простодешево и надеялся, что сейчас никого не волнует, но у меня нет ссылок, чтобы цитировать.

9 голосов
/ 16 июля 2011

Внутренний собственный регистр / ширина операции не должны отражаться на ширине шины внешнего адреса.

Допустим, у вас есть 64-битный процессор, которому требуется только 1 мегабайт оперативной памяти. 20-битная адресная шина - это все, что требуется. Зачем беспокоиться о стоимости и сложности аппаратного обеспечения всех дополнительных выводов, которые вы не будете использовать?

Motorola 68000 была такой; 32-битный внутренний, но с 23-битной адресной шиной (и 16-битной шиной данных). Процессор мог получить доступ к 16 мегабайтам оперативной памяти, а для загрузки собственного типа данных (32 бита) потребовалось два обращения к памяти (каждый из которых содержал 16 бит данных).

9 голосов
/ 16 июля 2011

Прочитайте раздел об ограничениях статьи в Википедии :

ПК не может содержать 4 петабайта памяти (из-за размера существующих микросхем памяти, если не больше), но AMD предусмотрела большие серверы, кластеры с общей памятью и другие виды использования физического адресного пространства, которые могут приблизиться к этому в обозримом будущем и 52-битный физический адрес предоставляет достаточно места для расширения, не неся при этом затрат на реализацию 64-битных физических адресов

То есть, на данный момент нет смысла внедрять полную 64-битную адресацию, потому что мы не можем создать систему, которая могла бы использовать такое адресное пространство полностью - поэтому мы выбираем что-то практичное для сегодняшних (и завтрашних) систем.

6 голосов
/ 14 января 2016

С моей точки зрения, это результат размера страницы. Каждая страница содержит не более 4096/8 = 512 записей таблицы страниц. И 2 ^ 9 = 512. Итак, 9 * 4 + 12 = 48.

6 голосов
/ 30 октября 2015

Существует более серьезная причина, чем просто сохранение транзисторов в адресном пути процессора: если вы увеличиваете размер адресного пространства, вам нужно увеличить размер страницы, увеличить размер таблиц страниц или иметь более глубокую таблицу страницструктура (то есть больше уровней таблиц перевода).Все это увеличивает стоимость пропуска TLB, что снижает производительность.

3 голосов
/ 28 октября 2018

Чтобы ответить на исходный вопрос: не нужно было добавлять более 48 битов PA.

Серверам нужен максимальный объем памяти, поэтому давайте попробуем копать глубже.

1) Самая большая (обычно используемая) конфигурация сервера - это система с 8 сокетами.Система 8S - это не что иное, как 8 серверных процессоров, соединенных высокоскоростным когерентным соединением (или просто высокоскоростной «шиной»), чтобы сформировать единый узел.Существуют более крупные кластеры, но их мало и они далеко друг от друга, здесь мы говорим об часто используемых конфигурациях.Обратите внимание, что в реальных условиях использование системы 2 Socket является одним из наиболее часто используемых серверов, а 8S обычно считается очень высокопроизводительным.

2) Основными типами памяти, используемой серверами, является обычная DRAM с байтовой адресациейпамять (например, память DDR3 / DDR4), Memory Mapped IO - MMIO (например, память, используемая дополнительной картой), а также пространство конфигурации, используемое для настройки устройств, присутствующих в системе.Первый тип памяти - это тип памяти, который обычно самый большой (и, следовательно, нуждается в наибольшем количестве битов адреса).Некоторые высокопроизводительные серверы также используют большое количество MMIO в зависимости от фактической конфигурации системы.

3) Предположим, что каждый ЦП сервера может содержать 16 модулей DIMM DDR4 в каждом слоте.С максимальным размером DDR4 DIMM 256 ГБ.(В зависимости от версии сервера это число возможных модулей DIMM на сокет на самом деле меньше 16 модулей DIMM, но продолжайте чтение для примера).

Таким образом, теоретически каждый сокет может иметь 16 * 256GB = 4096GB= 4 ТБ.Для нашей примерной системы 8S размер DRAM может составлять максимум 4 * 8 = 32 ТБ.Это означает, что максимальное количество битов, необходимых для адресации этого пространства DRAM, составляет 45 (= log2 32TB / log2 2).

Мы не будем вдаваться в детали других типов памяти (MMIO, MMCFG и т. Д.),но дело в том, что наиболее «требовательный» тип памяти для 8-сокетной системы с самыми большими типами DIMM DDR4, доступными на сегодняшний день (DIMM 256 ГБ), использует только 45 битов.

Для ОС, поддерживающей 48биты (например, WS16), есть (48-45 =) 3 оставшихся бита.Это означает, что, если мы использовали младшие 45 бит исключительно для 32 ТБ памяти DRAM, у нас все еще будет 2 ^ 3 раза адресуемой памяти, которую можно использовать для MMIO / MMCFG для общего объема 256 ТБ адресуемого пространства.

Итак, подведем итог: 1) 48 бит физического адреса - это достаточно много бит для поддержки крупнейших современных систем, которые «полностью загружены» большим количеством памяти DDR4, а также множеством других устройств ввода-вывода, которые требуют пространства MMIO.256 ТБ, если быть точным.

Обратите внимание, что это адресное пространство размером 256 ТБ (= 48 бит физического адреса) НЕ включает в себя диски, такие как диски SATA, поскольку они НЕ являются частью карты адресов, они включают только память с байтовой адресацией иподвергается воздействию ОС.

2) Аппаратное обеспечение ЦП может выбрать реализацию 46, 48 или> 48 бит в зависимости от поколения сервера.Но еще один важный фактор - сколько бит распознает ОС.Сегодня WS16 поддерживает 48-битные физические адреса (= 256 ТБ).

Что это значит для пользователя, даже если у него есть большой, ультрасовременный серверный ЦП, который может поддерживать> 48 бит адресации, если вы используете ОС, которая поддерживает только 48 бит PA, то вы можетеВоспользуйтесь только 256 ТБ.

3) В целом, есть два основных фактора, которые позволяют использовать большее количество бит адреса (= больший объем памяти).

a) Сколько бит поддерживает ваш процессор HW?(Это может быть определено инструкцией CPUID в процессорах Intel.)

b) Какую версию ОС вы используете и сколько бит PA распознает / поддерживает.

Минус (a, b) в конечном итоге определит объем адресуемого пространства, которым может воспользоваться ваша система.

Я написал этот ответ, не рассматривая другие ответы подробно.Также я не стал вдаваться в подробности нюансов MMIO, MMCFG и всей полноты построения адресной карты.Но я надеюсь, что это поможет.

Спасибо,Ананд К Энамандрам, Архитектор серверной платформы Корпорация Intel

2 голосов
/ 22 июля 2018

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

Сказать, что процессор 32-разрядный или 64-разрядный не означает, что он должен иметь 32-разрядную шину адреса или 64-разрядную.соответственно, шина битового адреса! ... Я повторяю, что НЕ ДЕЛАЕТ !!

32-битный процессор означает, что он имеет 32-битный АЛУ (арифметический и логический блок) ... это означает, что он может работать с 32-битным двоичным операндом(или просто говоря двоичное число, имеющее 32 цифры) и аналогичным образом 64-разрядный процессор может работать с 64-разрядным двоичным операндом.Таким образом, если 32-разрядный или 64-разрядный процессор не означает, что максимальный объем памяти может быть установлен.Они просто показывают, насколько большим может быть операнд ... (для примера вы можете подумать, что 10-значный калькулятор может рассчитывать результаты до 10 цифр ... он не может дать нам 11 цифр или любые другие большие результаты ... хотя этов десятичном виде, но я говорю эту аналогию для простоты) ... но то, что вы говорите, это адресное пространство, которое является максимальным объемом памяти (RAM), который может быть напрямую подключен.Максимально возможный размер ОЗУ определяется размером адресной шины, а не размером шины данных или даже ALU, для которого определяется размер процессора (32/64 бит).Да, если процессор имеет 32-разрядную «адресную шину», то он может адресовать 2 ^ 32 байта = 4 ГБ ОЗУ (или для 64-разрядных это будет 2 ^ 64) ... но, говоря, процессор 32-разрядный или 64-разрядный имеетничего не имеет отношения к этому адресному пространству (адресному пространству = как далеко он может получить доступ к памяти или максимальному объему оперативной памяти), и оно зависит только от размера его ALU.Конечно, шина данных и адресная шина могут быть одинакового размера, и тогда может показаться, что 32-битный процессор означает, что он получит доступ к 2 ^ 32 байтам или 4 ГБ памяти ... но это только совпадение и оно не будет таким жедля всех .... например intel 8086 - это 16-битный процессор (так как он имеет 16-битный ALU), так что, как вы сказали, он должен был получить доступ к 2 ^ 16 байт = 64 КБ памяти, но это не так.Он может использовать до 1 МБ памяти для 20-битной адресной шины .... Вы можете зайти в Google, если у вас есть какие-либо сомнения:)

Я думаю, что я ясно изложил свою точку зрения. Теперь перейдем к вашему вопросу ...as 64-битный процессор не означает, что он должен иметь 64-битную адресную шину, поэтому нет ничего плохого в том, чтобы иметь 48-битную адресную шину в 64-битном процессоре ... они сохранили адресное пространство меньше, чтобы сделать проектирование и изготовление дешевыми.... поскольку никто не собирается использовать такую ​​большую память (2 ^ 64 байта) ... где 2 ^ 48 байтов в настоящее время более чем достаточно.

1 голос
/ 05 августа 2017

Неверно, что используются только младшие 48 бит 64-битного виртуального устройства, по крайней мере, с Intel 64. Старшие 16 бит используются, вроде как.

Раздел 3.3.7.1 Каноническая адресация в Руководстве разработчика программного обеспечения Intel® 64 и IA-32 для архитектур гласит:

канонический адрес должен иметь биты с 63 по 48, установленные на нули или единицы (в зависимости от того, является ли бит 47 нулем или единицей)

Таким образом, биты с 47 по 63 образуют суперразряд, либо все 1, либо все 0. Если адрес не в канонической форме, реализация должна давать сбой.

На AArch64 это не так. В соответствии с Обзор набора инструкций *1013* ARMv8, это 49-битный ВА.

Система трансляции памяти AArch64 поддерживает 49-битный виртуальный адрес (48 бит на таблицу трансляции). Виртуальные адреса расширены до 49 бит и хранятся в 64-битном указателе. Опционально, под управлением системного регистра, старшие 8 битов 64-битного указателя могут содержать «тег», который будет игнорироваться при использовании в качестве адреса загрузки / сохранения или цели косвенной ветви

0 голосов
/ 22 июля 2018

Процессор считается «N-битами» в основном по размеру его шины данных и по большей части его сущностей (внутренняя архитектура) : регистры, аккумуляторы, арифметико-логический блок (АЛУ) , Набор инструкций и т. Д. Например: старый добрый процессор Motorola 6800 (или Intel 8050) представляет собой 8-разрядный процессор. Он имеет 8-битную шину данных, 8-битную внутреннюю архитектуру и 16-битную адресную шину.


  • Хотя N-битный ЦП может иметь некоторые объекты, отличные от N-размера. Например, улучшения в 6809 по сравнению с 6800 (оба они 8-битный процессор с 8-битной шиной данных). Среди значительных улучшений, представленных в 6809, было использование двух 8-разрядных аккумуляторов (A и B, которые можно объединить в один 16-разрядный регистр D), двух 16-разрядных индексных регистров (X, Y) и двух 16-битные указатели стека.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...