# sysctl hw.machine_arch amd64 vs i386



## bsduni (Aug 4, 2014)

I m a beginner on FreeBSD, and have got a basic doubt.

I have got two identical servers (Dell PowerEdge 850) purchased in a single batch, and were installed with two different FreeBSD versions FreeBSD 9.0 and FreeBSD 9.1, installed by a previous system administrator who is no longer with us.

When I run `sysctl -a | egrep -i 'hw.machine|hw.model|hw.ncpu'` those two servers return different results:

Server 1:

```
# sysctl -a | egrep -i 'hw.machine|hw.model|hw.ncpu'
hw.machine: amd64
hw.model: Intel(R) Pentium(R) D CPU 3.00GHz
hw.ncpu: 2
hw.machine_arch: amd64
```
, and

Server 2:

```
# sysctl -a | egrep -i 'hw.machine|hw.model|hw.ncpu'
hw.machine: i386
hw.model: Intel(R) Pentium(R) D CPU 3.00GHz
hw.ncpu: 2
hw.machine_arch: i386
```
.

I am unable to understand why Server 1 returns 'amd64' for both  `hw.machine` and `hw.machine_arch` for an Intel based system, and whether choosing 'amd64' instead of 'i386' during the FreeBSD Operating System installation might affect the performance of the server in anyway.

Would be grateful if someone could give useful hints or leads. 

Thank you in advance.


----------



## SirDice (Aug 4, 2014)

One server is installed with FreeBSD-AMD64 and the other is running FreeBSD-i386. There is no difference in performance. It's only in very specific cases when AMD64 would be a little bit faster than i386 but overall the performance is exactly the same. The biggest benefit (and the most important reason) for running AMD64 is because applications can access more than 4 GB of memory.


----------



## bsduni (Aug 4, 2014)

Thank you very much for the quick reply.

Initially I was bit confused with `hw.machine_arch` output, as by looking at parameter name I expected that it should reveal the actual hardware platform. Then I guessed it should be the OS. Still worried whether someone chose a wrong version accidentally during the installation.


----------



## SirDice (Aug 4, 2014)

If the machines have 4 GB or less of memory i386 is usually a better choice. Although a lot of people will install amd64 to prepare for any future memory upgrades. You can't easily change from i386 to amd64 or vice verse. 

If the machines do what they're supposed to do I'd leave them be, only upgrade them. If the FreeBSD-9.0 is i386 I'd probably see if I could reinstall the machine. FreeBSD 9.0 is end-of-life and shouldn't be used anymore. But upgrading it to FreeBSD 9.3-RELEASE and leaving it at i386 is possible. It all depends on what they do.


----------



## bsduni (Aug 4, 2014)

Thank you again. The servers have got 2 GB RAM only. 

Notably, the kernel on the Server 1, which returns AMD64 and got FreeBSD 9.0, has been modified to get access to raw time counters (like CLOCK_MONOTONIC_RAW in Linux) for an experiment. I find issues in the execution of experiment codes on the Server 1, and unfortunately I cannot test on Server 2 which is in production for a different purpose. 

Now, when I modified the experiment code and tried to recompile it, some required ports (autotools, etc) could not be installed/found on/for FreeBSD 9.0. So I am thinking of profiling the FreeBSD 9.0 over a machine with FreeBSD 9.3 to continue working the experiment code (for compiling, etc) and the existing server intact with the modified kernel. 

Fingers crossed.


----------

