【问题标题】:File IO performance on SD cardSD 卡上的文件 IO 性能
【发布时间】:2012-03-02 02:29:18
【问题描述】:

全部

当我第一次插入设备后尝试从sd卡读取一些媒体文件时,读取性能比第二次差很多,有没有人知道这种现象,我该如何避免这种情况问题,我试过open和fopen,结果是一样的,我只想读性能一样,不管什么时候插入SD卡,谢谢

【问题讨论】:

    标签: android linux performance file-io


    【解决方案1】:

    在打开文件时使用O_DIRECT(参见open(2))将绕过缓冲区缓存。这通常不是一个好主意,但我希望它在每次运行中更加一致。

    请记住,使用O_DIRECT 要求读入的内存与SC_PAGESIZE 对齐并以SC_PAGESIZE 的倍数的块读取。

    【讨论】:

    • :(,这个flag我试过了,可以用,但是在android设备上性能更差...,无论如何,谢谢
    • 但我敢打赌,它每次运行都是一致的!
    • 嗨,Brian,我不明白你的意思,你的意思是 O_DIRECT 确实可以提高性能吗?但我在设备上试过,它不能。还有什么问题?
    • 不,O_DIRECT 不一定有助于提高性能。但是您问“我只想读取性能相同,无论何时插入 SD 卡。” O_DIRECT 可能会解决这个问题。您的问题没有解决方案,因为您希望能够从具有硬件吞吐量限制的介质中读取数据。尝试更改硬件(介质和读卡器),我希望性能会有所提高(尽管它可能永远不会接近内存缓存性能)。数码摄影也有类似的问题,请向那些供应商寻求设备。
    【解决方案2】:

    您是说第一次读取比移除设备之前的后续读取更糟糕吗?如果是这样,这是正常的 - 这是由于缓冲。基本上,系统正在使用系统 RAM 来加快设备的感知速度。

    如果您在卸载卡后取出卡,然后将其放回并重新安装,我预计第一次读取会再次变慢,然后后续读取会再次变得更快。

    【讨论】:

    • 嗨,Jared,谢谢你的回复,和你说的一模一样,我只是想知道如何提高第一次的性能,有没有可能第一次停止缓冲,并且会有用吗?
    • 通常,缓冲很有用,你应该让系统去做。从 SD 卡读取总是比从 RAM 读取慢!
    • hi Basile,你是对的,缓冲大部分时间是有用的,但我想知道如果没有缓冲,第一次性能是否会更好,我试过 O_DIRECT 标志,性能更差第一次,我很困惑。
    • 瓶颈是SD卡接口的硬件限制。没有任何软件技巧可以克服它们......
    • 不要认为缓冲会减慢第一次读取的速度 - 因为它可能不是(可能是百分之一或两个)。将缓冲视为加速后续读取。您可以尝试提到的 O_DIRECT 技巧,但我认为它只会受到伤害。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多