Why does my Mac OS X 10.6 kernel run in 32-bit mode?
In Jon Siracusa's Review of Snow Leopard he discusses the 64-bit transition.
The short version is: because there's no 'mixed-mode' a 64-bit kernel requires 64-bit Kernel Extensions and Drivers.
As those aren't widely available yet, Apple chose to default to 32-bit to avoid breaking lots of things.
Instructions from the article:
For all K64-capable Macs, boot while holding down "6" and "4" keys simultaneously to select the 64-bit kernel. For a more permanent solution, use the nvram command to add
arch=x86_64
to yourboot-args
string, or edit the file/Library/Preferences/SystemConfiguration/com.apple.Boot.plist
and addarch=x86_64
to the Kernel Flags string:
...
<key>Kernel</key>
<string>mach_kernel</string>
<key>Kernel Flags</key>
<string>arch=x86_64</string>
...
To switch back to the 32-bit kernel, hold down the "3" and "2" keys during boot, or use one of the techniques above, replacing "x86_64" with "i386".
According to what has been leaked to MacRumors (since the official documents are under NDA) (Source) only the following computers support running the 64-bit kernel:
- Early 2008 Mac Pro (MacPro 3,1)
- Early 2008 Xserve (Xserve 2,1)
- MacBook Pros (15"/17") (MacBookPro 4,1)
- 2008 iMacs (iMac 8,1)
- Unibody MacBook Pros (MacBookPro 5,1 and 5,2)
- Early 2009 Mac Pro (MacPro 4,1)
- 2009 iMacs (iMac 9,1)
- Early 2009 Xserve (Xserve 3,1).
Only the XServes use the 64-bit kernel by default.
If you start up the computer holding the 6 and 4 keys you will start up the 64-bit kernel, or according to another source breaking their NDA you can edit /Library/Preferences/SystemConfiguration/com.apple.Boot.plist
adding a kernel flag or do it in the nvram.
There is not much benefit to running a 64-bit kernel in Snow Leopard, unlike most other operating systems. In Windows and Linux, you need a 64-bit kernel to run 64-bit applications. On OS X, you can run 64-bit applications with the 32-bit kernel.
Most people seem to be concerned that running the 32-bit kernel in OS X limits the performance or capabilities of their machines, but in practice this doesn't have a significant material impact. The 32-bit kernel supports running 64-bit applications, and those apps have a virtual 64-bit address space that gets mapped to a 36-bit PAE address space by the kernel, so they behave the same as they would on a 64-bit kernel, just with more constrained memory usage and memory-mapped I/O to the usable range. The way Apple handles this address space in the 32-bit kernel results in a 32 GB limit for physical memory, breaking the 4 GB 32-bit limit with PAE. Performance-wise there isn't much of a benefit, if there is a measurable one at all with using a 64-bit kernel with 32 GB of memory or less. If you want to, you can test some benchmarks yourself when you force-boot with the 64-bit kernel by holding the 6 and 4 keys at startup. I doubt you would see and significant difference in performance.
The other issue is compatibility with device drivers, kernel extensions, and the device's firmware. For device drivers and kernel extensions, they need to match bit-ness, be recompiled, or rewritten (especially if they have any assembly, which portions are common in those types of code). Apple's EFI originally came in 32-bit only, and more recently some models have 64-bit firmware. For the operating system to talk to the firmware, the bit-ness of the kernel and the EFI have to match. Things that involve talking to EFI are things like choosing a startup disk or some power management controls (like if you have more than one OS X installation and you need to wake from sleep after the battery has run out).
So would a 64-bit kernel be a benefit? Performance-wise not really in practice, and I can see the wisdom with Apple using 32-bit kernels for most of the machines running Snow Leopard for better compatibility.