既然零拷贝直接内存这么快,这么好为啥不都用?

2020-05-25 09:21:53 +08:00
 aiqier

零拷贝省去了从内核缓冲区到进程缓冲区的时间,这么好的优化没有在任何地方使用,我猜测一定有什么弊端才会导致不会所有读写都使用零拷贝,但是究竟是啥弊端,个人只想到是内核缓冲区和进程缓冲区没有分开,不方便管理。

8964 次点击
所在节点    程序员
46 条回复
tachikomachann
2020-05-25 09:23:52 +08:00
跟 cpu 有 L1 L2 L3 cache 差不多道理吧?
hoholiday
2020-05-25 09:27:19 +08:00
安全、性能和复杂度的考虑
jinzhongyuan
2020-05-25 09:41:14 +08:00
插眼关注,等大佬
nekoneko
2020-05-25 09:42:41 +08:00
正如二楼所说
lllyyy
2020-05-25 09:52:06 +08:00
比较难管理吧
tabris17
2020-05-25 09:55:21 +08:00
并发写怎么办?
pdog18
2020-05-25 09:56:46 +08:00
@hoholiday 我猜也是这个原因,但是为什么不能通过“封装”来避免这个问题呢?是哪个方面导致了无法规避掉这些因素?(这可能很蠢,但是真心想知道原因)
zy445566
2020-05-25 09:58:17 +08:00
为什么引用传递比值传递快,反而值传递用的多?
pdog18
2020-05-25 10:06:01 +08:00
@zy445566 为什么啊
yulitian888
2020-05-25 10:08:10 +08:00
这个问题就好像在问,大别墅那么好,为什么大家不买呢?
好,意味着是需要付出代价的!
零拷贝只能解决性能问题,带来的是 CPU 承担更多的负载,内存管理增加了更复杂的安全逻辑。副作用是提高了编写、测试难度,降低了可维护性。这两点决定了做应用开发的人不会涉足,只有特定领域,比如驱动开发,或者高性能计算的时候才会选择去用。
而我们都知道,大部分开发岗位做的是应用系统开发,而不是底层驱动。写一大堆高性能复制对应用系统的性能提升,很容易就被一个编写不良的业务循环给抵消了,何苦呢!靠这种技术提高性能,不如好好培养算法把业务实现写得更优雅来得实在
dilu
2020-05-25 10:09:38 +08:00
好≠合适
mscb
2020-05-25 10:10:34 +08:00
心智负担(逃
hheedat
2020-05-25 10:14:50 +08:00
@yulitian888 “带来的是 CPU 承担更多的负载”,CPU 的负载为啥会变高?
zjsxwc
2020-05-25 10:14:57 +08:00
楼主也是来布道 rust 吗,除了显式实现 copy 特性外,默认赋值都是直接转移所有权的不做拷贝,还有借用这些当然是直接传引用了也不拷贝,也就是说基本都是零拷贝哟,美滋滋
ShadowStar
2020-05-25 10:28:33 +08:00
10 楼基本在胡说八道,零拷贝技术就是为了绕开 CPU 的处理。
零拷贝需要硬件(比如常见的:网卡)支持 DMA ( Direct Memory Access )操作。
yulitian888
2020-05-25 10:31:44 +08:00
@hheedat 嗯,好吧,我这个表达是不对的。CPU 减少了“复制”这个行为的消耗,总负载肯定是降低的。但是增加了内存共享上锁的操作。前者后者需要更复杂的编写和测试。这样表达才对。
behanga
2020-05-25 10:35:05 +08:00
从你平常最常见的常见说起, 如何处理同步问题?
belowfrog
2020-05-25 10:35:15 +08:00
nginx 的 sendfile 不就是应用么
fcten
2020-05-25 10:45:49 +08:00
从内核态到用户态零拷贝需要内核支持,不是说零拷贝就可以零拷贝的。内核空间和用户空间隔离是内核安全性的基石,不然就变 DOS 了。
90928yao
2020-05-25 10:50:29 +08:00
这个问题我也很疑惑

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

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

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

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

© 2021 V2EX