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

请教一下,在 Linux 上多进程同时读取一个文件(不会写入),是线程排队读取,还是并行的读取?

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

    比如在万核机器上一万个进程同时读一个文件,在操作系统层面是每个进程排队挨个去读这个文件,还是每个进程都可以同时去读嘞?

    如果需要实现同时读取,是不是需要配置并行文件系统,将文件拆分到不同的挂载盘中?

    9 条回复    2023-05-12 13:30:52 +08:00
    senninha
        1
    senninha  
       343 天前
    应该是并行读取,内核有文件缓存机制。
    kkocdko
        2
    kkocdko  
       343 天前 via Android
    这个得看文件系统,比如 xfs 就支持并行读取。一般来说这不是瓶颈,速率都能达到硬盘的峰值速度。

    如果你是希望各个进程的读取进度同步,避免重复读取,就应该考虑自己实现缓冲区。
    picone
        3
    picone  
       343 天前
    不要强依赖缓存机制,page cache 可能被刷新导致 io 打满,特别是虚拟化的环境别的容器不可控
    dushiyang68
        4
    dushiyang68  
    OP
       343 天前
    @senninha 我们要做的是超算的万核并行,而且读取的文件非常大,可能上百 G ,我们就是考虑开辟文件缓冲区过多会不会导致性能瓶颈
    gam2046
        5
    gam2046  
       343 天前
    如#2 所说,如果强依赖缓存,可以考虑自行加上缓存层,例如 redis ,这样的行为是更加符合预期的。
    ivan_wl
        6
    ivan_wl  
       343 天前
    可以了解一下 linux 的 blk-mq
    seers
        7
    seers  
       343 天前 via Android
    DIO 和 AIO
    fuis
        8
    fuis  
       343 天前
    @dushiyang68

    > 开辟文件缓冲区过多会不会导致性能瓶颈

    通常分配缓冲区不是瓶颈,但也是一笔不可忽视的开销。可以尝试实现 mem pool 机制,或者是更换 malloc 比如 tcmalloc jemalloc mimalloc 等。

    这时候要考虑 NUMA 的瓶颈,比如 NUMA 下面 remote r/w 的带宽是多少,local 的带宽是多少。还有 UPI 的带宽(需要实际测量,40G/s 左右)

    但是可能上面的这些也可都还不是瓶颈,先要知道你下面的存储到底能提供多少 io 能力。。
    litguy
        9
    litguy  
       343 天前
    @dushiyang68 你的需求需要 burst buffer 处理,不是常规 fs
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2792 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 11:43 · PVG 19:43 · LAX 04:43 · JFK 07:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.