  Leveraging multi-carrier access offers a promising approach to boosting
access quality in mobile networks. However, our experiments show that the
potential benefits are hard to fulfill due to fundamental limitations in the
network-controlled design. To overcome these limitations, we propose iCellular,
which allows users to define and intelligently select their own cellular
network access from multiple carriers. iCellular reuses the existing
device-side mechanisms and the standard cellular network procedure, but
leverages the end device's intelligence to be proactive and adaptive in
multi-carrier selection. It performs adaptive monitoring to ensure responsive
selection and minimal service disruption, and enhances carrier selection with
online learning and runtime decision fault prevention. It is deployable on
commodity phones without any infrastructure/hardware change. We implement
iCellular on commodity Nexus 6 phones and leverage Google Project-Fi's efforts
to test multi-carrier access among two top US carriers: T-Mobile and Sprint.
Our experiments confirm that iCellular helps users with up to 3.74x throughput
improvement (7x suspension and 1.9x latency reduction) over the state-of-art
selection. Moreover, iCellular locates the best-quality carrier in most cases,
with negligible overhead on CPU, memory and energy consumption.
