  In this paper, we consider modulation codes for practical multilevel flash
memory storage systems with cell levels. Instead of maximizing the lifetime of
the device [Ajiang-isit07-01, Ajiang-isit07-02,
Yaakobi_verdy_siegel_wolf_allerton08, Finucane_Liu_Mitzenmacher_aller08], we
maximize the average amount of information stored per cell-level, which is
defined as storage efficiency. Using this framework, we show that the
worst-case criterion [Ajiang-isit07-01, Ajiang-isit07-02,
Yaakobi_verdy_siegel_wolf_allerton08] and the average-case criterion
[Finucane_Liu_Mitzenmacher_aller08] are two extreme cases of our objective
function. A self-randomized modulation code is proposed which is asymptotically
optimal, as, for an arbitrary input alphabet and i.i.d. input distribution.
  In practical flash memory systems, the number of cell-levels is only
moderately large. So the asymptotic performance as may not tell the whole
story. Using the tools from load-balancing theory, we analyze the storage
efficiency of the self-randomized modulation code. The result shows that only a
fraction of the cells are utilized when the number of cell-levels is only
moderately large. We also propose a load-balancing modulation code, based on a
phenomenon known as "the power of two random choices" [Mitzenmacher96thepower],
to improve the storage efficiency of practical systems. Theoretical analysis
and simulation results show that our load-balancing modulation codes can
provide significant gain to practical flash memory storage systems. Though
pseudo-random, our approach achieves the same load-balancing performance, for
i.i.d. inputs, as a purely random approach based on the power of two random
choices.
