linux文件系统如何使用emmc的擦除功能(Erase Trim Discard Sanitize)达到最优performance
来源:互联网 发布:h5界面设计软件 编辑:程序博客网 时间:2024/05/01 10:49
1、android init.rc中可以看到, 系统启动mount /data 目录时,mount命令添加了参数:discard
mount ext4 /emmc@usrdata /data noatime nosuid nodev wait noauto_da_alloc,discard
2、
mount的discard参数传递到ext4_mount函数的flags参数
//kernel/fs/ext4/super.c
static struct dentry *ext4_mount(struct file_system_type *fs_type, intflags,
const char *dev_name, void *data)
{
return mount_bdev(fs_type,flags, dev_name, data, ext4_fill_super);
}
//kernel/fs/super.c
struct dentry *mount_bdev(struct file_system_type *fs_type,
int flags, const char *dev_name, void *data,
int (*fill_super)(struct super_block *, void *, int))
{
struct block_device *bdev;
struct super_block *s;
fmode_t mode = FMODE_READ | FMODE_EXCL;
int error = 0;
.................
s->s_flags = flags | MS_NOSEC; //将mount flag保存在sb的s_flags成员中
s->s_mode = mode;
strlcpy(s->s_id, bdevname(bdev, b), sizeof(s->s_id));
sb_set_blocksize(s, block_size(bdev));
error = fill_super(s, data, flags & MS_SILENT ? 1 : 0); //调用ext4的fill super :ext4_fill_super, 通过sb传递mount flag
.........................
return dget(s->s_root);
}
//kernel/fs/ext4/super.c
static int ext4_fill_super(struct super_block *sb, void *data, int silent)
{
...................
if (!parse_options((char *) data,sb, &journal_devnum,
&journal_ioprio, 0))
....................
}
static const struct mount_opts {
int token;
int mount_opt;
int flags;
} ext4_mount_opts[] = {
...........................
{Opt_discard, EXT4_MOUNT_DISCARD, MOPT_SET},
{Opt_nodiscard, EXT4_MOUNT_DISCARD, MOPT_CLEAR},
.............................................
}
2、/kernel/drivers/mmc/card/block.c
if (req && req->cmd_flags & REQ_DISCARD) {
...
ret = mmc_blk_issue_discard_rq(mq, req);
} else if (req && req->cmd_flags & REQ_FLUSH) {
/* complete ongoing async transfer before issuing flush */
if (card->host->areq)
mmc_blk_issue_rw_rq(mq, NULL);
ret = mmc_blk_issue_flush(mq, req);
} else {
ret = mmc_blk_issue_rw_rq(mq, req);
}
- linux文件系统如何使用emmc的擦除功能(Erase Trim Discard Sanitize)达到最优performance
- Erase/Trim/Discard/Sanitize
- eMMC为什么会用discard cmd来替代erase cmd 和 trim cmd?
- emmc FITRIM/discard命令在android系统中提升write performance的运用
- emmc FITRIM/discard命令在android系统中提升write performance的运用
- emmc FITRIM/discard命令在android系统中提升write performance的运用
- EraseTrim Discard Sanitize详解
- BB-Black: 如何擦除emmc里的内容?
- 擦除emmc里的内容
- 关于如何使用cg中的discard/clip
- Linux下挂载NTFS文件系统和NTFS文件系统对trim功能支持
- arcengine 擦除 erase
- arcengine erase 擦除
- ArcEngine 实现擦除(Erase)产生的问题
- javascript的trim功能
- linux 下开启 trim 功能
- js中eval的使用可以达到java反射功能
- 如何使K路归并外排序达到最优
- 笔记12
- java poi 解析excel
- ZOJ-2371
- VIM 常用操作
- HBase数据迁移(2)- 使用bulk load 工具从TSV文件中导入数据
- linux文件系统如何使用emmc的擦除功能(Erase Trim Discard Sanitize)达到最优performance
- 静默安装oracle
- Reset-floppy called错误和Bad partition table错误解决方法
- 泡泡的种类
- 静态库,共享库
- java一定要谨慎的操作!
- emmc boot partition 使用思考
- java笔记8
- boost程序编写步骤