Howdy
I have spent about 3 hours scouring this forum, the OpenVZ documentation and related projects trying to find some definitive information on what exactly the difference is between running an i386 vs a x86_64 template in a container.
Below is a long winded background to the following questions:
1. Outside of a need to run 32-bit compiled applications, is the only preference for i386 templates because for most standard uses (read < 4G RAM) that they use less of the host memory than an x86_64 template?
2. What is the reason for the inclusion of the 32-bit packages in the amd64 template and is it safe to remove them as I have?
3. Given that it is the host kernel that manages the memory, does this mean that if > 4G of RAM is allocated to an i386 container that the 4G 32-bit memory limit applies per process rather than for the total memory consumed by the container?
4. Does Proxmox's kernel have PAE support and how would/does this affect the i386 template?
At the outset, it is clear that the primary distinction is that the binaries in the i386 template are compiled for a 32-bit architecture:
# 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
And the binaries in the x86_64 template are compiled for a 64-bit architecture ( file /bin/bash ):
# 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
There is discussion on this topic at:
http://forum.proxmox.com/threads/13349-Proxmox-Templates-32-bit
http://pve.proxmox.com/wiki/FAQ#Why_do_you_recommend_32-bit_guests_over_64_bit_guests.3F
And the OpenVZ wiki says the following:
"There isn't much of a reason to run a 64bit container; however, there a (sic) memory management benefits to be had from running a 64bit hardware node." -- http://openvz.org/Making_template_tools_to_work_on_x86_64
The Proxmox FAQ says:
Why do you recommend 32-bit guests over 64 bit guests?
- 64-bit makes sense only if you need greater than 4GB of memory.
- 32-bit guests use less memory in certain situations
e.g. a standard installation of apache2 on 64 bit containers consumes much more memory than on 32 bit.
In the case of Ubuntu 12.04, there are two templates:
ubuntu-12.04-standard_12.04-1_amd64.tar.gz 205 MB 17/10/2012 02:00:00
ubuntu-12.04-standard_12.04-1_i386.tar.gz 124 MB 17/10/2012 02:00:00
The amd64 is nearly double the size because it comes with a pack of i386 packages and ia32libs (which I remove from my amd64 containers with seemingly no impact whatsoever):
# 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:
bluez-alsa:i386 gcc-4.6-base:i386 glib-networking:i386 gstreamer0.10-plugins-base:i386 gstreamer0.10-plugins-good:i386 gtk2-engines:i386
gtk2-engines-murrine:i386 gtk2-engines-oxygen:i386 gtk2-engines-pixbuf:i386 gvfs:i386 gvfs-libs:i386 ia32-libs ia32-libs-multiarch:i386
ibus-gtk:i386 libaa1:i386 libacl1:i386 libaio1:i386 libao4:i386 libasn1-8-heimdal:i386 libasound2:i386 libasound2-plugins:i386 libasyncns0:i386
libatk1.0-0:i386 libattr1:i386 libaudio2:i386 libaudiofile1:i386 libavahi-client3:i386 libavahi-common-data:i386 libavahi-common3:i386
libavc1394-0:i386 libbz2-1.0:i386 libc6:i386 libcaca0:i386 libcairo-gobject2:i386 libcairo2:i386 libcanberra-gtk-module:i386 libcanberra-gtk0:i386
libcanberra0:i386 libcap2:i386 libcapi20-3:i386 libcdparanoia0:i386 libcomerr2:i386 libcroco3:i386 libcups2:i386 libcupsimage2:i386 libcurl3:i386
libdatrie1:i386 libdb5.1:i386 libdbus-1-3:i386 libdbus-glib-1-2:i386 libdrm2:i386 libdv4:i386 libesd0:i386 libexif12:i386 libexpat1:i386
libffi6:i386 libflac8:i386 libfontconfig1:i386 libfreetype6:i386 libgail-common:i386 libgail18:i386 libgcc1:i386 libgconf-2-4:i386 libgcrypt11:i386
libgd2-xpm:i386 libgdbm3:i386 libgdk-pixbuf2.0-0:i386 libgettextpo0:i386 libgl1-mesa-glx:i386 libglapi-mesa:i386 libglib2.0-0:i386
libglu1-mesa:i386 libgnome-keyring0:i386 libgnutls26:i386 libgomp1:i386 libgpg-error0:i386 libgphoto2-2:i386 libgphoto2-port0:i386 libgpm2:i386
libgssapi-krb5-2:i386 libgssapi3-heimdal:i386 libgstreamer-plugins-base0.10-0:i386 libgstreamer0.10-0:i386 libgtk2.0-0:i386 libgudev-1.0-0:i386
libhcrypto4-heimdal:i386 libheimbase1-heimdal:i386 libheimntlm0-heimdal:i386 libhx509-5-heimdal:i386 libibus-1.0-0:i386 libice6:i386 libidn11:i386
libiec61883-0:i386 libieee1284-3:i386 libjack-jackd2-0:i386 libjasper1:i386 libjpeg-turbo8:i386 libjpeg8:i386 libjson0:i386 libk5crypto3:i386
libkeyutils1:i386 libkrb5-26-heimdal:i386 libkrb5-3:i386 libkrb5support0:i386 liblcms1:i386 libldap-2.4-2:i386 libltdl7:i386 libmad0:i386
libmikmod2:i386 libmng1:i386 libmpg123-0:i386 libncurses5:i386 libncursesw5:i386 libnspr4:i386 libnss3:i386 libodbc1:i386 libogg0:i386
libopenal1:i386 liborc-0.4-0:i386 libp11-kit0:i386 libpango1.0-0:i386 libpcre3:i386 libpixman-1-0:i386 libpng12-0:i386 libproxy1:i386
libpulse-mainloop-glib0:i386 libpulse0:i386 libpulsedsp:i386 libqt4-dbus:i386 libqt4-declarative:i386 libqt4-designer:i386 libqt4-network:i386
libqt4-opengl:i386 libqt4-qt3support:i386 libqt4-script:i386 libqt4-scripttools:i386 libqt4-sql:i386 libqt4-svg:i386 libqt4-test:i386
libqt4-xml:i386 libqt4-xmlpatterns:i386 libqtcore4:i386 libqtgui4:i386 libqtwebkit4:i386 libraw1394-11:i386 libroken18-heimdal:i386 librsvg2-2:i386
librsvg2-common:i386 librtmp0:i386 libsamplerate0:i386 libsane:i386 libsasl2-2:i386 libsdl-image1.2:i386 libsdl-mixer1.2:i386 libsdl-net1.2:i386
libsdl-ttf2.0-0:i386 libsdl1.2debian:i386 libselinux1:i386 libshout3:i386 libslang2:i386 libsm6:i386 libsndfile1:i386 libsoup-gnome2.4-1:i386
libsoup2.4-1:i386 libspeex1:i386 libspeexdsp1:i386 libsqlite3-0:i386 libssl0.9.8:i386 libssl1.0.0:i386 libstdc++5:i386 libstdc++6:i386
libtag1-vanilla:i386 libtag1c2a:i386 libtasn1-3:i386 libtdb1:i386 libthai0:i386 libtheora0:i386 libtiff4:i386 libtinfo5:i386 libudev0:i386
libunistring0:i386 libusb-0.1-4:i386 libuuid1:i386 libv4l-0:i386 libv4lconvert0:i386 libvisual-0.4-0:i386 libvorbis0a:i386 libvorbisenc2:i386
libvorbisfile3:i386 libwavpack1:i386 libwind0-heimdal:i386 libwrap0:i386 libx11-6:i386 libx11-xcb1:i386 libxau6:i386 libxaw7:i386 libxcb-glx0:i386
libxcb-render0:i386 libxcb-shm0:i386 libxcb1:i386 libxcomposite1:i386 libxcursor1:i386 libxdamage1:i386 libxdmcp6:i386 libxext6:i386
libxfixes3:i386 libxft2:i386 libxi6:i386 libxinerama1:i386 libxml2:i386 libxmu6:i386 libxp6:i386 libxpm4:i386 libxrandr2:i386 libxrender1:i386
libxslt1.1:i386 libxss1:i386 libxt6:i386 libxtst6:i386 libxv1:i386 libxxf86vm1:i386 odbcinst1debian2:i386 xaw3dg:i386 zlib1g:i386
0 upgraded, 0 newly installed, 224 to remove and 0 not upgraded.
After this operation, 202 MB disk space will be freed.
Regards to all
Warwick
I have spent about 3 hours scouring this forum, the OpenVZ documentation and related projects trying to find some definitive information on what exactly the difference is between running an i386 vs a x86_64 template in a container.
Below is a long winded background to the following questions:
1. Outside of a need to run 32-bit compiled applications, is the only preference for i386 templates because for most standard uses (read < 4G RAM) that they use less of the host memory than an x86_64 template?
2. What is the reason for the inclusion of the 32-bit packages in the amd64 template and is it safe to remove them as I have?
3. Given that it is the host kernel that manages the memory, does this mean that if > 4G of RAM is allocated to an i386 container that the 4G 32-bit memory limit applies per process rather than for the total memory consumed by the container?
4. Does Proxmox's kernel have PAE support and how would/does this affect the i386 template?
At the outset, it is clear that the primary distinction is that the binaries in the i386 template are compiled for a 32-bit architecture:
# 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
And the binaries in the x86_64 template are compiled for a 64-bit architecture ( file /bin/bash ):
# 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
There is discussion on this topic at:
http://forum.proxmox.com/threads/13349-Proxmox-Templates-32-bit
http://pve.proxmox.com/wiki/FAQ#Why_do_you_recommend_32-bit_guests_over_64_bit_guests.3F
And the OpenVZ wiki says the following:
"There isn't much of a reason to run a 64bit container; however, there a (sic) memory management benefits to be had from running a 64bit hardware node." -- http://openvz.org/Making_template_tools_to_work_on_x86_64
The Proxmox FAQ says:
Why do you recommend 32-bit guests over 64 bit guests?
- 64-bit makes sense only if you need greater than 4GB of memory.
- 32-bit guests use less memory in certain situations
e.g. a standard installation of apache2 on 64 bit containers consumes much more memory than on 32 bit.
In the case of Ubuntu 12.04, there are two templates:
ubuntu-12.04-standard_12.04-1_amd64.tar.gz 205 MB 17/10/2012 02:00:00
ubuntu-12.04-standard_12.04-1_i386.tar.gz 124 MB 17/10/2012 02:00:00
The amd64 is nearly double the size because it comes with a pack of i386 packages and ia32libs (which I remove from my amd64 containers with seemingly no impact whatsoever):
# 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:
bluez-alsa:i386 gcc-4.6-base:i386 glib-networking:i386 gstreamer0.10-plugins-base:i386 gstreamer0.10-plugins-good:i386 gtk2-engines:i386
gtk2-engines-murrine:i386 gtk2-engines-oxygen:i386 gtk2-engines-pixbuf:i386 gvfs:i386 gvfs-libs:i386 ia32-libs ia32-libs-multiarch:i386
ibus-gtk:i386 libaa1:i386 libacl1:i386 libaio1:i386 libao4:i386 libasn1-8-heimdal:i386 libasound2:i386 libasound2-plugins:i386 libasyncns0:i386
libatk1.0-0:i386 libattr1:i386 libaudio2:i386 libaudiofile1:i386 libavahi-client3:i386 libavahi-common-data:i386 libavahi-common3:i386
libavc1394-0:i386 libbz2-1.0:i386 libc6:i386 libcaca0:i386 libcairo-gobject2:i386 libcairo2:i386 libcanberra-gtk-module:i386 libcanberra-gtk0:i386
libcanberra0:i386 libcap2:i386 libcapi20-3:i386 libcdparanoia0:i386 libcomerr2:i386 libcroco3:i386 libcups2:i386 libcupsimage2:i386 libcurl3:i386
libdatrie1:i386 libdb5.1:i386 libdbus-1-3:i386 libdbus-glib-1-2:i386 libdrm2:i386 libdv4:i386 libesd0:i386 libexif12:i386 libexpat1:i386
libffi6:i386 libflac8:i386 libfontconfig1:i386 libfreetype6:i386 libgail-common:i386 libgail18:i386 libgcc1:i386 libgconf-2-4:i386 libgcrypt11:i386
libgd2-xpm:i386 libgdbm3:i386 libgdk-pixbuf2.0-0:i386 libgettextpo0:i386 libgl1-mesa-glx:i386 libglapi-mesa:i386 libglib2.0-0:i386
libglu1-mesa:i386 libgnome-keyring0:i386 libgnutls26:i386 libgomp1:i386 libgpg-error0:i386 libgphoto2-2:i386 libgphoto2-port0:i386 libgpm2:i386
libgssapi-krb5-2:i386 libgssapi3-heimdal:i386 libgstreamer-plugins-base0.10-0:i386 libgstreamer0.10-0:i386 libgtk2.0-0:i386 libgudev-1.0-0:i386
libhcrypto4-heimdal:i386 libheimbase1-heimdal:i386 libheimntlm0-heimdal:i386 libhx509-5-heimdal:i386 libibus-1.0-0:i386 libice6:i386 libidn11:i386
libiec61883-0:i386 libieee1284-3:i386 libjack-jackd2-0:i386 libjasper1:i386 libjpeg-turbo8:i386 libjpeg8:i386 libjson0:i386 libk5crypto3:i386
libkeyutils1:i386 libkrb5-26-heimdal:i386 libkrb5-3:i386 libkrb5support0:i386 liblcms1:i386 libldap-2.4-2:i386 libltdl7:i386 libmad0:i386
libmikmod2:i386 libmng1:i386 libmpg123-0:i386 libncurses5:i386 libncursesw5:i386 libnspr4:i386 libnss3:i386 libodbc1:i386 libogg0:i386
libopenal1:i386 liborc-0.4-0:i386 libp11-kit0:i386 libpango1.0-0:i386 libpcre3:i386 libpixman-1-0:i386 libpng12-0:i386 libproxy1:i386
libpulse-mainloop-glib0:i386 libpulse0:i386 libpulsedsp:i386 libqt4-dbus:i386 libqt4-declarative:i386 libqt4-designer:i386 libqt4-network:i386
libqt4-opengl:i386 libqt4-qt3support:i386 libqt4-script:i386 libqt4-scripttools:i386 libqt4-sql:i386 libqt4-svg:i386 libqt4-test:i386
libqt4-xml:i386 libqt4-xmlpatterns:i386 libqtcore4:i386 libqtgui4:i386 libqtwebkit4:i386 libraw1394-11:i386 libroken18-heimdal:i386 librsvg2-2:i386
librsvg2-common:i386 librtmp0:i386 libsamplerate0:i386 libsane:i386 libsasl2-2:i386 libsdl-image1.2:i386 libsdl-mixer1.2:i386 libsdl-net1.2:i386
libsdl-ttf2.0-0:i386 libsdl1.2debian:i386 libselinux1:i386 libshout3:i386 libslang2:i386 libsm6:i386 libsndfile1:i386 libsoup-gnome2.4-1:i386
libsoup2.4-1:i386 libspeex1:i386 libspeexdsp1:i386 libsqlite3-0:i386 libssl0.9.8:i386 libssl1.0.0:i386 libstdc++5:i386 libstdc++6:i386
libtag1-vanilla:i386 libtag1c2a:i386 libtasn1-3:i386 libtdb1:i386 libthai0:i386 libtheora0:i386 libtiff4:i386 libtinfo5:i386 libudev0:i386
libunistring0:i386 libusb-0.1-4:i386 libuuid1:i386 libv4l-0:i386 libv4lconvert0:i386 libvisual-0.4-0:i386 libvorbis0a:i386 libvorbisenc2:i386
libvorbisfile3:i386 libwavpack1:i386 libwind0-heimdal:i386 libwrap0:i386 libx11-6:i386 libx11-xcb1:i386 libxau6:i386 libxaw7:i386 libxcb-glx0:i386
libxcb-render0:i386 libxcb-shm0:i386 libxcb1:i386 libxcomposite1:i386 libxcursor1:i386 libxdamage1:i386 libxdmcp6:i386 libxext6:i386
libxfixes3:i386 libxft2:i386 libxi6:i386 libxinerama1:i386 libxml2:i386 libxmu6:i386 libxp6:i386 libxpm4:i386 libxrandr2:i386 libxrender1:i386
libxslt1.1:i386 libxss1:i386 libxt6:i386 libxtst6:i386 libxv1:i386 libxxf86vm1:i386 odbcinst1debian2:i386 xaw3dg:i386 zlib1g:i386
0 upgraded, 0 newly installed, 224 to remove and 0 not upgraded.
After this operation, 202 MB disk space will be freed.
Regards to all
Warwick
Last edited: