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

2018-05-04 10:45:31 +08:00
 wangxiyi077
https://zhuanlan.zhihu.com/p/33593012

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



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

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

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

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

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

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

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

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

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

不需要系统调用,不需要和内核交互,也不需要上下文切换
chunk
2018-05-04 11:43:43 +08:00
@iwtbauh 用户态的网络栈、文件系统的优势就是减少系统调用、重量级的 vfs 和 io 栈
GreatEscape
2018-05-04 11:56:28 +08:00
@simpx 你是不是对 DPDK 有什么误解。
DPDK 的 driver 和普通的 driver 一样都是一个内核模块,只是收到报文后不打包成 skb 走内核的协议栈,直接放到一块通过 mmap 映射到用户态的空间上,里面简单来讲就是一个环形队列。
不是说协议栈放在了用户态就不需要和内核交互了,比如底层的 poll 之类的还是会涉及系统调用的。
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
2018-05-04 12:07:07 +08:00
单纯数据通路是基本不涉及系统调用的
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
2018-05-04 17:55:39 +08:00
市场宣传不要太当真
wangxiyi077
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
2018-05-04 22:23:47 +08:00
@CRVV #9
你说的是虚拟机内部的应用,这个还是像你理解的,写普通的 C 程序,性能会被补丁影响。我说的是存储系统内部,用了 dpdk,不受补丁影响


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

还是说它直接用 DPDK SPDK 实现应用提供服务没虚拟机的事呢?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/452010

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX