关于data2ext/data2sd的一些原理说明

2010-12-07 更新:

这些天研究IO效率有个很大的收获,就是电池对于系统流畅度的影响。为什么苹果要设计为电池不可更换,一方面是为了保持手机体积更小(可以不用设计坚固的电池仓),另一方面估计就是为了可以开大缓存,无需随时写入数据.苹果的系统,无论iOS还是OSX都很流畅,他们都是大量使用了缓存技术,而用了缓存的最大问题就是失电导致的数据丢失,苹果无论是笔记本还是手持设备,都设计为电池固化,这样就没有任何机会让设备失电(即使快没电的情况,操作系统也可以控制强制关机而不会导致存储掉电),带来的巨大好处就是文件系统可以设计为完全没有日志,巨大的缓存。而其他可以随意更换电池的手机因为要考虑到用户的各种白痴或者暴力行为对电源带来的不稳定性,因此必须经常做IO来保存数据,无论是写日志还是频繁同步,这种IO层的操作速度相对于CPU和内存来说都是极慢的,因此导致这些设备的整体流畅度大打折扣,验证这但只需要做一个简单的实验:让PC机整理硬盘,此时做任何操作都比不整理的时候迟钝许多。而没有固化电池的手机为了数据完整性,就好象随时在做磁盘整理一样。感觉苹果偷偷搞得这些小把戏从来不公开说出来,但确实很有效。有些人说苹果不能换电池是为了多卖机器我倒不太认同,以果粉的疯狂购买力,他应该不需要这么下流的手段来制造更多需求。

_______________________________________________________________________

2010-12-05 更新:

從我個人角度,因為原來的app2sd/app2ext/a2sd/a2sd+的方式沒有對SD卡的分區格式進行統一優化,因此在不同的手機上有不同的表現,而且無法解決持續安裝應用問題,實際遊戲過程中,也會因為SD卡的IO沒有優化過所有會有卡頓現象

IO是HTC的軟肋(更是棒子機的軟肋),看看Quandrant的跑分參照,moto的手機對io優化最好,所以moto手機非常均衡,成為android銷量第一是有道理的,一個手機或者說一個系統是否好用的標準就要看他的各項軟硬件表現是否均衡,從跑分中應該得到所有顏色的條塊長度相等是最完美的,不會浪費任何一部分的硬件能力,相對來說的HTC默認系統的IO得分就太低了,當然棒子機的默認系統的IO得分更低使我稍微優點釋懷(不厚道哈)

對我的使用場景而言,我是要安裝200個以上的第三方應用的,算上Desire HD手機自帶的應用200多個,一共是440個左右的軟件遊戲要安裝到手機上隨時可以用,這種需求,無論是MTD修改法、HBOOT修改法、還是各種app2XXX都是無法滿足的,我之前為了多安裝一些軟件不得不艱難的決定刪除哪個老軟件,非常的不爽,只有data2ext完全解決了我的問題。

繼續說data2ext,這是一個參考了data2sd的方案,data2sd這個方案在很早的時候我就再關注,當時i9000默認系統因為極度低下的IO效率造成手機非常難用,當時就看到xda若干個解決卡頓的方案,其中就有data2sd這種,當時自用desire聽順暢就沒有深入研究,同時感覺data2sd通過分區上再建立虛擬分區的方式理論上應該是更慢更費電才對所以也沒有仔細的看。直到近期查閱了google才知道在系統優化方法上確實有這麼一招,就是將大量頻繁讀寫的小文件做成一個單獨的大文件提高系統效率,於是我便全身心投入研究中。。

最初的data2sd將整個分區變成一個ext2的虛擬設備,自己用了一下,確實玩兒遊戲還不錯,但是隨時出現的卡頓有點難以忍受,於是著手解決持續的流暢度問題,繼續研究了各種文件系統,嘗試過或者研究過nilfs2,reiserfs,brtfs,reiser4,最終定稿ext4,因為他的穩定和均衡。

原來默認data2sd方式使用的是ext2分區,缺少對大文件的支持,我對我400個應用安裝後的手機文件做了一個統計,只是看/data/data分區(因為這裡讀寫最多),其中小於4k的文件只有1/4,佔用空間不足10M,而大於4k的文件卻佔了200多M,因此ext2缺少大文件支持的特性就會導致他的效率不會很高,而ext4可以更好的支持大文件。所以最終使用了ext4

