Существует ли доступный способ, без излишних ухитрений, расширить виртуальное адресное пространство процесса до, скажем, 64 Гб (речь идет о Linux)?
Или есть средство аналогичное виндовому Address Windowing Extensions?
32-битная адресация более 4-х Гб памяти (PAE, PSE и пользовательские приложения)
Модератор: Модераторы разделов
-
serzh-z
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
-
edo
- Сообщения: 44
- ОС: debian stable/testing
Re: 32-битная адресация более 4-х Гб памяти
а чем не устраивает 64-битный режим? 32-битная машина с более, чем 4Gb памяти, сейчас редкость
-
serzh-z
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: 32-битная адресация более 4-х Гб памяти
Всем устраивает - но вопрос, по большей части, теоретический.
К тому же дело не в том, сколько на машинке стоит физической памяти. Вопрос в том - сколько можно адресовать памяти на 32-х разрядной машинке. Возможность подобной адресации есть на процессорах Pentium Pro и выше (средствами расширения линейного адреса через включение битов PSE или PAE). Но, как я понимаю, это недоступно для обычного приложения.
Поиски показали, что в винде есть небольшой набор API AWE, который, судя по всему, позволяет кверху каком (в смысле непрозрачно для приложения) адресовать много памяти (до конца не понял механизм - то ли кусками по 4Гб, то ли все сразу). Но, в таком случае, как аналогичное (и вообще - насколько аналогичное?) можно реализовать в пользовательских приложениях Linux, mmap - вроде бы не то?
К тому же дело не в том, сколько на машинке стоит физической памяти. Вопрос в том - сколько можно адресовать памяти на 32-х разрядной машинке. Возможность подобной адресации есть на процессорах Pentium Pro и выше (средствами расширения линейного адреса через включение битов PSE или PAE). Но, как я понимаю, это недоступно для обычного приложения.
Поиски показали, что в винде есть небольшой набор API AWE, который, судя по всему, позволяет кверху каком (в смысле непрозрачно для приложения) адресовать много памяти (до конца не понял механизм - то ли кусками по 4Гб, то ли все сразу). Но, в таком случае, как аналогичное (и вообще - насколько аналогичное?) можно реализовать в пользовательских приложениях Linux, mmap - вроде бы не то?
-
edo
- Сообщения: 44
- ОС: debian stable/testing
Re: 32-битная адресация более 4-х Гб памяти
ну возможно оно и есть, но:
- раньше было неактуально одному процессу иметь более 4Gb адресного пространства;
- сейчас в 64-битном режиме никаких проблем нет.
так что смысла особого в этом не видно. даже если такое api и есть - я бы стал им пользоваться только в случае, когда без него никак.
- раньше было неактуально одному процессу иметь более 4Gb адресного пространства;
- сейчас в 64-битном режиме никаких проблем нет.
так что смысла особого в этом не видно. даже если такое api и есть - я бы стал им пользоваться только в случае, когда без него никак.
-
heil0
- Сообщения: 545
- Статус: Депрессивный токарь с Межделмаша
- ОС: *buntu, OpenSolaris
Re: 32-битная адресация более 4-х Гб памяти
2 edo - вы не поняли вопроса Сержа.
Интересно, а как работают много-гигабайтные сервера на старых 32-битных процессорах? Типа Sun или HP - тот же Юникс. Как раз по-моему практический случай.
Интересно, а как работают много-гигабайтные сервера на старых 32-битных процессорах? Типа Sun или HP - тот же Юникс. Как раз по-моему практический случай.
-
serzh-z
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
-
heil0
- Сообщения: 545
- Статус: Депрессивный токарь с Межделмаша
- ОС: *buntu, OpenSolaris
Re: 32-битная адресация более 4-х Гб памяти
Ну, что гуру здесь отметятся? У меня не такое хорошее знание ядра, чтобы в этом разобраться без посторонней помощи... 
-
serzh-z
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: 32-битная адресация более 4-х Гб памяти
По случаю установки нового ядра обратил внимание на параметр NOHIGHMEM, в описании которого сказано, что при включении поддержки больших объемом памяти используется PAE. Из чего следует, что адресовать большие блоки памяти все же можно, но, как я понимаю, волшебства не бывает и работать с большим куском памяти куском на 32-х разрядном процессоре не выйдет.
Остается узнать - каков механизм позволит обычному приложению заюзать поддержку PAE в ядре.
Остается узнать - каков механизм позволит обычному приложению заюзать поддержку PAE в ядре.
-
Paul7
- Сообщения: 40
Re: 32-битная адресация более 4-х Гб памяти
Никакой. Идем в википедию, и радостно читаем, что 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
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-х Гб памяти
-
halturin
- Сообщения: 167
- ОС: Linux
Re: 32-битная адресация более 4-х Гб памяти
Господа, человек дело спрашивает а вы его в 64 разряда тыкаете.
serzh-z: не слушай их.
начиная с PentiumPro в процессорах ввели возможность адресовать свыше 4Г. для чего в процессоре ввели дополнительные 4 бита, тобишь получали 36 битный адрес, что дает нам 64Г адресного пространства. Для чайников, утверждающих "на кой ляд оно нужно.." заверяю, что данным механизмом пользуются мощьные системы обработки данных, в часности Оракл.
Теперь на счет NOHIGHMEM - тебе надо как раз таки заюзать этот параметр, чтобы включить в ядро вышеописаную функциональность.
Тонкости использования - это тебе в документацию....
теперь у тебя есть не только сила, но и вектор...
enjoy
serzh-z: не слушай их.
начиная с PentiumPro в процессорах ввели возможность адресовать свыше 4Г. для чего в процессоре ввели дополнительные 4 бита, тобишь получали 36 битный адрес, что дает нам 64Г адресного пространства. Для чайников, утверждающих "на кой ляд оно нужно.." заверяю, что данным механизмом пользуются мощьные системы обработки данных, в часности Оракл.
Теперь на счет NOHIGHMEM - тебе надо как раз таки заюзать этот параметр, чтобы включить в ядро вышеописаную функциональность.
Тонкости использования - это тебе в документацию....
теперь у тебя есть не только сила, но и вектор...
enjoy
-
serzh-z
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: 32-битная адресация более 4-х Гб памяти
Так вот, именно это и интересует - как обычное, пользовательское приложение может использовать 36-битную адресацию, если вообще может.halturin писал(а): ↑25.12.2006 10:03ввели дополнительные 4 бита, тобишь получали 36 битный адрес, что дает нам 64Г адресного пространства.
...
Теперь на счет NOHIGHMEM - тебе надо как раз таки заюзать этот параметр, чтобы включить в ядро вышеописаную функциональность.
Тонкости использования - это тебе в документацию....
Как я понимаю, и Paul7 это подтвердил, логический адрес просто не в состоянии чудесным образом преобразоваться и начать вмещать в себя 36 бит вместо 32 (где хранить эти 36 бит?..). Да и лимит сегмента остался таким же 20-разрядным (т.е. не позволит описать в *DT сегменты больше 4 Гб)... Или может?
Про HIGHMEM - не вопрос. После ее включения ядро-то сможет использовать 36-битные линейные адреса. Но как быть с приложениями? Если бы мне попалась эта документации, я бы не спрашивал.
Попробую упростить исходную дилемму: могу ли я в простом приложении (скажем на C) обратиться к памяти по адресу большему, чем 0xffffffff, без всяких ухищрений, при включенном PAE? Теперь почти уверен, что нет. Тогда вопрос на засыпку - если нет, то как я могу использовать в простом usermode-приложении PAE?
Вот такая вот солянка вопросов...
З.Ы.: совершенно случайно полез в офисный шкаф и обнаружил там толстую пачку распечаток по архитектуре 32-х битных процессоров Intel (верно говорят - "Зверь на ловца бежит"). Хотя понятно, что нужных ответов там в принципе не может быть - так как это уже на совести разработчиков ОС.
З.Ы.Ы.: пока писал, окончательно утвердился в том, что с расширением виртуального адресного пространства проца. на 32-х разрядах болты, даже при включении PAE. Вдумался в фразу Physical Address Extension.
-
s0L
- Сообщения: 50
- ОС: Gentoo 2007.0
Re: 32-битная адресация более 4-х Гб памяти
serzh-z писал(а): ↑25.12.2006 14:51Так вот, именно это и интересует - как обычное, пользовательское приложение может использовать 36-битную адресацию, если вообще может.
Как я понимаю, и Paul7 это подтвердил, логический адрес просто не в состоянии чудесным образом преобразоваться и начать вмещать в себя 36 бит вместо 32 (где хранить эти 36 бит?..). Да и лимит сегмента остался таким же 20-разрядным (т.е. не позволит описать в *DT сегменты больше 4 Гб)... Или может?
Доступ к памяти более 4гб из приложения можно получить если система будет предоставлять для этого соответствующее API. Не знаю как это сделано в линухе, но винде все довольно просто, создается окно в виртуальной памяти, потом выделяется здоровый кусок физ. памяти нужного размера. И теперь можно "бегать" по этому куску с помощью этого окна, т.е. когда нужно передвинуть окно, делают ремап.
Соответственно получаем некоторое падение производительности, степень которого зависит от конкретной реализации в ОС.
В основном фишка используется на серверах для СУБД.