V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
moonsn
V2EX  ›  C++

怎样避免写出来的网络服务程序受磁盘 IO 抖动影响最小?

  •  
  •   moonsn · 2020-02-06 23:49:49 +08:00 via Android · 1976 次点击
    这是一个创建于 1540 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题,现在有一个 rpc 服务,在一些磁盘 IO 抖动的机器上,服务相应时间也跟着抖动。服务本身是很少读写磁盘的。
    3 条回复    2021-01-30 01:54:09 +08:00
    yidinghe
        1
    yidinghe  
       2020-02-06 23:51:12 +08:00 via Android
    没有其他约束的情况下,把磁盘内容放到内存中是显而易见的做法。
    codehz
        2
    codehz  
       2020-02-07 00:04:02 +08:00 via Android
    不考虑缓存文件的情况下,方案如:
    1 上多线程(或者用 glibc 的 aio,也是多线程实现
    2 用 native aio (需要 Direct IO 支持,和文件系统有关系,然后实际需要不少技巧才能发挥作用
    3 用 io-uring 的 api (需要新内核支持

    当然最好还是自己缓存一下文件,做个 LRU 一类的缓存

    其实合理的情况应该是上数据库(
    YouLMAO
        3
    YouLMAO  
       2021-01-30 01:54:09 +08:00 via Android
    一定是你没有用异步线程池吧,阻塞了吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   992 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 20:36 · PVG 04:36 · LAX 13:36 · JFK 16:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.