One gentle reader offered this feedback on our recent ZFS article:
64 bits would have been plenty ... but then you can't talk out of your ass about boiling oceans then, can you?
Well, it's a fair question. Why did we make ZFS a 128-bit storage system? What on earth made us think it's necessary? And how do we know it's sufficient?
Let's start with the easy one: how do we know it's necessary?
Some customers already have datasets on the order of a petabyte, or 250 bytes. Thus the 64-bit capacity limit of 264 bytes is only 14 doublings away. Moore's Law
for storage predicts that capacity will continue to double every
9-12 months, which means we'll start to hit the 64-bit limit in
about a decade. Storage systems tend to live for several decades,
so it would be foolish to create a new one without anticipating the
needs that will surely arise within its projected lifetime.
If 64 bits isn't enough, the next logical step is 128 bits.
That's enough to survive Moore's Law until I'm dead, and after that,
it's not my problem. But it does raise the question: what are the
theoretical limits to storage capacity?
Although we'd all like Moore's Law to continue forever, quantum
mechanics imposes some fundamental limits on the computation rate
and information capacity of any physical device. In particular,
it has been shown that 1 kilogram of matter confined to 1 liter
of space can perform at most 1051 operations per second
on at most 1031 bits of information [see Seth Lloyd,
"Ultimate physical limits to computation." Nature 406, 1047-1054
(2000)]. A fully-populated 128-bit storage pool would contain
2128 blocks = 2137 bytes = 2140
bits; therefore the minimum mass required to hold the bits would be
(2140 bits) / (1031 bits/kg) = 136 billion
That's a lot of gear.
To operate at the 1031 bits/kg limit, however, the
entire mass of the computer must be in the form of pure energy.
By E=mc2, the rest energy of 136 billion kg is
1.2x1028 J. The mass of the oceans is about 1.4x1021 kg. It takes about 4,000 J to raise the
temperature of 1 kg of water by 1 degree Celcius, and thus about
400,000 J to heat 1 kg of water from freezing to boiling.
The latent heat of vaporization adds another 2 million J/kg.
Thus the energy required to boil the oceans is about
2.4x106 J/kg \* 1.4x1021 kg =
3.4x1027 J. Thus, fully populating a 128-bit
storage pool would, literally, require more energy than boiling