一、/dev/block

root@:/dev/block #ls

bootdevice

mmcblk0

mmcblk0p1

mmcblk0p10

…….

mmcblk0p18

mmcblk0p19

mmcblk0p2

mmcblk0p20

……

mmcblk0p29

mmcblk0p3

mmcblk0p30

……

mmcblk0rpmb

platform

dd命令直接操作

分区的创建过程:

LK获取分区信息

smem_ptable_init()从SMEM的entry SMEM_AARM_PARTITION_TABLE中读取分区信息,保存在smem_ptable结构中(hard coded)。调用smem_add_modem_partitions()将smem_ptable中的内容解析出来保存在flash_ptable中.

将分区信息传递给kernel

Lk将分区信息打包成atag形式传递给kernel,让kernel知道分区信息。

target_atag_mem()->flash_get_ptable()

Kernelget the partition info and add partition:

blkdev_get_by_path()->blkdev_get()->__blkdev_get()->

rescan_partitions()->add_partition()

/dev/block/bootdevice/by-name/xxx,目录及后面的链接是在userspace的init进程中创建出来的,init收到增加新分区的uevent事件后,构造出以上by-name下的文件。

Code:system/core/init/devices.c

Function:parse_platform_block_device(structuevent*uevent)

二、/sys/class/mmc_host/mmc0/mmc0:0001

root@:/sys/class/mmc_host/mmc0/mmc0:0001#ls

block

cid

csd

date

driver

enhanced_area_offset

enhanced_area_size

erase_size

fwrev

hwrev

manfid

name

oemid

power

preferred_erase_size

prv

raw_rpmb_size_mult

rel_sectors

runtime_pm_timeout

serial

subsystem

type

uevent

三、/sys/block/mmcblk0

root@:/sys/block/mmcblk0 #ls

alignment_offset

bdi

bkops_check_threshold

capability

dev

device

discard_alignment

ext_range

force_ro

holders

inflight

mmcblk0p1

mmcblk0p10

……

mmcblk0p9

mmcblk0rpmb

no_pack_for_random

num_wr_reqs_to_start_packing

power

queue

range

removable

ro

Size   // emmc size = Size * 512Btye

slaves

stat

subsystem

uevent

四、/proc/partitions

root@:/proc # cat partitions

major minor  #blocks  name

253        0    486188 zram0

179        0  15267840 mmcblk0    //emmc size,单位KB

179        1     65536 mmcblk0p1

179        2       512 mmcblk0p2

179        3       512 mmcblk0p3

179       15         16 mmcblk0p15

179       16     20480 mmcblk0p16

……

179       26    2097152 mmcblk0p26

179       27       512 mmcblk0p27

179       28         32 mmcblk0p28

179       29     65536 mmcblk0p29

179       30    268288 mmcblk0p30

179       31  12312559 mmcblk0p31

179       32      4096 mmcblk0rpmb

五、多种size规格eMMC兼容方案一:利用文件系统自身resize功能

mountdata之前,比较super block的size与block deviceszie,不一样就去resize。

六、多种size规格eMMC兼容方案之二:第一次开机format data分区

如果使用的filesystem没有resize功能,比如f2fs, fat32等。

那只能采用此种办法啦:

不下载userdata.img

mountdata之前,fs_mgrservice判断是否会第一次开机,如果是,则启动format

system/core/fs_mgr

七、存储空间保护,防止空间满导致系统启动异常

内置sd卡保护:

fuse增加保护,内置sd卡最大可写容量data total size-reserved(50MB)

Code:system/core/sdcard/sdcard.c

#define LIMIT_SDCARD_SIZE

MTP保护:

Mtpservice增加保护,PC可写的最大可写容量internalsdcardfs total size-reserved

code:frameworks/base/services/java/com/android/server/MountService.java

FileSystem保护:

Ext4文件系统增加保护,保留16MB给uid<= 10010的使用

Code:kernel/fs/ext4/balloc.c

init.{platform}.rc:exec /system/bin/tune2fs -Ohas_journal -u 10010 -r 4096 /dev/block/platform/mtk-msdc.0/by-name/userdata

resv_clusters: -r 4096=4096blocks=4096*4096=16MB

dirty_clusters: default 16M当flags有EXT4_MB_USE_RESERVED才可写

sbi->s_resuid:-u10010

sbi->s_resgid:tune2fs没有传递default0

