32-битная адресация более 4-х Гб памяти (PAE, PSE и пользовательские приложения)

Модератор: Модераторы разделов

Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

32-битная адресация более 4-х Гб памяти

Сообщение serzh-z »

Существует ли доступный способ, без излишних ухитрений, расширить виртуальное адресное пространство процесса до, скажем, 64 Гб (речь идет о Linux)?

Или есть средство аналогичное виндовому Address Windowing Extensions?
Спасибо сказали:
edo
Сообщения: 44
ОС: debian stable/testing

Re: 32-битная адресация более 4-х Гб памяти

Сообщение edo »

а чем не устраивает 64-битный режим? 32-битная машина с более, чем 4Gb памяти, сейчас редкость
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: 32-битная адресация более 4-х Гб памяти

Сообщение serzh-z »

Всем устраивает - но вопрос, по большей части, теоретический.

К тому же дело не в том, сколько на машинке стоит физической памяти. Вопрос в том - сколько можно адресовать памяти на 32-х разрядной машинке. Возможность подобной адресации есть на процессорах Pentium Pro и выше (средствами расширения линейного адреса через включение битов PSE или PAE). Но, как я понимаю, это недоступно для обычного приложения.

Поиски показали, что в винде есть небольшой набор API AWE, который, судя по всему, позволяет кверху каком (в смысле непрозрачно для приложения) адресовать много памяти (до конца не понял механизм - то ли кусками по 4Гб, то ли все сразу). Но, в таком случае, как аналогичное (и вообще - насколько аналогичное?) можно реализовать в пользовательских приложениях Linux, mmap - вроде бы не то?
Спасибо сказали:
edo
Сообщения: 44
ОС: debian stable/testing

Re: 32-битная адресация более 4-х Гб памяти

Сообщение edo »

ну возможно оно и есть, но:
- раньше было неактуально одному процессу иметь более 4Gb адресного пространства;
- сейчас в 64-битном режиме никаких проблем нет.

так что смысла особого в этом не видно. даже если такое api и есть - я бы стал им пользоваться только в случае, когда без него никак.
Спасибо сказали:
Аватара пользователя
heil0
Сообщения: 545
Статус: Депрессивный токарь с Межделмаша
ОС: *buntu, OpenSolaris

Re: 32-битная адресация более 4-х Гб памяти

Сообщение heil0 »

2 edo - вы не поняли вопроса Сержа.
Интересно, а как работают много-гигабайтные сервера на старых 32-битных процессорах? Типа Sun или HP - тот же Юникс. Как раз по-моему практический случай.
iMisanthrop
heil0's blog
heil0@jabber.ufanet.ru
Linux registered user #400177.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: 32-битная адресация более 4-х Гб памяти

Сообщение serzh-z »

heil0 писал(а):
23.12.2006 19:12
Интересно, а как работают много-гигабайтные сервера на старых 32-битных процессорах? Типа Sun или HP - тот же Юникс. Как раз по-моему практический случай.
Вот, точно. Это может быть примером практического использования адресации за 4 Гб виртуальной памяти.
Спасибо сказали:
Аватара пользователя
heil0
Сообщения: 545
Статус: Депрессивный токарь с Межделмаша
ОС: *buntu, OpenSolaris

Re: 32-битная адресация более 4-х Гб памяти

Сообщение heil0 »

Ну, что гуру здесь отметятся? У меня не такое хорошее знание ядра, чтобы в этом разобраться без посторонней помощи... :(
iMisanthrop
heil0's blog
heil0@jabber.ufanet.ru
Linux registered user #400177.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: 32-битная адресация более 4-х Гб памяти

Сообщение serzh-z »

По случаю установки нового ядра обратил внимание на параметр NOHIGHMEM, в описании которого сказано, что при включении поддержки больших объемом памяти используется PAE. Из чего следует, что адресовать большие блоки памяти все же можно, но, как я понимаю, волшебства не бывает и работать с большим куском памяти куском на 32-х разрядном процессоре не выйдет.

Остается узнать - каков механизм позволит обычному приложению заюзать поддержку PAE в ядре.
Спасибо сказали:
Аватара пользователя
Paul7
Сообщения: 40

Re: 32-битная адресация более 4-х Гб памяти

Сообщение Paul7 »

serzh-z писал(а):
23.12.2006 21:51
Остается узнать - каков механизм позволит обычному приложению заюзать поддержку PAE в ядре.

Никакой. Идем в википедию, и радостно читаем, что PAE - это для поддержки физической памяти >4Gb. А виртуальное адресное пространство все такое же, 32-битное.
HP i2000 Dual Itanium / Debian Sarge & Win2k3
Sun Ultra 5 M270 / OpenSolaris Nevada-41
DEC Multia VX42 / OpenBSD 3.8
HP 9000 Model C100 / HP-UX B.11.00
Спасибо сказали:
Аватара пользователя
heil0
Сообщения: 545
Статус: Депрессивный токарь с Межделмаша
ОС: *buntu, OpenSolaris

Re: 32-битная адресация более 4-х Гб памяти

Сообщение heil0 »

Paul7 писал(а):
24.12.2006 03:04
serzh-z писал(а):
23.12.2006 21:51

Остается узнать - каков механизм позволит обычному приложению заюзать поддержку PAE в ядре.

Никакой. Идем в википедию, и радостно читаем, что PAE - это для поддержки физической памяти >4Gb. А виртуальное адресное пространство все такое же, 32-битное.

Как /ми понял, работа с кусками, с переключателем - битом PAE
Медленно и глючно - макдональдс. Жаль.
iMisanthrop
heil0's blog
heil0@jabber.ufanet.ru
Linux registered user #400177.
Спасибо сказали:
Аватара пользователя
halturin
Сообщения: 167
ОС: Linux

Re: 32-битная адресация более 4-х Гб памяти

Сообщение halturin »

Господа, человек дело спрашивает а вы его в 64 разряда тыкаете.

serzh-z: не слушай их.
начиная с PentiumPro в процессорах ввели возможность адресовать свыше 4Г. для чего в процессоре ввели дополнительные 4 бита, тобишь получали 36 битный адрес, что дает нам 64Г адресного пространства. Для чайников, утверждающих "на кой ляд оно нужно.." заверяю, что данным механизмом пользуются мощьные системы обработки данных, в часности Оракл.
Теперь на счет NOHIGHMEM - тебе надо как раз таки заюзать этот параметр, чтобы включить в ядро вышеописаную функциональность.
Тонкости использования - это тебе в документацию....

теперь у тебя есть не только сила, но и вектор...
enjoy :)
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: 32-битная адресация более 4-х Гб памяти

