Я только что прочитал здесь :
- до 128 ТБ виртуального адресного пространства на процесс (вместо 2 ГБ)
- Поддержка физической памяти 64 ТБ вместо 4 ГБ (или 64 ГБ с расширением PAE)
Почему это? Я имею в виду, поддержка физической памяти ограничена ядром или текущим оборудованием?
Зачем вам вдвое больше виртуальной памяти, чем физической памяти, которую вы можете адресовать?
debian
linux-kernel
virtual-memory
GSI-откровенное
источник
источник
Ответы:
Эти ограничения исходят не от Debian или Linux, а от аппаратного обеспечения. Различные архитектуры (процессор и шина памяти) имеют разные ограничения.
На современных процессорах x86-64 для ПК MMU допускает 48 бит виртуального адресного пространства . Это означает, что адресное пространство ограничено 256 ТБ. С одним битом, чтобы отличить адреса ядра от адресов пользователя, это оставляет 128 ТБ для адресного пространства процесса.
На современных процессорах x86-64 физические адреса могут использовать до 48 бит , что означает, что вы можете иметь до 256 ТБ. С тех пор, как была введена архитектура amd64, предел постепенно увеличивался (с 40 бит, если я правильно помню). Каждый бит адресного пространства требует некоторой логики подключения и декодирования (что делает процессор более дорогим, медленным и более горячим), поэтому производители оборудования имеют стимул уменьшать размер.
Linux позволяет только физическим адресам доходить до 2 ^ 46 (поэтому вы можете иметь только до 64 ТБ), потому что это позволяет полностью отобразить физическую память в пространстве ядра. Помните, что есть 48 бит адресного пространства; один бит для ядра / пользователя оставляет 47 битов для адресного пространства ядра. Половина из этого, самое большее, относится непосредственно к физической памяти, а другая половина позволяет ядру отображать все, что ему нужно. (Linux может справиться с физической памятью, которая не может быть отображена полностью в одно и то же время, но это создает дополнительную сложность, поэтому это делается только на платформах, где это требуется, таких как x86-32 с PAE и armv7 с LPAE.)
Полезно, чтобы виртуальная память была больше физической памяти по нескольким причинам:
источник
Я не знаю почему, но я могу вспомнить семь причин, по которым было бы полезно поддерживать вдвое больше адресного пространства, чем физической памяти.
источник
Это аппаратные ограничения. Современное оборудование x86_64 / amd64 допускает 48-битные виртуальные адреса и различного размера (зависит от реализации - например, моя рабочая станция здесь поддерживает только 36 бит) физических адресов. Ядро Linux делит виртуальное адресное пространство пополам (используя половину для ядра, половину для пространства пользователя - как это происходит в x86).
Итак, вы получите:
2⁴⁸ байта ÷ 2 = 2⁴⁷ байта = 128 ТиБ
Размер физического адреса часто меньше, потому что он на самом деле физический. Он занимает контакты / контактные площадки, транзисторы, соединения и т. Д. На / в процессоре и трассирует линии на плате. Вероятно, то же самое в чипсетах. Нет смысла поддерживать такое количество оперативной памяти, которое немыслимо в течение срока службы ядра процессора или сокета - все это стоит денег. (Даже с 32 слотами DIMM и DIMM по 64 ГБ в каждом, вы все равно только на 2 ТБ. Даже если емкость DIMM удваивается ежегодно, мы находимся на расстоянии 5 лет от 64 ТБ.
Как отмечает Питер Кордес , люди теперь подключают энергонезависимое хранилище, такое как 3D XPoint, к шине памяти, что делает возможным исчерпание адресного пространства. Более новые процессоры расширили физическое адресное пространство до 48 бит; возможно, вики Debian просто не была обновлена.
источник
clflush
иclflushopt
инструкциями.