八、eMMC workload & performance of mtk log

1.Workload是根据什么计算出来的呢?

500ms内花在io上的时间比例

/kernel/drivers/mmc/card/block.c

static intmmc_blk_issue_rw_rq(structmmc_queue *mq,struct request *rqc)

xlog_printk(ANDROID_LOG_DEBUG,"BLOCK_TAG", "mmcqd:%d Workload=%d%%, duty %lld,period %lld00, req_cnt=%d \n",mmcqd[idx],t_percent,t_usage,t_period,mmcqd_rq_count[idx]);

2.能否知道主要哪个app占得workload?

/kernel/drivers/mmc/card/block.c

static intmmc_blk_issue_rw_rq(structmmc_queue *mq,struct request *rqc)

sprintf (g_pid_logger[index].pid_buffer+i*37,"{%05d:%05d:%08d:%05d:%08d}",g_pid_logger[index].pid_logger[i],g_pid_logger[index].pid_logger_counter[i],g_pid_logger[index].pid_logger_length[i],g_pid_logger[index].pid_logger_r_counter[i],g_pid_logger[index].pid_logger_r_length[i]);

如 {26626:00000:00000000:00878:03596288}含义:pid为26626的进程500ms内read3512KB(03596288)的数据,write0KB的数据。

可以查看某段时间内,各个进程读写的情况,进而判断是哪个进程占用的worload比较高;

3. 当workload比较高的时候,log打印read、write也比较高,能否说明emmc是没有问题的?

<6>[16656.919474] (5)[142:mmcqd/0][BLOCK_TAG]mmcqd:142 Workload=63%, duty 317163907, period 500889000, req_cnt=1426

<6>[16656.919483] (5)[142:mmcqd/0][BLOCK_TAG] mmcqd:142 WriteDiversity=5553653 sectors offset, req_cnt=12, break_cnt=0, tract_cnt=0,bit_cnt=0

<6>[16656.919534] (0)[142:mmcqd/0][BLOCK_TAG] mmcqd:142 ReadDiversity=607567 sectors offset, req_cnt=1414, break_cnt=0, tract_cnt=0,bit_cnt=0

<6>[16656.919565] (0)[142:mmcqd/0][BLOCK_TAG] mmcqd:142 WriteThroughput=69222 kB/s, size: 692224 bytes, time:10 ms

<6>[16656.919617](0)[142:mmcqd/0][BLOCK_TAG] mmcqd:142 Read Throughput=93819 kB/s, size:28708864 bytes, time:306 ms

是的。从log看,eMMC的performance还可以。

workload高不一定是eMMC性能差导致,最近发现内存泄漏也可能导致workload高!

qcom 平台也有类似机制,参考:CONFIG_MMC_PERF_PROFILING

mmc debug log 需要请打开CONFIG_MMC_DEBUG

九、eMMC ext_csd

root@:/sys/kernel/debug/mmc0/mmc0:0001# catext_csd

十、eMMC HS200 & HS400

AP CPU 和 eMMC 同时支持HS400 ,HS400 performance才能发挥出来!否则还是HS200 .

十一、eMMC cache

cache对emmc write performance影响很大,使能它。

十二、 eMMC Cmd Queue

选择支持Cmd Queue功能的eMMC极大地提供随机读写能力。

android emmc生产日期,碎碎念android eMMC【转】相关推荐

  1. android谷歌补丁日期,在谷歌日历Android中添加开始日期和结束日期之间所有日期的事件...

    在谷歌日历 Android中添加开始日期和结束日期之间所有日期的事件.我希望每3个月剩余一次,直到结束日期. 这是我的功能 public void addEvent1(Context ctx, Str ...

  2. android怎么用edittext得到日期_minon蜜浓保湿乳液怎么用批号看生产日期?minon蜜浓保湿乳液保质期有多长时间?...

    minon蜜浓是一个日系的开架化妆品牌,和经典的开架彩妆canmake一样,minon蜜浓是专门生产护肤品的品牌.主要是针对于干燥敏感肌,所以大部分的产品都是以滋润修护为主.minon蜜浓面膜有一段时 ...

  3. 每月碎碎念 | 2019.08

    Hi,这里是新开辟的"碎碎念"的世界. 这个区域作为记录心情的地方,把每日的所思所想所感所悟记录在这里,当做一个写日记的地方,每个月底汇总成一篇文章,只给我的朋友看. 不知不觉一个 ...

  4. 一个谷粉和3年的Google Reader重度使用者的碎碎念

    2013-03-14 上午看到Andy Rubin辞去Android业务主管职务.由Chrome及应用高级副总裁继任的新闻,还在想这会给Android带来什么,中午刷微博的时候就挨了当头一棒:Goog ...

  5. 每月碎碎念 | 2019.6

    Hi,这里是新开辟的"碎碎念"的板块. 这个区域作为记录心情的地方,把每日的所思所想所感所悟以及看到的比较有价值的文字记录在这里,当做一个写日记,分享价值的地方,每个月底汇总成一篇 ...

  6. 前端碎碎念 之 nextTick, setTimeout 以及 setImmediate 三者的执行顺序

    『前端碎碎念』系列会记录我平时看书或者看文章遇到的问题,一般都是比较基础但是容易遗忘的知识点,你也可能会在面试中碰到. 我会查阅一些资料并可能加上自己的理解,来记录这些问题.更多文章请前往我的个人博客 ...

  7. 参加海峡两岸城市地理信息系统论坛2010 年会(一张图、规划信息化和空间句法的碎碎念)...

    上周末去清华建筑学院开了个会,叫做海峡两岸城市地理信息系统论坛2010 年会,主题很大,但是内容比较集中一些,就是围绕着GIS与城市规划.一天下来听了20个报告,挺佩服主办方的时间控制,这么密集的报告 ...

  8. Jerry的碎碎念:SAPUI5, Angular, React和Vue

    2019独角兽企业重金招聘Python工程师标准>>> 去年我去一个国内客户现场时,曾经和他们IT部门的一位架构师聊到关于在SAP平台上进行UI应用的二次开发时,UI框架是选用UI5 ...

  9. PMcaff写给大家的年终碎碎念 PMcaff | 记录

    今天是大年三十,2014马上就要结束了,送上新春祝福之前,碎碎念的小希有话想跟大家说. 瞧这一年 小米在硬件行业继续如鱼得水,科幻片里的智能家居生慢慢变成生活. 阿里巴巴在纳克达斯扬眉吐气了一把,一夜 ...

最新文章

  1. 监控摄像头服务器维护要多久,监控摄像机如何维护 这几点要牢记
  2. 清除administrator密码 方法
  3. Ext.data.Connection
  4. Oracle数据类型Long需要注意的问题
  5. SAP UI5和微信小程序对比之我见
  6. scala List源码
  7. 如何实现C#.net图像处理
  8. Windows 7 卸载 IE10
  9. tp5 mysql异常捕获_tp5 ThinkPhp5 自定义异常处理类
  10. 转盘抽奖 canvas 抽奖 H5 源码
  11. 智能电话机器人--基于 UniMRCP 实现讯飞 TTS MRCP Server
  12. 计算机网络:随机访问介质访问控制之CSMA/CA协议
  13. python中test是什么意思_Python unittest 之一: 什么是单元测试
  14. 复旦大学python教学视频_B站资源推荐:复旦大学机器学习、深度学习公开课,附PDF课件下载...
  15. 微信小程序(登录、分享、支付)
  16. 征信衍生、信用卡数据场景如何做好分析,这一种时序特征方法得学学|金融信用分析师必学内容
  17. 惠普喷墨打印机Smart Tank 519打印错误的解决
  18. 无人驾驶技术——无损卡尔曼滤波(UKF)
  19. 【AdaBoost算法】
  20. OO ALV简单报表之DOCKING容器实现

热门文章

  1. 怎么用计算机求浮动额,2015计算机一级考试MSOFFICE上机综合训练(5)
  2. c语言脸型图案,[转载]各种脸型的分析及修饰
  3. arm linux dma_alloc_coherent 实现,dma_alloc_coherent (建立一致性 DMA 映射函数)
  4. python获取app信息的库_基于python3抓取pinpoint应用信息入库
  5. java 快速删除文件夹_如何用Java删除文件夹里的所有文件?
  6. java修改异常状态码_RxJava2 + Retrofit2 完全指南 之 统一状态码/Exception处理
  7. 小程序资源服务器,开发小程序没有服务器资源
  8. 计算机彻底删除删除后如何恢复,如何完全恢复从计算机删除的文件?
  9. Oracle 表的移动和索引的重建
  10. vim 删除,复制和粘贴