Almost every Android user has unsatisfying experiences regarding responsiveness, in particular Application Not Responding (ANR) and System Not Responding (SNR) that directly disrupt user experience. Unfortunately, the community have limited understanding of the prevalence, characteristics, and root causes of unresponsiveness. In this paper, we make an in-depth study of ANR and SNR at scale based on fine-grained system-level traces crowdsourced from 30,000 Android systems. We find that ANR and SNR occur prevalently on all the studied 15 hardware models, and better hardware does not seem to relieve the problem. Moreover, as Android evolves from version 7.0 to 9.0, there are fewer ANR events but more SNR events. Most importantly, we uncover multifold root causes of ANR and SNR and pinpoint the largest pathology which roots in Android's flawed implementation of Write Amplification Mitigation (WAM). We design a practical approach to eliminating this largest root cause; after large-scale deployment, it reduces almost all (>99%) ANR and SNR caused by WAM while only decreasing 3% of the data write speed. We will release our measurement code and data to the research community.
Currently, we have partially released our measurement code and data as follows.
We plan to release all code and data after we get approval from the authority.
We provide the code of this study on github.
Monitor Infrastructure
The monitor infrastructure in our Android-MOD is implemented in Monitor.java
Root Cause Analysis Pipeline
Our root cause analysis pipeline is implemented in Pipeline.java
Regular Expressions
Our leveraged regular expressions are listed in Regex.java
We provide some measurement data on github.
The attributes of each ANR/SNR event in the data are organized as follows:
report_id
The ID of a reported event.
android_version
The Android version.
type
The type of the event. Specifically, exp_anr
denotes an ANR event and exp_jwdt
denotes an SNR event.
pid
The ID of the app/critical process.
process_name
The name of the app/critical process.
log
The file name of the log file.