[分享] 极致优化 SSD 并行读调度 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
pursuit
V2EX    程序员

[分享] 极致优化 SSD 并行读调度

  •  
  •   pursuit 2023-09-25 17:52:34 +08:00 1847 次点击
    这是一个创建于 747 天前的主题,其中的信息可能已经有所发展或是发生改变。

    SSD 在工作业务场景用得蛮多的,对长尾的控制,硬件上历史有 Streamed SSD 、OpenChannel SSD ,还有最新的 Zoned Namespaces SSD 。不过公司引入硬件周期长,业务上的问题也还是得解决。

    我们从以下几个方面充分优化对 SSD 的使用:

    1. 读写和 SSD 上的闪存单元大小对齐,控制为 4K ;
    2. 充分利用 SSD 的并行能力,用上了 libaio 和 iouring ;(吐槽下 iouring 真是太新了,接口用上耗费了一翻源码追踪的功夫,现在 io cacnel 的接口适配还卡着,没来得及定位)
    3. 并行读的时候,利用上了流水线的思想,充分并行本地的 CPU 和 IO ;(这里吹下 fio 的设计,流水线的思路是从这里启发而来的)

    更完整的优化分享可以详见: https://mp.weixin.qq.com/s/CB4u5AQuRrIq5mRISx9GmQ

    5 条回复    2023-09-26 14:29:11 +08:00
    dreamlike
        1
    dreamlike  
       2023-09-26 00:33:14 +08:00 via Android
    能请问下 io cancel 适配是卡在 io_uring 并不保证 cancel 成功吗?我之前遇到的就是这个问题,在写场景/读场景 若未取消成功即操作已经推入内核执行的情况下 用户操作对应到那块内存就会产生 ub
    ac23
        2
    ac23  
       2023-09-26 09:30:47 +08:00
    感谢分享!
    pursuit
        3
    pursuit  
    OP
       2023-09-26 11:11:36 +08:00
    @dreamlike 调用 io_uring_prep_cancel 指定要 cancel 的任务,但是根据观察没有 cancel 成功,其实 libaio 使用同样的 cancel 接口,也没有成功。按照接口语义( https://man7.org/linux/man-pages/man3/io_uring_prep_cancel.3.html )应该是成功才对,还不知道为什么不成功。提交的内存确实得保证不能有竞争,得完整回来操作才不会 ub ,因为异步 io 不知道什么时候就给那块内存写东西了~
    dreamlike
        4
    dreamlike  
       2023-09-26 12:52:02 +08:00 via Android
    @pursuit The execution state of the request has progressed far enough that cancelation is no longer possible ,不保证吧。。。
    pursuit
        5
    pursuit  
    OP
       2023-09-26 14:29:11 +08:00
    @dreamlike 这段话是说返回 -EALREADY 的情况下吧,但也有不返回 error 成功的时候
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2741 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 07:37 PVG 15:37 LAX 00:37 JFK 03:37
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86