Revisiting Storage for Smartphones

FAST’12 的 best paper (迄今为止见过最好的实验报告了)

1 引言

手机设备的存储表现十分重要,而且预期其影响会变得更大,因为以下原因:Storage performance on mobile devices is important for end-user experience today, and its impact is expected to grow due to several reasons(下面几点可以大约归为存在问题

首先,新兴的无线技术比如802.11n(600 Mbps 峰值吞吐量)和802.11ad(7 Gbps 峰值吞吐量)为手机设备均有更高网络吞吐量提供了潜能。First, emerging wireless
technologies such as 802.11n (600 Mbps peak throughput) and 802.11ad (or “60 GHz”, 7 Gbps peak throughput) offer the potential for significantly higher network throughput to mobile devices.(全文测试的一个重点也是测试网络环境下FLASH 的I/O 性能。)

其次,从感观上网络吞吐量增加了,而延时却没有改善。(言下之意就是改善latency 的工作—存储,没有做好。)Second, while network throughput is increasing phenomenally, latency is not.

第三,手机设备越来越被当做电脑来使用,运行了一些之前不能想象的高性能的任务。Third, mobile devices are increasingly being used as the primary computing device, running more performance intensive tasks than previously imagined.

本文工作

  • 详细分析了基于Android 系统的智能手机和flash 存储的I/O 表现 we present a detailed analysis of the I/Obehavior of mobile applications on Android-based smartphones and flash storage drives.
  • 关注的主要应用有:Google Maps, Facebook 和 email . focus on popular applications used by the majority of mobile users, such as, web browsing, app install, Google Maps, Facebook, and email.
  • 提出了pilot solution(试点方案/试点方法)来克服存在的一些问题

 

下面是基于分析和设计工作得出一些观察结果:Through our analysisand design we make several observations

  • 存储影响应用的性能 Storage affects application performance
  • SD 卡标称的速度等级没有实质效果 Speed class considered irrelevant
  • 存储介质越慢越消耗CPU  Slower storage consumes more CPU
  • 对应用的了解有助于高效的解决方法 Application knowledge ensues efficient solutions

 

本文的主要贡献有(和工作有所重叠):

  • 第一,我们介绍了我们定制测量框架,包括自定义安装的固件和基于 Android 设备的软件,用于进行深入地 I/O 分析。 First, we describe our measurement infrastructure that enables custom setup of the firmware and software stack on Android devices to perform in-depth I/O analysis(实验测试软件安装
  • 第二,我们给出了在实际Android 智能机和flash 设备上存储性能的详细分析。Second, we present a detailed analysis of storage performance on real Android smartphones and flash devices;(实验结果,提出问题)
  • 第三,我们提出评估了一种试点解决方法来Third, we propose and evaluate pilot solutions to address the performance issues on mobile devices.

 

2 手机设备综述

Figure 2:是Android 手机的结构图。

archtecture

Figure 3则是Google Nexus One 手机内部NAND flash 和外部(插卡)flash 文件系统存储情况。 Figure 3 shows the internal raw NAND and external flash storage on the Google Nexus One phone.

internalandexternal

应用的数据和配置文件既可以装在内部存储设备,也可以装在外部的SD 卡中。Android 使用了SQLite 数据库作为存储结构化数据的主要方法。(好处就是节省资源) Applications can store configuration and data on the device’s internal storage as well as on the external SD card. Android uses SQLite database as the primary means for storage of structured data.

3 Android 测量工具安装

  • Android Debug Bridge (ADB) [1] on a Linux machine running Ubuntu 10.10

  • 需要通过USB 接口进行反向限制的一些工具,能够格式化存储设备等功能的设备。(最后选用 both CyanogenMod and AOSP distributions)custom partition the storage, and access to a wider range of system tools and Linux utilities for development
  • 为了能够比较不同存储设备的性能,我们改变了Android 系统的init 过程来挂载内部的分区或者是外部的存储设备。compare and contrast application performance on different storage devices. In order to observe and measure all I/O activity, we change Android’s init process to mount the different internal partitions on the external storage
  • 为了比较在wifi 环境下的性能,使用笔记本做了一个ap 搭建了个web 服务。并也使用了USB 连接进行比较
  • SD 卡读写测试(结果如下)

Table 3 是八款SD 卡的读写性能比较,左边的是在工作站的读卡器的速度,右边是在手机上的速度,W/R代表写和读,q/n 代表顺序(sequence)和随机(random)。数据量为100 M顺序读写,随机I/O 大小为4 KB。

eightflash

  • 修改microSD 卡驱动器,使得可以读取/proc 中的“buyness”信息;写了一个后台监控软件定期读取proc 信息;利用blktrace 工具收集块一级的traces。
  • 安装MonkeyRunner 。

完成这些工作后,下面是实验的流程:

  1. 开启监控器,收集资源使用情况并标记PID。First, we start the Monitor tool to collect resource utilization information and note its PID.
  2. 使用MonkeyRunner 启动应用程序。收集触屏信息。Second, we start the application under test using MonkeyRunner which. defines“button actions”to emulate pressing of various keys on the device’s touchscreen.
  3. 当交互操作(按键)进行的时候,记录下CPU 使用信息以定义什么时候交互结束。Third, while the various button actions are being performed. CPU usage is tracked in order to automatically determine the end of an interactive action.
  4. 当一系列的行为完成后,执行必要的清理工作然后返回到Home。 Fourth, once the sequence of actions is completed, we perform necessary cleanup actions and return to the default home screen.
  5. 停止监控器,将资源使用信息返回到主机电脑。Fifth, the Monitor tool is stopped and the resource usage data is dumped to the host computer.

介绍几个 benchmark

  • WebBench 是作者自己写的计量web 浏览性能的程序。
  • AppInstall 安装Google Android Market 十个软件
  • AppLaunch 使用MonkeyRunner 启动
  • Facebook
  • Google Maps
  • Email
  • RLBench 使用SQL 请求对Android SQLite 的综合测试
  • Pulse News  a popular reader app that fetches news articles from a number of websites and stores them locally
  • Background

4 性能评估

这个section 包括四个部分:一、比较internal flash 和SD 卡;二、应用启动时间;三、并发应用;四、CPU 消耗。

首先是internal flash 和SD 卡差距的比较。通过wifi 得到的一些runtime数据(括号里面是Kingston 的数据,这里百分比应该是最好情况和最差情况的之差的比例),The difference between the best and worst case performance varies from 195% (225%) for AppInstall, 80% (1670%) for email, 60% (660%) for Maps, 80% (575%) for Facebook, 130% (2210%) for RLBench, and 97% (168%) for Pulse. 文中分析并实验证实了这个差距是以为对SQLite 的写是随机写,所以性能差距较大,而Kingston 随机写性能表现最差。

第二个启动时间,通过把所有的SD 卡中的应用内容读到RAMdisk 中,进行比较启动时间,差距不大。(我认为可能这里存储并不是瓶颈)

第三个不知所云,里面提到了一个很有意思的是在两个小时中,从网上下载的数据为1.6 MB,但是写入到flash 的量却是30 MB(放大系数为20)。这让我想到了前篇文章 SILT 中提到的读写放大。

第四个是CPU 消耗,发现flash I/O 性能越差,CPU 消耗也越大。

5 解决方案

基于以上分析实验提出了几个解决方法:

  1. 使用更好的存储介质(比如实验中的PCM)
  2. 固件和设备驱动器能够有效地利用好最新的存储设备
  3. 应用软件层次有效地利用存储接口

实验使用了不同的SD 作为baseline(A)、RAID over SD(B)、使用log-structure File System,SQLite on Nilfs2(C)、修改SQLite 接口selective sync(D 这个还不明白)、PCM 相变存储器(E)、All in RAM(F)比较图

compare

 

总算写完了,整篇文章就像一提出问题,分析问题和解决问题的实验报告,工作量比较大,有些内容比较适合于做教科书的一些规则,感觉这也是作为best rewarded paper 的重要原因—有一定理论上的概括。以后写这样的笔记尽量短些吧,太耗时了。