Привет! Я провёл около трёх часов, перелопачивая форум, документацию OpenVZ и связанные проекты в поисках чёткой информации, в чём именно разница между использованием шаблона i386 и x86_64 в контейнере. Ниже длинный предысторический текст с последующими вопросами:
1. Помимо необходимости запускать 32-битные приложения, единственная ли причина выбирать шаблоны i386 в том, что при стандартных задачах (читай: < 4 ГБ ОЗУ) они занимают меньше памяти на хосте, чем шаблоны x86_64?
2. Почему в шаблоне amd64 есть 32-битные пакеты, и можно ли их смело удалить, как я сделал?
3. Раз ядро хоста управляет памятью, означает ли это, что если контейнеру i386 выделить больше 4 ГБ ОЗУ, то 4-гигабайтное ограничение 32-битной памяти применяется на каждый процесс, а не ко всей памяти контейнера в целом?
4. Есть ли в ядре Proxmox поддержка PAE, и как это влияет либо влияет ли вообще на шаблон i386?
Сразу видно, что основное отличие в том, что бинарники в шаблоне i386 собраны под 32-битную архитектуру:
# file /bin/bash
/bin/bash: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=xxx, stripped
А бинарники в шаблоне x86_64 — под 64-битную:
# file /bin/bash
/bin/bash: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=xxx, stripped
Обсуждения на эту тему есть здесь:
А в вики OpenVZ говорится:
"Нет особого смысла запускать 64-битный контейнер; однако на 64-битном аппаратном узле есть преимущества в управлении памятью." —
В FAQ Proxmox пишут:
Почему рекомендуется использовать 32-битных гостей вместо 64-битных?
- 64-бит нужен только если нужно более 4 ГБ памяти.
- 32-битные гости в некоторых случаях используют меньше памяти, например, стандартная установка apache2 на 64-битных контейнерах требует гораздо больше памяти, чем на 32-битных.
В Ubuntu 12.04 есть два шаблона:
ubuntu-12.04-standard_12.04-1_amd64.tar.gz — 205 МБ (17/10/2012 02:00:00)
ubuntu-12.04-standard_12.04-1_i386.tar.gz — 124 МБ (17/10/2012 02:00:00)
amd64 почти в два раза больше, потому что он содержит пачку i386 пакетов и ia32libs (которые я удаляю со своих amd64 контейнеров без видимых последствий):
# sudo apt-get remove `dpkg --get-selections | grep i386 | awk '{print $1}'`
Reading package lists... Done
Building dependency tree... Done
The following packages will be REMOVED: [список пакетов]
0 upgraded, 0 newly installed, 224 to remove and 0 not upgraded.
После этой операции освободится 202 МБ на диске.
Всем привет и удачи!
Ворик
1. Помимо необходимости запускать 32-битные приложения, единственная ли причина выбирать шаблоны i386 в том, что при стандартных задачах (читай: < 4 ГБ ОЗУ) они занимают меньше памяти на хосте, чем шаблоны x86_64?
2. Почему в шаблоне amd64 есть 32-битные пакеты, и можно ли их смело удалить, как я сделал?
3. Раз ядро хоста управляет памятью, означает ли это, что если контейнеру i386 выделить больше 4 ГБ ОЗУ, то 4-гигабайтное ограничение 32-битной памяти применяется на каждый процесс, а не ко всей памяти контейнера в целом?
4. Есть ли в ядре Proxmox поддержка PAE, и как это влияет либо влияет ли вообще на шаблон i386?
Сразу видно, что основное отличие в том, что бинарники в шаблоне i386 собраны под 32-битную архитектуру:
# file /bin/bash
/bin/bash: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=xxx, stripped
А бинарники в шаблоне x86_64 — под 64-битную:
# file /bin/bash
/bin/bash: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=xxx, stripped
Обсуждения на эту тему есть здесь:
А в вики OpenVZ говорится:
"Нет особого смысла запускать 64-битный контейнер; однако на 64-битном аппаратном узле есть преимущества в управлении памятью." —
В FAQ Proxmox пишут:
Почему рекомендуется использовать 32-битных гостей вместо 64-битных?
- 64-бит нужен только если нужно более 4 ГБ памяти.
- 32-битные гости в некоторых случаях используют меньше памяти, например, стандартная установка apache2 на 64-битных контейнерах требует гораздо больше памяти, чем на 32-битных.
В Ubuntu 12.04 есть два шаблона:
ubuntu-12.04-standard_12.04-1_amd64.tar.gz — 205 МБ (17/10/2012 02:00:00)
ubuntu-12.04-standard_12.04-1_i386.tar.gz — 124 МБ (17/10/2012 02:00:00)
amd64 почти в два раза больше, потому что он содержит пачку i386 пакетов и ia32libs (которые я удаляю со своих amd64 контейнеров без видимых последствий):
# sudo apt-get remove `dpkg --get-selections | grep i386 | awk '{print $1}'`
Reading package lists... Done
Building dependency tree... Done
The following packages will be REMOVED: [список пакетов]
0 upgraded, 0 newly installed, 224 to remove and 0 not upgraded.
После этой операции освободится 202 МБ на диске.
Всем привет и удачи!
Ворик