Сообщение serzh-z »

halturin писал(а):
25.12.2006 10:03
ввели дополнительные 4 бита, тобишь получали 36 битный адрес, что дает нам 64Г адресного пространства.
...
Теперь на счет NOHIGHMEM - тебе надо как раз таки заюзать этот параметр, чтобы включить в ядро вышеописаную функциональность.
Тонкости использования - это тебе в документацию....
Так вот, именно это и интересует - как обычное, пользовательское приложение может использовать 36-битную адресацию, если вообще может.

Как я понимаю, и Paul7 это подтвердил, логический адрес просто не в состоянии чудесным образом преобразоваться и начать вмещать в себя 36 бит вместо 32 (где хранить эти 36 бит?..). Да и лимит сегмента остался таким же 20-разрядным (т.е. не позволит описать в *DT сегменты больше 4 Гб)... Или может?

Про HIGHMEM - не вопрос. После ее включения ядро-то сможет использовать 36-битные линейные адреса. Но как быть с приложениями? Если бы мне попалась эта документации, я бы не спрашивал.

Попробую упростить исходную дилемму: могу ли я в простом приложении (скажем на C) обратиться к памяти по адресу большему, чем 0xffffffff, без всяких ухищрений, при включенном PAE? Теперь почти уверен, что нет. Тогда вопрос на засыпку - если нет, то как я могу использовать в простом usermode-приложении PAE?

Вот такая вот солянка вопросов...

З.Ы.: совершенно случайно полез в офисный шкаф и обнаружил там толстую пачку распечаток по архитектуре 32-х битных процессоров Intel (верно говорят - "Зверь на ловца бежит"). Хотя понятно, что нужных ответов там в принципе не может быть - так как это уже на совести разработчиков ОС.

З.Ы.Ы.: пока писал, окончательно утвердился в том, что с расширением виртуального адресного пространства проца. на 32-х разрядах болты, даже при включении PAE. Вдумался в фразу Physical Address Extension. :) И весь смысл использования большего количества физической памяти на 32-х битных процессорах сведеться лишь к тому, что можно будет увеличить число процессов использующих большие (до 4 Гб) объемы памяти.
Спасибо сказали:
s0L
Сообщения: 50
ОС: Gentoo 2007.0

Re: 32-битная адресация более 4-х Гб памяти

Сообщение s0L »

serzh-z писал(а):
25.12.2006 14:51
Так вот, именно это и интересует - как обычное, пользовательское приложение может использовать 36-битную адресацию, если вообще может.

Как я понимаю, и Paul7 это подтвердил, логический адрес просто не в состоянии чудесным образом преобразоваться и начать вмещать в себя 36 бит вместо 32 (где хранить эти 36 бит?..). Да и лимит сегмента остался таким же 20-разрядным (т.е. не позволит описать в *DT сегменты больше 4 Гб)... Или может?


Доступ к памяти более 4гб из приложения можно получить если система будет предоставлять для этого соответствующее API. Не знаю как это сделано в линухе, но винде все довольно просто, создается окно в виртуальной памяти, потом выделяется здоровый кусок физ. памяти нужного размера. И теперь можно "бегать" по этому куску с помощью этого окна, т.е. когда нужно передвинуть окно, делают ремап.
Соответственно получаем некоторое падение производительности, степень которого зависит от конкретной реализации в ОС.
В основном фишка используется на серверах для СУБД.
Спасибо сказали: