本文转载自:https://blog.csdn.net/Fybon/article/details/44242549

一、/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【转】的更多相关文章

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

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

  2. Linux碎碎念

    在学习Linux过程中,有许多有用的小技巧.如果放在纸质的笔记本上,平时查阅会相当不方便.现在以一种“碎碎念”的方式,汇集整理在此,目前还不是很多,但随着学习.工作的深入,后续会陆陆续续添加更多的小技 ...

  3. 一些关于Linux入侵应急响应的碎碎念

    近半年做了很多应急响应项目,针对黑客入侵.但疲于没有时间来总结一些常用的东西,寄希望用这篇博文分享一些安全工程师在处理应急响应时常见的套路,因为方面众多可能有些杂碎. 个人认为入侵响应的核心无外乎四个 ...

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

    去年我去一个国内客户现场时,曾经和他们IT部门的一位架构师聊到关于在SAP平台上进行UI应用的二次开发时,UI框架是选用UI5还是Vue这个话题. 我们代表SAP, 向客户推荐使用UI5是基于以下六点 ...

  5. 结对编程ending-我和洧洧的碎碎念

    应该是第一次和队友分工合作去完成一个项目,其中也经历了跳进不少坑又被拉回来的过程,总体来说这对于我俩也的确是值得纪念的一次经历. 我的碎碎念时间…… 对比个人项目和结对编程项目二者需求,前者重在面对不 ...

  6. C语言 · 分分钟的碎碎念

    算法提高 分分钟的碎碎念   时间限制:1.0s   内存限制:256.0MB      问题描述 以前有个孩子,他分分钟都在碎碎念.不过,他的念头之间是有因果关系的.他会在本子里记录每一个念头,并用 ...

  7. 最近关于Qt学习的一点碎碎念

    最近关于Qt学习的一点碎碎念 一直在使用Qt,但是最近对Qt的认识更加多了一些.所以想把自己的一些想法记录下来. Qt最好的学习资料应该是官方的参考文档了.对Qt的每一个类都有非常详细的介绍.我做了一 ...

  8. Java实现 蓝桥杯VIP 算法提高 分分钟的碎碎念

    算法提高 分分钟的碎碎念 时间限制:1.0s 内存限制:256.0MB 问题描述 以前有个孩子,他分分钟都在碎碎念.不过,他的念头之间是有因果关系的.他会在本子里记录每一个念头,并用箭头画出这个念头的 ...

  9. Android eMMC Booting

    Android eMMC Booting Contents [hide] 1 eMMC binaries 1.1 Creating the GPT table 1.2 Modifying .IMG F ...

随机推荐

  1. System.BadImageFormatException”C#报错

    在平常的开发中或多或少会遇到一些问题,而本次向小编这里是自己刚刚解决的一个问题,贴出来与大家分享一下,纠结了一个下午,终于解决了,是有关平台的一个报错问题.   方法/步骤     报错”“Syste ...

  2. Unity shader学习之逐顶点漫反射光照模型

    公式如下: Cdiffuse = Clight * mdiffuse * max(0, dot(n,l)); 其中,n 为表面法线,l 为指向光源的单位向量,mdiffuse 为材质温反射颜色,Cdi ...

  3. 【转】推荐4个不错的Python自动化测试框架

    之前,开发团队接手一个项目并开始开发时,除了项目模块的实际开发之外,他们不得不为这个项目构建一个自动化测试框架.一个测试框架应该具有最佳的测试用例.假设(assumptions).脚本和技术来运行每一 ...

  4. jQuery事件--keypress([[data],fn])和trigger(type,[data])

    keypress([[data],fn]) 概述 当键盘或按钮被按下时,发生 keypress 事件 keypress 事件与 keydown 事件类似.当按钮被按下时,会发生该事件.它发生在当前获得 ...

  5. PYQT5学习笔记之各模块介绍

    Qtwidgets模块包含创造经典桌面风格的用户界面提供了一套UI元素的类 Qtwidegts下还有以下常用对象,所以一般使用Qtwidegts时会使用面向对象式编程 QApplication: ap ...

  6. 浅谈大数据与hadoop家族

    按照时间的早晚从大数据出现之前的时代讲到现在.暂时按一个城市来比喻吧,反正Landscape的意思也大概是”风景“的意思. 早在大数据概念出现以前就存在了各种各样的关于数学.统计学.算法.编程语言的研 ...

  7. 机器学习-LR推导及与SVM的区别

    之前整理过一篇关于逻辑回归的帖子,但是只是简单介绍了一下了LR的基本思想,面试的时候基本用不上,那么这篇帖子就深入理解一下LR的一些知识,希望能够对面试有一定的帮助. 1.逻辑斯谛分布 介绍逻辑斯谛回 ...

  8. 【JavaScript 6连载】五、继承的概念

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  9. localStorage单页面及不同页面监听变动

    分析 H5本地存储有两个API,一个是Web Storage,还有一个是Web SQL.不管是哪一个,都是基于JavaScript语言来使用,而Web Storage提供了两种存储类型 API:  s ...

  10. .NET 常用ORM之SubSonic

    一.SubSonic简单介绍 SubSonic是一个类似Rails的开源.NET项目.你可以把它看作是一把瑞士军刀,它可以用来构建Website和通过ORM方式来访问数据.Rob Conery和Eri ...