问题:通过 Linux TCP socker 发送数据时,数据从用户空间到网卡驱动之前被拷贝了几次? 背景:我最近在看一个叫做 softRoCE 的东西,它声称在发送数据的时候是 zero-copy,但看了它的代码,如果我没理解错的话,数据是先从用户空间直接拷贝到 sk_buff 中(也就是构造数据包),然后通过 ip_local_out() 发出去的。我又查了一下 TCP 的流程,没找到特别清楚的文章,但了解到数据是先放进 tcp send buffer,然后构造数据包,再通过 IP 层发出去。根据字面意思,应该是从用户空间到 tcp send buffer 拷贝了一次,在构造数据包的时候又拷贝了一次,如果这个叫 one-copy 的话,那 softRoCE 叫 zero-copy 应该没啥问题了。但我不确定对 TCP 发包流程理解是否准确,感觉这个 tcp send buffer 也有可能是一些预分配的 sk_buff,这样的话就和 softRoCE 差不多。疑惑,所以想问一下。
-- 您收到此邮件是因为您订阅了 Google 网上论坛的“TUNA 主邮件列表”群组。 要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到[email protected]。 要在网络上查看此讨论,请访问 https://groups.google.com/d/msgid/tuna-general/a8a33197-0eca-4a6d-8826-42ad0a381448%40googlegroups.com。
