V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
zzzyk
V2EX  ›  Linux

fat32 的 tf 卡写文件卡顿

  •  
  •   zzzyk · 48 天前 · 1450 次点击
    这是一个创建于 48 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请问一下各位大佬,我往 tf 卡写文件的时候,发现偶尔会出现几次卡顿 4-5s 的情况。往一个文件里面连续写入 1000 次 100k 数据,记录 write 的运行时间,写 10 几个文件的测试 demo 。换成了 exfat ,有改善。但是客户要求用 fat32 ,这个有办法优化嘛。

    31 条回复    2024-11-01 08:45:09 +08:00
    zzzyk
        1
    zzzyk  
    OP
       48 天前
    整理过碎片,好像也没啥用,该出现还是出现。最大出现过 8s 的情况。
    royking930911
        2
    royking930911  
       48 天前
    发热了吧 写的时候摸一下卡 看看热不热
    ReZer0
        3
    ReZer0  
       48 天前
    先定位下问题在于读卡设备还是在于卡。如果问题在卡,看是否能换卡解决。
    zzzyk
        4
    zzzyk  
    OP
       48 天前
    zzzyk
        5
    zzzyk  
    OP
       48 天前
    @ReZer0 不是卡的问题,试了好几张卡和两个品牌的,都这样,在电脑上,在嵌入式板子上,都会有这种现象。
    minami
        6
    minami  
       48 天前 via Android
    同一个文件频繁读写吗?可以改用 mmap 看看能否优化
    zzzyk
        7
    zzzyk  
    OP
       48 天前
    @minami 不是同一个文件,一个文件写满 100m 后,会 close ,重新 open 一个新的文件在继续写
    ReZer0
        8
    ReZer0  
       48 天前
    @zzzyk 那读卡器呢,也是都不一样的?
    yulgang
        9
    yulgang  
       48 天前
    换个品牌卡,调整格式化时块大小试一试?
    zzzyk
        10
    zzzyk  
    OP
       48 天前
    @ReZer0 电脑用的同一个读卡器,但是嵌入式板子是直接插进去的。电脑试了两个卡,都是同一个读卡器。现象是一差不多的。
    zzzyk
        11
    zzzyk  
    OP
       48 天前
    @yulgang 试了两个品牌的卡了,块大小改过了 16kb 和 64kb 都没啥改善。
    ReZer0
        12
    ReZer0  
       48 天前
    @zzzyk 有没有写普通文件而非软件的测试文件试试。我在想会不会是本身这类卡的 4k 读取能力问题,而你软件测试文件刚好一次性都是 kb 级别,中间没有个缓存,导致卡的写入瓶颈引发的卡顿现象。当然,你也可以拿个 U 盘格式化成 fat32 ,看看写入对象变成 U 盘的时候会不会也引发这种现象。
    kenneth104
        13
    kenneth104  
       48 天前
    添加个 Cache ,容许丢数据就行
    zzzyk
        14
    zzzyk  
    OP
       48 天前
    @ReZer0 有道理,我先试试 u 盘会不会有这种现象。
    zzzyk
        15
    zzzyk  
    OP
       48 天前
    @kenneth104 感谢建议,这是卡顿的应付措施,这个肯定会加的,我想找找看没有解决这个卡顿或者减小卡顿时间的办法。
    kenneth104
        16
    kenneth104  
       48 天前
    其他办法,换 MLC 卡?没几个了,而且贵了些,但应该还好,需求容量不大
    starqoq
        17
    starqoq  
       48 天前 via iPhone
    感觉时写卡 cache 满了 然后卡顿了
    试试写完以后马上调用一下 flush 或者用 usb3.0 的读卡器喝高速卡
    ReZer0
        18
    ReZer0  
       48 天前
    @zzzyk 换个 4K 读写能力强点的。我怀疑是写缓给的不够导致卡本身出现写入瓶颈,用更强写入的 U 盘测试下看看问题是不是缓解。
    zzzyk
        19
    zzzyk  
    OP
       48 天前
    @starqoq 试过了,每次 write 都有 flush ,也试过没有 flush ,没有 flush 的写入时间正常波动,刷 cache 的时候的时间是 10ms ,没有刷的时候是 1ms ,不至于出现这个 4-5 秒的卡顿。
    minami
        20
    minami  
       48 天前
    @zzzyk #7 如果是这样的场景,更适合用 mmap 了,每次固定 100m
    zzzyk
        21
    zzzyk  
    OP
       48 天前
    @minami 大小不固定,1000 次 100k 数据,100k 数据也不固定,都不固定,只是单纯模拟实际应用场景(录像写文件)罢了
    minami
        22
    minami  
       48 天前
    @zzzyk #21 mmap 只是分配固定大小,每次写可以不固定啊
    opengps
        23
    opengps  
       48 天前
    试试看用摄像头录像专用的 tf 卡,对写入能力支持更好些
    kokutou
        24
    kokutou  
       48 天前
    买那种写了什么摄像头存储卡 你看看京东页面参数 下面写了写入速度 有 50m/s 的那种
    kokutou
        25
    kokutou  
       48 天前
    starqoq
        26
    starqoq  
       48 天前
    你可以试试高端一点的卡,可能是 tf 卡的主控回收 block 产生的卡顿。
    zzzyk
        27
    zzzyk  
    OP
       48 天前
    @minami 大佬的意思是用 mmap 创建个内存,把数据放这内存里面,在用 write 写入?
    wanguorui123
        28
    wanguorui123  
       48 天前
    是不是 QLC 颗粒导致的啊
    yinmin
        29
    yinmin  
       48 天前 via iPhone
    试试 sandisk a1 卡,如果是 linux 系统别买 a2 卡
    cooltechbs
        30
    cooltechbs  
       47 天前 via Android
    关注此帖。我用过不少高速 TF 卡,用 CrystalDiskMark 测出来的 4K 读写 IOPS 都有一两千,可是尝试往上面装系统都是卡到不能自理。然而 Steam Deck 内置卡槽插上一样的卡却可以流畅安装运行 win11 。至今不知道什么原理,如果 LZ 解决了我一定回来涨涨见识
    wm5d8b
        31
    wm5d8b  
       47 天前 via Android
    @yinmin 为啥不推荐 a2 ,我看在树莓派上跑 home assistant 的都推荐买 a2
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3139 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 13:22 · PVG 21:22 · LAX 05:22 · JFK 08:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.