我可以选择不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
也就是 seek12
次之后停止预读
也就是说,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