What is the difference between x86_64 and i386 templates/containers

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
 
Last edited:
i386 is 32-bit, amd64 is 64-bit.

for such questions (and answers), google is your friend.
 
i386 is 32-bit, amd64 is 64-bit.

for such questions (and answers), google is your friend.

Tom, crikey - I'm not an idiot. Where in my post do I ask what the difference is between i386 and amd64?

In case there was too much cruft, the questions again:
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?
 
well "ridiculous" to me is you deciding to get on such a kind of a platform depending on that (free) answer..
you can also use pve without subscription, btw.

back to the question:

do you know if normally 64 bit systems corresponding to those templates have those 32 libs? (say, ubuntu 12.04)
if yes, you shoud ask ubuntu why is it so, not proxmox.
and, I am not an expert, but 64 bit can also execute 32 bit apps, so could that be the case? I mean the coud be needed for compatibility with some apps, dependencies, or building...

Marco
 
Last edited:

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!