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

据说阿里云的 I/O 吞吐不受 Meltdown 补丁影响?

  •  
  •   wangxiyi077 · 2018-05-04 10:45:31 +08:00 · 4107 次点击
    这是一个创建于 2178 天前的主题,其中的信息可能已经有所发展或是发生改变。
    https://zhuanlan.zhihu.com/p/33593012

    聊到 Intel 本次的 Meltdown 和 Spectre 漏洞,伯瑜研究员笑道,其实这次漏洞的影响恰好说明了,阿里云引擎 2.0 采用的用户态驱动和 I/O 协议栈模式,能够天然抗拒新的 OS 补丁对性能产生的影响,也就是说,新补丁对性能几乎没有影响,因为发送 I/O 的工作都是直接在用户态做的,不牵扯到系统调用,否则,本次补丁还真有可能大幅降低系统性能。



    联系上下文,他说的“阿里云引擎 2.0 ”是“云存储引擎”,补丁不是打在宿主机和虚拟机上面吗,宿主机和虚拟机不是通过网络访问分布式的存储节点吗,怎么它在存储节点装个“引擎”就能“天然抗拒”宿主机这边的性能下降?
    16 条回复    2018-05-05 02:23:37 +08:00
    Keyes
        1
    Keyes  
       2018-05-04 10:52:34 +08:00   ❤️ 1
    “新补丁对性能 [几乎] 没有影响”

    2.0 包转发都是走的 DPDK,对内核上没有依赖,全是用户态搞的,所以你内核爱怎么打补丁就怎么打补丁
    iwtbauh
        2
    iwtbauh  
       2018-05-04 10:58:27 +08:00 via Android   ❤️ 1
    ”采用的用户态驱动和 I/O 协议栈模式......发送 I/O 的工作都是直接在用户态做的,不牵扯到系统调用“

    用户空间驱动应该影响更严重啊

    毕竟驱动和应用程序通信时还是需要内核调用,而且需要更多次,并且还有上下文切换的巨额开销。

    比如我一个服务器网络应答吧,我最终是调用 write/send/...系统调用,最终调用网络驱动程序,但是如果这个驱动是在用户空间中实现的,首先上下文切换的开销是免不了的,另外用户空间也需要事先阻塞在一个系统调用上,然后再读取、调用、阻塞,相当于调用了最少 2 倍的系统调用

    除了硬件异常(如缺页异常)以外,用户空间与内核交互最终都需要通过系统调用,其实系统调用本质上也是一种软件中断(异常)

    我读书少你不要骗我
    catinred
        3
    catinred  
       2018-05-04 11:25:12 +08:00   ❤️ 1
    别人性能指标从 10 降到 6,它是从 5 降到 4,降幅比别人小,就可以对外宣称『没影响』了。
    simpx
        4
    simpx  
       2018-05-04 11:25:36 +08:00   ❤️ 1
    @iwtbauh #2

    以前是 "应用" --> "kernel" --> "kernel 内的 driver" --> "网卡"

    现在是 "应用" --> "dpdk" --> "dpdk 内的 driver" --> "网卡"

    不需要系统调用,不需要和内核交互,也不需要上下文切换
    chunk
        5
    chunk  
       2018-05-04 11:43:43 +08:00
    @iwtbauh 用户态的网络栈、文件系统的优势就是减少系统调用、重量级的 vfs 和 io 栈
    GreatEscape
        6
    GreatEscape  
       2018-05-04 11:56:28 +08:00
    @simpx 你是不是对 DPDK 有什么误解。
    DPDK 的 driver 和普通的 driver 一样都是一个内核模块,只是收到报文后不打包成 skb 走内核的协议栈,直接放到一块通过 mmap 映射到用户态的空间上,里面简单来讲就是一个环形队列。
    不是说协议栈放在了用户态就不需要和内核交互了,比如底层的 poll 之类的还是会涉及系统调用的。
    simpx
        7
    simpx  
       2018-05-04 12:03:38 +08:00
    @GreatEscape #6

    DPDK 的 driver 和普通的 driver 不一样,dpdk 的 pmd driver 在用户态,直接和固件打交道。网卡直接把报文放入注册好的内存,dpdk 用 polling 拿到

    你说的 "内核 driver" -> "mmap 出来的内存" -> "用户 polling 拿到"是以前 netmap 的做法,至少在新的硬件上,已经不需要这样了

    另外,polling 也只是用 pmd driver 获取网卡状态,不涉及系统调用
    innoink
        8
    innoink  
       2018-05-04 12:07:07 +08:00 via Android
    单纯数据通路是基本不涉及系统调用的
    CRVV
        9
    CRVV  
       2018-05-04 14:32:04 +08:00
    @simpx
    还是没有懂

    如果是普通的 C 程序,大概是这么写的
    ssize_t r = write(fd, buf, size);
    if (r < 0) { ... }
    这里 write 是系统调用

    那这个地方在阿里云上要怎么搞
    要把代码用 dpdk 重写么?还是说阿里云有神奇的机制不用改代码就直接用 dpdk 了?
    forestyuan
        10
    forestyuan  
       2018-05-04 17:55:39 +08:00
    市场宣传不要太当真
    wangxiyi077
        11
    wangxiyi077  
    OP
       2018-05-04 21:02:10 +08:00
    @keyes @simpx
    Intel 官网上表示 SPDK 性能也受补丁影响,单核只得原有性能 75%。不是很懂,请指教。
    https://newsroom.intel.cn/news-releases/press-release-2018-jan-18/
    simpx
        12
    simpx  
       2018-05-04 22:23:47 +08:00   ❤️ 1
    @CRVV #9
    你说的是虚拟机内部的应用,这个还是像你理解的,写普通的 C 程序,性能会被补丁影响。我说的是存储系统内部,用了 dpdk,不受补丁影响


    @wangxiyi077 #11
    这个我也不了解,你的链接里说,SPDK iSCSI 会受影响,SPDK vHOST 不受影响。可能 iSCSI 有什么和内核交互的逻辑?
    zhfish
        13
    zhfish  
       2018-05-05 00:56:27 +08:00
    本身就不快,没什么可降的。。
    choury
        14
    choury  
       2018-05-05 01:08:27 +08:00 via Android
    @CRVV 你肯定没写过 dpdk 的程序,哪有什么 write 让你用,连 tcp 协议都要你自己实现
    tempdban
        15
    tempdban  
       2018-05-05 01:25:55 +08:00 via Android
    @simpx 太绝对了,参见 mlx4,就会教育你什么叫状态查询还要走系统调用,一个头两个大,
    调性能去了
    c3824363
        16
    c3824363  
       2018-05-05 02:23:37 +08:00
    @chunk
    @simpx
    是说它的构架是下面这种样子的么
    虚拟机网络收发 <===> DPDK <=====> 网卡
    虚拟机硬盘读写 <===> SPDK <=====> 物理存储设备
    虚拟机里的系统不需要特殊改动么, 只改动 qemu 实现就可以了么?

    还是说它直接用 DPDK SPDK 实现应用提供服务没虚拟机的事呢?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1886 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 16:23 · PVG 00:23 · LAX 09:23 · JFK 12:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.