Почему Debian Linux позволяет использовать виртуальное адресное пространство до 128 ТиБ на процесс, но только 64 ТиБ физической памяти?

Как правило, dd можно избежать в пользу некоторых альтернатив. Есть несколько веских причин использовать взамен GNU ddrescue . В Ubuntu вы можете установить его с помощью:

sudo apt-get install gddrescue

и просто использовать ddrescue . Обратите внимание, что в отличие от имени пакета исполняемый файл не имеет начального g .

Использовать его так же просто, как:

ddrescue inputFile outputFile logFile

Файл журнала (с любым именем) позволяет вам приостанавливать / останавливать и перезапускать без повторения предыдущей работы, что полезно при выполнении больших клонов или восстановлении дисков. По умолчанию он отображает прогресс, текущую скорость копирования, среднюю скорость копирования и количество найденных плохих блоков.

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

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

23
17.08.2017, 08:35
3 ответа

Эти ограничения исходят не от Debian или Linux, а от аппаратного обеспечения. Различные архитектуры (процессора и шины памяти )имеют разные ограничения.

В современных процессорах x86 -64 PC MMU позволяет 48 бит виртуального адресного пространства . Это означает, что адресное пространство ограничено 256 ТБ. С одним битом, чтобы отличить адреса ядра от адресов пользовательской среды, остается 128 ТБ для адресного пространства процесса.

На текущих процессорах x86 -64 физические адреса могут использовать до 48 бит , что означает, что вы можете иметь до 256 ТБ. Предел постепенно увеличивался с тех пор, как была введена архитектура amd64 (с 40 бит, если я правильно помню ). Каждый бит адресного пространства требует некоторой логики подключения и декодирования (, что делает процессор дороже, медленнее и горячее ), поэтому у производителей оборудования есть стимул уменьшать размер.

Linux позволяет использовать физические адреса только до 2^46 (, поэтому вы можете иметь только до 64 ТБ ), поскольку это позволяет полностью отображать физическую память в пространстве ядра. Помните, что существует 48 бит адресного пространства; один бит для ядра/пользователя оставляет 47 бит для адресного пространства ядра. Половина из них обращается непосредственно к физической памяти, а другая половина позволяет ядру отображать все, что ему нужно. (Linux может работать с физической памятью, которая не может быть отображена полностью одновременно, но это создает дополнительную сложность, поэтому это делается только на тех платформах, где это требуется, таких как x86 -32 с PAE. и armv7 с LPAE.)

Полезно, чтобы виртуальная память была больше физической по нескольким причинам:

  • Это позволяет ядру отображать всю физическую память, оставляя место для дополнительных виртуальных отображений.
  • В дополнение к отображениям физической памяти существуют отображения подкачки, файлов и драйверов устройств.
  • Полезно иметь местами неотображенную память :защитные страницы для обнаружения переполнения буфера , большие неотображенные зоны из-за ASLR и т. д.
34
27.01.2020, 19:41

Это аппаратные ограничения. Текущее оборудование x86_64/amd64 допускает 48-битные виртуальные адреса и различные размеры (зависит от реализации — например, моя рабочая станция здесь поддерживает только 36-битные) физические адреса. Ядро Linux разделяет виртуальное адресное пространство пополам (используя половину для ядра, половину для пользовательского пространства — точно так же, как в x86).

Таким образом, вы получаете:

2⁴⁸ байт ÷ 2 = 2⁴⁷ байт = 128 ТиБ

Размер физического адреса часто меньше, потому что он на самом деле физический. Он занимает контакты/контактные площадки, транзисторы, соединения и т. д. на/в ЦП и дорожки на плате. Наверное, так же и в чипсетах. Нет смысла поддерживать объем оперативной памяти, который немыслим в течение срока службы процессорного ядра или сокета — все это стоит денег. (Даже с 32 слотами DIMM и модулями DIMM по 64 ГБ в каждом у вас все равно всего 2 ТБ. Даже если емкость DIMM будет удваиваться ежегодно, до 64 ТБ осталось 5 лет.

Как указывает Питер Кордес, в настоящее время люди подключают к шине памяти энергонезависимую память, такую ​​как 3D XPoint, что делает возможным исчерпание адресного пространства. Новые процессоры расширили физическое адресное пространство до 48 бит; возможно, вики Debian просто не обновлялась.

5
27.01.2020, 19:41

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

  1. Во-первых, вы можете запускать приложения, которым требуется дополнительная память --, даже если это означает подкачку на диск.
  2. Более четкие макеты памяти для разделения использования памяти. Например, ОС может принимать адреса с более высокими номерами -и оставлять адреса с более низкими номерами -для приложений, чтобы упростить разделение.
  3. Рандомизация структуры адресного пространства немного более эффективна.
  4. Пометка страниц как исполняемых может означать оставшуюся память.
  5. Память -сопоставленный ввод-вывод.
  6. Выделение памяти стало проще. :За один раз можно выделить большие фрагменты.
  7. Уменьшена фрагментация памяти
8
27.01.2020, 19:41

Теги

Похожие вопросы