還有一個重大優化在於ext4的blocksize,默認情況下,手機會根據分區大小自動選擇block size,這樣在小於1G的分區情況下會使用1024bytes的block,嚴重增加IO數量,基於我上邊的統計,1/4的小文件佔用10M,而超過4k的文件佔了200多M,因此強制制定4096bytes block並不會顯著引起空間浪費,同時卻帶來了IO效率提高了4倍,於是我就把兩個ext4分區都強制弄成了4096bytes block.

在ext4基礎上的優化又有兩個,一個是開啟writeback方式緩存,另一個是關閉日誌功能,好像在第二個事情的基礎上第一個就不用做了。關閉日誌功能理論上會降低文件系統的穩定性,但是會帶來效率的極大提高,傳統data2sd不加sync的mount方式就是類似無日誌的ext4,但是ext4因為有大文件優化支持,所以關閉日誌的ext4會比不做sync的ext2更好些。

—————————————————————————–

只给有缘人:

ownhere独创之data2ext脚本结合了ext4文件系统的高效稳定伸缩性强的特点以及loopback设备对小文件读写的优势,理论上来说应该是目前SD卡映射方法中最好的一种,在真实的DesireZ和DesireHD上的内部大容量分区做类似处理应该也有很好的效果(目前Desire HD和DZ的IO跑分好像依然杯具,这是因为他用的是ext3系统)

脚本自动判断SD第二分区是否存在,如果存在,并且是系统第一次运行,则会强制重建SD卡第二分区,格式化为ext4格式,同时关闭ext4文件系统的日志功能以获得更高性能,这里顺便说一下ext4,我研究的不多,大概看了一下,他比ext3好的地方在于一些扩展特性,尤其是对大文件的处理,ext系列的文件系统的块大小很小,最大只有4K,与windows的文件系统可以随意指定簇的大小不同。所以在ext4之前的ext?文件系统中处理大文件是有点困难的,主要是因为block太小,在ext4中使用了一个extend特性,可以为大文件连续分配空间,提高读写效率,降低文件系统碎片。同时ext4对小文件的处理也继承了ext系列一直以来灵活稳定的特点,所以ext4是一个高伸缩性的文件系统。

继续说脚本,在ext4文件系统建立后,脚本会自动计算第二分区的总容量,然后除以5,建立1/5大小的虚拟ext2设备,为什么采用ext2,首先因为他很简单,其次是这个虚拟设备是为手机的程序数据准备的,程序数据经常变化,且文件很小,且android系统使用了杯具的sqlite格式数据库,这一切都导致在/data/data下会产生大量的小文件,并且频繁读写,这个事情无论在机身内存还是在SD卡上都是惊人的低效。好在android是一个linux系统,集成了无数linux下的先进概念,在linux中有一种设备较loopback设备,他是用于将一个单独的大文件映射到内存中,把它映射成一个文件系统,这样映射有什么好处呢?他屏蔽了大量小文件的读写请求,可以自动化的把若干个小文件读写请求合并成一个真实的较大的IO请求给真的文件系统(本例中是ext4),极大提高了小文件的读写效率。so, 我创建了一个大的文件来模拟ext2分区,这样,这个大文件可以利用到ext4文件系统的高伸缩性对大文件的良好支持,同时把小文件的读写请求映射到了虚拟设备上,达到了IO的最优化。

我在分析了手机的/data分区的文件特定后得出如下结论:

/data/app和/data/dalvik-cache下的文件很少改动,基本上是一次性写入后就不再改变,并且都是单独的大文件

/data/data,/data/app-private下都是各个应用程序自己的数据文件,很散乱,很小很讨厌。

/data/misc,/data/property,/data/system下是系统的基本配置文件,这些文件有一些在系统引导的时候就已经需要了,所以不能映射,/data/system其实可以映射到虚拟设备上,但是我担心这个目录太核心可能导致不稳定所以就没映射。

基于上述结论,我将/data/app保留在SD卡ext4分区,将/data/dalvik-cache映射回机身内存(避免机身内存空间浪费,且可以分担IO压力)

将/data/data/,/data/app-private,/data/anr映射到ext4上的ext4虚拟设备上

将/data/misc,/data/property,/data/system映射回机身内存,提高稳定性,并且可以保存系统设置。

大概其奏是这些了,都是自己瞎琢磨的,不一定对,希望能起到抛砖引玉的作用,把潜水的高手炸出来。

另外还希望有英语好的朋友能帮我翻译一哈,我更新到我在xda上发的类似帖子里。

通过关于data2ext/data2sd的一些原理说明 – 华为 U8220/U8230 – 安卓论坛 安卓论坛-中国最大Android手机交流社区 – Powered by Discuz!.

 Posted by  at 05:35
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值