By Jonathan Corbet
July 10, 2012
ARM is one of the most successful processor architectures ever created;
most of us possess several ARM cores for every x86 processor we have. ARM
is very much thought of as an embedded systems processor; it is focused on
minimal power use and the ability to be built into a variety of system-on-chip
configurations. The "small systems" image of ARM is certainly encouraged
by the fact that ARM processors are all 32-bit only. That situation is
about to change, though, with the arrival of 64-bit ARM processors. Linux
will be ready for these systems — the first set of 64-bit ARM support
patches have just been posted — but there is still some debate around a
couple of fundamental decisions.
One might well wonder whether a 64-bit ARM processor is truly needed.
64-bit computing seems a bit rich even for the fanciest handsets or
tablets, much less for the kind of embedded controllers where ARM
processors predominate. But mobile devices are beginning to push the
memory-addressing limits of 32-bit systems; even a 1GB system requires the
use of high memory in most configurations. So, even if the heavily
foreshadowed ARM server systems never materialize, there will be a need for
64-bit ARM processors just to be able to efficiently use the memory that
future mobile devices will have. "Mobile" and "embedded" no longer mean
"tiny."
Naturally, Linux support is an important precondition to a successful
64-bit ARM processor introduction, so ARM has been supporting work in that
area for some time. The initial GCC
patches were posted back in May, and the first
set of kernel patches was posted by Catalin Marinas on July 6.
All this code exists despite the fact that no 64-bit ARM hardware is yet
available; it all has been developed on simulators. Once the hardware
shows up, with luck, the software will work with a minimum of tweaking
required.
64-bit ARM support involves the addition of thousands of lines of new code
via a 36-part patch set. There are some novel features, such as the
ability to run with a 64KB native memory page size, and a lot of important
technical decisions to be reviewed. So the kernel developers did what one
would expect: they started complaining about the name given to the
architecture. That name ("AArch64") strikes many as simultaneously
redundant (of course it is an architecture) and uninformative (what does
"A" stand for?). Many would prefer either ARMv8 (which is the actual
hardware architecture name—"AArch64" is ARMv8's 64-bit operating mode) or
arm64.
Arguments in favor of the current name include the fact that it is already used
to identify the architecture in the ELF triplet used in binaries; using the
same name everywhere should help to reduce confusion. But, then, as Arnd
Bergmann noted: "If everything else
is aarch64, we should use that in the kernel
directory too, but if everyone calls it arm64 anyway, we should
probably use that name for as many things as possible."
Jon Masters added that, in classic
contrarian style, he likes the name as it is; Fedora is planning to use
"aarch64" as the name for its 64-bit ARM releases. Others, such as Ingo Molnar, argue in favor of changing the
name now when it is relatively easy to do. Catalin seems inclined to keep the current name but
says he will think about it before posting the next version of the patch
series.
An arguably more substantive question was raised by a number of developers:
wouldn't it make more sense to unify the 32-bit and 64-bit ARM
implementations from the outset? A number of other architectures (x86,
PowerPC, SPARC, and MIPS) all started with separate implementations, but
ended up merging them later on, usually with some significant pain involved. Rather
than leave that pain for future ARM developers, it has been suggested that,
perhaps, it would be better to start with a unified implementation.
There are a lot of reasons given for the separate 64-bit ARM architecture
implementation. Much of the relevant thinking can be found in this note from Arnd. The 64-bit ARM
instruction set is completely different from the 32-bit variety, to the
point that there is no possibility of writing assembly code that works on
both architectures. The system call interfaces also differ significantly,
with the 64-bit version taking a more standard approach and leaving a lot
of legacy code behind. The 64-bit implementation hopes to leave the entire
32-bit ARM "platform" concept behind as well; indeed, as Jon put it, there are hopes that it will be
possible to have a single kernel binary that runs on all 64-bit ARM systems from the
outset. In general, it is said, giving AArch64 a clean start in its own
top-level hierarchy will make it possible to leave a lot of ARM baggage
behind and will result in a better implementation overall.
Others were quick to point out that most of these arguments have been heard
in the context of other architectures. x86_64 was also meant to be a clean
start that dumped a lot of old i386 code. In the end, things have turned
out otherwise. It may be possible that things are different here; 32-bit
ARM has rather more legacy baggage than other architectures did, and the
processor differences seem to be larger. Some have said that the proper
comparison is with x86 and ia64, though one gets the sense that the
AArch64 developers don't want to be seen in the same light as ia64 in
general.
This decision will come down to what the AArch64 developers want, in the
end; it's up to them to produce a working implementation and to maintain it
into the future. If they insist that it should be a separate top-level
architecture, it is unlikely that others will block its merging for that
reason alone. Of course, it will also be up to those developers to manage
a merger of the two in the future, should that prove to be necessary. If
nothing else, life as a separate top-level architecture will allow some
experimentation without the fear of breaking older 32-bit systems; the
result could be a better unified architecture some years from now, should
things move in that direction.
Thus far, there has been little in the way of deeper technical criticism of
the AArch64 patch set. Things may stay that way. The code has already
been through a number of rounds of private review involving prominent
developers, so the worst problems should already have been found and
addressed. Few developers have the understanding of this new processor
that would be necessary to truly understand much of the code. So it may go
into the mainline kernel (perhaps as early as 3.7) without a whole lot of
substantial changes. After that, all that will be needed is actual
hardware; then things should get truly interesting.
(
Log in to post comments)