megvii-research/megfile

我可以选择不prefetch数据,让PrefechReader退化到没有prefetch的状态,以获得 超级内存节约吗?

Closed this issue · 6 comments

RT,发现prefetchReader最少也要设置max_buffer_size = 2*block_size,这应该意味着prefetch 1个block。可以一个都不prefetch吗?
@LoveEatCandy

以及随之而来的另一个问题,当我对一个大文件random seek & read的时候,prefetch还有多大意义?
因为有max_buffer_size的限制,如果buffer里的内容没法被频繁命中,那岂不是prefetch满 -> 没用上 -> 被下一轮prefetch覆盖

对于纯随机读的场景,可以将 forward_ratio 设为 -1,这样就不会有预读操作了。默认情况下,随机读会在 max_buffer_size // block_size // seek 次数 == 1 也就是 seek 12 次之后停止预读

对于纯随机读的场景,可以将 forward_ratio 设为 -1,这样就不会有预读操作了。默认情况下,随机读会在 max_buffer_size // block_size // seek 次数 == 1 也就是 seek 12 次之后停止预读

也就是说,forward_ratio = -1,s3_open就退化成类似于smart_open.smart_open的东西?

也就是说,forward_ratio = -1,s3_open就退化成类似于smart_open.smart_open的东西?

是的

@LoveEatCandy 注意到forward_ratio = -1 和 forward_ratio = 0是一样的,都会导致s3_path.s3_buffered_open向S3PrefetchReader传block_forward=1,光看代码有点看不懂block_forward=1是有1个prefetch还是没有……

@LoveEatCandy 注意到forward_ratio = -1 和 forward_ratio = 0是一样的,都会导致s3_path.s3_buffered_open向S3PrefetchReader传block_forward=1,光看代码有点看不懂block_forward=1是有1个prefetch还是没有……

大于 1 才会预读:https://github.com/megvii-research/megfile/blob/main/megfile/lib/base_prefetch_reader.py#L174