linux传输文件到linux速度慢,linux中往nand(jffs2)中拷贝文件时速度慢的问题

最近在调试nand和jffs2时,发现将一个文件从SD卡拷贝到jffs2的NAND分区时,速度非常慢,和从NAND中拷出(例如拷贝到SD卡)相比,慢了近5倍。一开始以为是驱动写NAND和读NAND的差异,后来用mtd-utile的nand write测试了一下,nand write的速度和nand read的也差不多。

由于mtd-utile的nand write/ nand read没有经过jffs2文件系统,于是将疑点定位在jffs2文件中。

经过一番debug,对各个模块进行耗时统计,经于找到元凶:fs/jffs2/compr.c 中的jffs2_comress()函数,绝大部分多出的耗时全在这个函数里。原来在menuconfig的时候没有选择 Advanced compression option for JFFS2, 但里面确默认使用了priority的压缩方式。重新设置成no compression后,OK,速度正常了。

以下是往jffs2文件系统中copy时的调用流程(竟然没有走mtdblock.c文件,一开始以为是经过这个文件中的mtd->write函数指针调用到nand_write函数的):

fs/read_write.c      do_sync_write -> filp->f_op->aio_write()

jf/jffs2/file.c           .aio_write = generic_file_aio_write,

mm/filemap.c:        generic_file_aio_write->

__generic_file_aio_write ->

generic_file_buffered_write->

generic_perform_write->a_ops->write_end()

fs/jffs2/file.c:        .write_end = jffs2_write_end,

jffs2_write_end->

fs/jffs2/write.c:           jffs2_write_inode_range->

jffs2_write_dnode->

fs/jffs2/wbuf.c:                         jffs2_flash_writev->

c->mtd->write()

__jffs2_flush_wbuf()->

c->mtd->write()

drivers/mtd/nand/nand_base.c:

mtd->write = nand_write;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值