From 541a9dff6b9ebb07b99ae6577da7d0f4d94e1ac7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=9F=E6=9D=B0?= <7818108+logic_jie@user.noreply.gitee.com> Date: Mon, 19 Dec 2022 07:16:52 +0000 Subject: [PATCH 01/10] =?UTF-8?q?add=20sig/=E9=AB=98=E6=80=A7=E8=83=BD?= =?UTF-8?q?=E7=BD=91=E7=BB=9C/README.md.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 钟杰 <7818108+logic_jie@user.noreply.gitee.com> --- .../README.md" | 1 + 1 file changed, 1 insertion(+) create mode 100644 "sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/README.md" diff --git "a/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/README.md" "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/README.md" new file mode 100644 index 000000000..7832f85bd --- /dev/null +++ "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/README.md" @@ -0,0 +1 @@ +的 \ No newline at end of file -- Gitee From 18764aa089df6acf1e4c66d8cc0421cb855da482 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=9F=E6=9D=B0?= <7818108+logic_jie@user.noreply.gitee.com> Date: Mon, 19 Dec 2022 07:17:05 +0000 Subject: [PATCH 02/10] =?UTF-8?q?add=20sig/=E9=AB=98=E6=80=A7=E8=83=BD?= =?UTF-8?q?=E7=BD=91=E7=BB=9C/sig-info.yaml.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 钟杰 <7818108+logic_jie@user.noreply.gitee.com> --- .../sig-info.yaml" | 1 + 1 file changed, 1 insertion(+) create mode 100644 "sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/sig-info.yaml" diff --git "a/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/sig-info.yaml" "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/sig-info.yaml" new file mode 100644 index 000000000..4af82c7c0 --- /dev/null +++ "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/sig-info.yaml" @@ -0,0 +1 @@ +要 \ No newline at end of file -- Gitee From 0e42d84a0b97730c00adbdade159570faa571f0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=9F=E6=9D=B0?= <7818108+logic_jie@user.noreply.gitee.com> Date: Mon, 19 Dec 2022 07:17:29 +0000 Subject: [PATCH 03/10] =?UTF-8?q?add=20sig/=E9=AB=98=E6=80=A7=E8=83=BD?= =?UTF-8?q?=E7=BD=91=E7=BB=9C/content/test.md.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 钟杰 <7818108+logic_jie@user.noreply.gitee.com> --- .../content/test.md" | 1 + 1 file changed, 1 insertion(+) create mode 100644 "sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/test.md" diff --git "a/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/test.md" "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/test.md" new file mode 100644 index 000000000..b6fc4c620 --- /dev/null +++ "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/test.md" @@ -0,0 +1 @@ +hello \ No newline at end of file -- Gitee From f80eef6b05360ee1b0887a352a196fa563c5e817 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=9F=E6=9D=B0?= <7818108+logic_jie@user.noreply.gitee.com> Date: Mon, 19 Dec 2022 07:23:01 +0000 Subject: [PATCH 04/10] 1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 钟杰 <7818108+logic_jie@user.noreply.gitee.com> --- .../README.md" | 13 ++++- .../sig-info.yaml" | 48 ++++++++++++++++++- 2 files changed, 59 insertions(+), 2 deletions(-) diff --git "a/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/README.md" "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/README.md" index 7832f85bd..b6425cda9 100644 --- "a/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/README.md" +++ "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/README.md" @@ -1 +1,12 @@ -的 \ No newline at end of file +## 背景 +在云计算时代,软硬件高速发展,云原生、微服务等新的应用形态兴起,让更多的数据在进程之间流动,而网络则成为了这些数据流的载体,在整个云时代扮演者前所未有的重要角色。 + +在这个万物互联的时代,云上的网络通信效率对各种服务至关重要,高性能网络兴趣组致力于利用 XDP、RDMA、VIRTIO 等新高效通信技术,结合软硬件一体化的思想,打造高性能网络协议栈,提升云计算时代数据中心应用的网络的性能 + + +## SIG目标 +打造云场景下高性能数据中心网络技术栈,推动软硬件协同发展。 + + +## 联系 +邮件列表: netdev@lists.openanolis.cn 或钉钉群: 34077273 \ No newline at end of file diff --git "a/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/sig-info.yaml" "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/sig-info.yaml" index 4af82c7c0..410fb5ccc 100644 --- "a/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/sig-info.yaml" +++ "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/sig-info.yaml" @@ -1 +1,47 @@ -要 \ No newline at end of file +name: 高性能网络技术 +en_name:high perf network +home_page: https://openanolis.cn/sig/high-perf-network +description: 高性能网络兴趣小组讨论高性能网络相关话题,包括但不限于 内核 TCP/IP 协议栈、XDP、RDMA、VIRTIO 等,打造云时代的高性能网络协议栈,推动软硬件协同发展。 +en_description: +mailing_list: netdev@lists.openanolis.cn + +maintainers: +- openanolis_id: dust-li + gitee_id: +- openanolis_id: XuanZhuo + gitee_id: +- openanolis_id: tonylu_linux + gitee_id: + + +contributors: +- openanolis_id: wu18374800307 + gitee_id: +- openanolis_id: zhangxianting + gitee_id: +- openanolis_id: mr_lk123 + gitee_id: +- openanolis_id: Wen_Gu + gitee_id: +- openanolis_id: cmbacs + gitee_id: +- openanolis_id: root0day + gitee_id: +- openanolis_id: hailwind + gitee_id: +- openanolis_id: ljubomir + gitee_id: + +repositories: +- repo: + - anolis/testfarm + - anolis/testfarm-front + - anolis/tone-web + - anolis/tone-runner + - anolis/tone-agent + - anolis/tone-agent-proxy + - anolis/tone-agent-front + - anolis/tone-front + - anolis/tone-deploy + - anolis/tone-cli + - anolis/tone-storage \ No newline at end of file -- Gitee From e811888d848c5d900bc09c543edef505f0953ed2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=9F=E6=9D=B0?= <7818108+logic_jie@user.noreply.gitee.com> Date: Mon, 19 Dec 2022 07:29:46 +0000 Subject: [PATCH 05/10] =?UTF-8?q?update=20sig/=E9=AB=98=E6=80=A7=E8=83=BD?= =?UTF-8?q?=E7=BD=91=E7=BB=9C/sig-info.yaml.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 钟杰 <7818108+logic_jie@user.noreply.gitee.com> --- .../sig-info.yaml" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/sig-info.yaml" "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/sig-info.yaml" index 410fb5ccc..9e84b791d 100644 --- "a/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/sig-info.yaml" +++ "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/sig-info.yaml" @@ -1,5 +1,5 @@ name: 高性能网络技术 -en_name:high perf network +en_name: high perf network home_page: https://openanolis.cn/sig/high-perf-network description: 高性能网络兴趣小组讨论高性能网络相关话题,包括但不限于 内核 TCP/IP 协议栈、XDP、RDMA、VIRTIO 等,打造云时代的高性能网络协议栈,推动软硬件协同发展。 en_description: -- Gitee From 6cf28fc5613dbcccfcd69bcee9141bdae7ed9610 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=9F=E6=9D=B0?= <7818108+logic_jie@user.noreply.gitee.com> Date: Wed, 21 Dec 2022 03:29:14 +0000 Subject: [PATCH 06/10] 12 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 钟杰 <7818108+logic_jie@user.noreply.gitee.com> --- .../Express UDP/\344\273\213\347\273\215.md" | 83 ++++++++ ...14\344\272\221\345\256\236\350\267\265.md" | 51 +++++ ...00\346\234\257\346\211\213\345\206\214.md" | 192 ++++++++++++++++++ ...33\344\273\243\347\245\236\351\276\231.md" | 72 +++++++ .../features/virtio-net split header.md" | 34 ++++ .../features/virtio-net support AF_XDP.md" | 11 + .../VIRTIO/features/virtqueue reset.md" | 27 +++ .../virtio sig \344\273\213\347\273\215.md" | 48 +++++ 8 files changed, 518 insertions(+) create mode 100644 "sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/Express UDP/\344\273\213\347\273\215.md" create mode 100644 "sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/Express UDP/\351\230\277\351\207\214\344\272\221\345\256\236\350\267\265.md" create mode 100644 "sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/SMC/\346\212\200\346\234\257\346\211\213\345\206\214.md" create mode 100644 "sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/SMC/\346\212\200\346\234\257\346\217\255\347\247\230\357\274\232\351\230\277\351\207\214\344\272\221\345\217\221\345\270\203\347\254\254\345\233\233\344\273\243\347\245\236\351\276\231.md" create mode 100644 "sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/features/virtio-net split header.md" create mode 100644 "sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/features/virtio-net support AF_XDP.md" create mode 100644 "sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/features/virtqueue reset.md" create mode 100644 "sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/virtio sig \344\273\213\347\273\215.md" diff --git "a/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/Express UDP/\344\273\213\347\273\215.md" "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/Express UDP/\344\273\213\347\273\215.md" new file mode 100644 index 000000000..48ce0ef36 --- /dev/null +++ "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/Express UDP/\344\273\213\347\273\215.md" @@ -0,0 +1,83 @@ +# Express UDP +Express UDP(简称 xudp)是基于 XDP Socket(AF_XDP)实现的 bypass 内核的用户态的高性能 UDP 收发软件库。XDP Socket 是在 XDP 的基础上,结合 Socket API,实现的一种高速数据包通信方案。xudp 则是利用 XDP 和 XDP Socket 封装的一套高性能 UDP 通信接口,为应用提供了一种高性能 UDP 通信编程框架。可以为高 PPS UDP 通信场景带来网络性能上的显著提升。 + +随着 QUIC、低时延直播等的兴起,越来越多的应用开始采用 UDP 来进行通信。 + +## Express UDP 有哪些优势? +### 更低的传输时延与更低的 CPU 占用 +xudp 是一个 zerocopy 的实现,我们减少了很多路径上的数据面的 copy 操作可以明显地减少 copy 的开销。得益于 bypass 内核的 XDP socket 框架, xudp 还是一个绕过内核的 udp 通信库,用户态与驱动层直接交互,可以进一步降底处理延时并且减少 CPU 消耗。 + +同时作为一个用户态库, 我们可以更加大胆地在内存空间与 CPU 之间进行选择与平衡,优化设计获得高的 CPU 性能。 + + + +### XDP 可以编程 +xudp 基于 xdp 在驱动层过滤指定的地址及端口的 udp 包传递给 xudp,我们天然可以使用 xdp 实现数据包的分发,过滤,清洗,QUIC 的连接迁移。 + +### 运维便利,配合难度底 +相对于 DPDK 来说, xudp 配合开发难度底,只要替换 UDP syscall(sendto、recvfrom),原有的项目结构基本不变。并且 xudp 支持 epoll、select、poll 这些事件通知机制可以和基于这些实现的项目如 nginx 完美结合。 + +xudp 对于系统的独占性不强,比如 nginx 和 xudp 结合之后,在运维上基本没有什么变化。只对于网卡有独占性绑定,但是绑定之后对于其它的进程的工作没有任何影响。其它进程还是可以正常使用网卡通信。 + + + +## Express UDP 有哪些瓶颈? +### 使用 xudp 要修改项目, 不能实现透明替换 +由于 xudp 本身是一个用户态的软件库,所以使用 xudp 要重新编译项目本身并链接 xudp 的库。同时由于无法完全兼容 POSIX/Socket API 接口, 用户项目需要修改对于 UDP 的相关调用接口完成代码层面的迁移工作。 + +## Express UDP 适用场景? +对于要求底延时,高并发的场景都可以使用 xudp, 比如 XQUIC web 服务, UDP Proxy,流媒体直播场景。 + +# Express UDP 性能表现 +阿里云上相比于 kernel UDP,xudp 在 UDP 收发上都有显著的性能提升,发送方向单 CPU 所能处理的 PPS 比内核 UDP 提升了约 7 倍,接收方向提升了约 3.5 倍。发送方向性能更好的主要原因是在 virtio-net 上发送方向支持了零拷贝,接收方向暂不支持。 + +![](https://oss.openanolis.cn/fragment/wyqljzmycsdnhtqdaahc) +![](https://oss.openanolis.cn/fragment/rkaryiutcfdplvilmgps) + +# Express UDP 使用方法 +用户项目需要修改对于 udp 的调用接口改为 xudp 提供的接口来实现 UDP 包的收发。 xudp 支持 epoll/poll/select 之类的事件通知机制。详细 API 介绍及使用方法可以查看 xudp.h 头文件及源码中的 tools/xudp\_echo\_server.c 文件。 + +# Express UDP 实现细节 +## 全局视角 +下图完整说明了用户 app 及 xudp 及 XDP socket 和网卡驱动的关系: + + ![](https://oss.openanolis.cn/fragment/gdtlhymeeirbxikopoun) + + + +xudp 基于 tx,rx 队列完成数据的发送和接收。并且这两个队列与内核是通过 mmap 实现的内存共享。 + +内核驱动从 tx 获取 packet 并发送出去。内核驱动的发送行为在第一次要必须由 xudp 基于 sendto syscall 触发一下,之后内核驱动会一直从 tx 队列中进行消费,直到 tx 为空为至。 + +收包过程内核收到数据包之后基于进入 xdp 中, xdp 在过滤数据包之后把数据包提交到 XDP Socket,由 XDP Socket 完成数据包的 copy 到 rx,并完成对于上层进程的唤醒。 + +## xudp 的实现细节 + +![](https://oss.openanolis.cn/fragment/airjfnppmkfxntiixkcs) + + +如图所示是 xudp 的内部实现细节。 + +由于我们关心的数据包可能从多个网卡的队列到达,所以我们要绑定多个网卡的队列, 默认的情况下会绑定所有的网卡队列。在一个 xudp group 里面,包含一个 tx channel 及由多个 channel rx 组成的 rx group。 多个 channel rx 用于从所有的绑定的网卡队列获取数据。并且创建一个 tx channel 用于进程/线程发送数据, tx channel 绑定在某一个 umem 上。 + +每一个 channel rx 或 channel tx 分别对应一个 XDP Socket 实例。 + +如果业务要使用多进程或多线程,就要创建多个 xudp group,每一个进程或线程独立拥有一个 xudp group。 所有的 xudp group 共享 AF_XDP umem。 + +tx 过程 xudp 会完成路由的查找及 ARP 查找。在阿里云上可以开启 xudp 的 noarp 选项来关闭 ARP 过程。 + +xudp 返回给用户的是每一个 tx 及 rx channel 的指针及对应的 XDP Socket 的 fd。 指针用于调用 xudp 的 api 实现 recv 及 send 操作。fd 是用于添加到 epoll/poll/select 来接收 socket 的事件。 + + +# 源代码 +xudp 的代码已经开源了,在这里 [Express UDP](https://gitee.com/anolis/ExpressUDP) + +# 项目应用 +基于龙蜥 OS 的 virtio_net + XDP 的功能,Express UDP 结合阿里自研的 XQUIC 应用到了阿里巴巴的入口 QUIC 服务端上,共同支持阿里业务大规模落地 QUIC。 + +XQUIC 结合 Express UDP 在请求 1M 的场景下可以获得 30% 左右的性能提升。 + +# 实践 +[阿里云实践](https://openanolis.cn/sig/high-perf-network/doc/411142504638253189?preview=null) + + \ No newline at end of file diff --git "a/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/Express UDP/\351\230\277\351\207\214\344\272\221\345\256\236\350\267\265.md" "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/Express UDP/\351\230\277\351\207\214\344\272\221\345\256\236\350\267\265.md" new file mode 100644 index 000000000..f8f84a628 --- /dev/null +++ "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/Express UDP/\351\230\277\351\207\214\344\272\221\345\256\236\350\267\265.md" @@ -0,0 +1,51 @@ +## 前言 +本文章分享了在阿里云上试用 [Express UDP(简称 xudp)](https://openanolis.cn/sig/high-perf-network/doc/414166381455196595?preview=true&no=369164890060064485)的实践纪录。 + +## 阿里云 + +我测试的机型是 ecs.g6e.8xlarge,如果你测试的机型有什么异常性的问题或者跑起来不正常可以给我们反馈。 + +安装的操作系统选择 “Alibaba Cloud Linux" 版本 3.2104。 + + + +## Express UDP 代码 + +xudp 的代码已经开源了,在这里 [Express UDP](https://gitee.com/anolis/ExpressUDP) + +## 内核选项配置 + +在阿里云上运行 xudp 要配置两个内核选项 `virtio_net.force_xdp=1 virtio_net.napi_tx=1`。 + +* virtio_net.force_xdp=1:是由于 xdp 的限制要关闭硬件接收大包的能力 +* virtio_net.napi_tx=1:用于打开 virto_net 的 tx 中断。在 4.19 tx 中断默认是不开启的, 在更新一些版本的内核上这个功能默认就是打开的 + +### 配置的方法 +* 在文件 /etc/default/grub 的 GRUB_CMDLINE_LINUX 的选项后面增加 `virtio_net.force_xdp=1 virtio_net.napi_tx=1` +* 使用命令更新 grub 配置文件:`grub2-mkconfig -o /etc/grub2.cfg` +* 重启 +* 启动之后使用 `cat /proc/cmdline` 检查内核选项配置是否成功。 + +## 测试 Express UDP +[Express UDP](https://gitee.com/anolis/ExpressUDP) 按 readme 的说明编译安装 xudp。 + +### xudp-echo-server +成功安装 make install 之后可以直接运行 `xudp-echo-server` + +在另一台机器(可以是你的本地机器)上可以使用 `nc -u 8080` 给 xudp-echo-server 发送 udp 包。注意: 由于阿里云的安全策略可能导致 udp 包并不能到达机器,所以请确保 udp 包可以到达服务器。 + +### xudpperf + +xudpperf 是一个压测命令, 可以用来发包或收包 +``` +xudpperf send --dst : +xudpperf recv +``` + +## 问题反馈 +有任何问题可以在我们的邮件列表 netdev@lists.openanolis.cn 或内核及 xudp 的 issues 里面进行反馈。 + + + + + diff --git "a/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/SMC/\346\212\200\346\234\257\346\211\213\345\206\214.md" "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/SMC/\346\212\200\346\234\257\346\211\213\345\206\214.md" new file mode 100644 index 000000000..1a8653d83 --- /dev/null +++ "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/SMC/\346\212\200\346\234\257\346\211\213\345\206\214.md" @@ -0,0 +1,192 @@ +阿里云Alibaba Cloud Linux 3操作系统增加了对SMC-R的支持,基于阿里云弹性RDMA技术,实现对TCP应用透明无损的替换,为内存数据库、RPC、大文件传输等场景提供相比TCP更好的性能。本文将为您介绍SMC-R及其使用方法。 + +# 背景信息 + +SMC-R是基于RDMA的共享内存通信(Shared Memory Communications over RDMA)的英文缩写,其实现依赖于RDMA。在了解SMC-R之前,您需要先了解什么是RDMA以及阿里云提供的弹性RDMA服务: + +RDMA是一种旁路内核的远程内存直接访问技术,被广泛应用于数据密集型和计算密集型场景中,是高性能计算、机器学习、数据中心、海量存储等领域的重要解决方案。RDMA支撑了阿里云ESSD云盘、PolarDB数据库等核心业务,并在双11等重大场景得到充分验证。 + +RDMA具有零拷贝、协议栈卸载的特点。RDMA将协议栈的实现下沉至RDMA网卡(RNIC),绕过内核直接访问远程内存中的数据。由于不经过操作系统内核协议栈,RDMA与传统TCP网络相比不仅节省了内核协议栈处理和数据拷贝所需的CPU资源,同时也提高了网络吞吐量、降低了网络通信时延。两者协议栈差异如下图所示: + + + +过去,RDMA只能在一些数据中心网络中通过网卡和交换机紧密配合使用,部署复杂度高。如今,阿里云弹性RDMA将复杂的RDMA技术带到云上,使云服务器ECS的用户也能使用高性能的RDMA传输,无需关心底层复杂的网卡、交换机等物理网络环境配置,降低了使用RDMA的复杂程度。 + +然而,由于RDMA使用的IB verbs接口和常用的POSIX socket接口存在巨大的差异,普通的应用程序如果要用好RDMA,往往需要面临着大量的业务改造,高效的使用IB verbs接口仍存在较高的技术门槛。 + +因此,为了充分挖掘弹性RDMA的潜力,为云上用户提供更好的网络性能,Alibaba Cloud Linux 3提供并优化了SMC-R,同时增加了对弹性RDMA的支持。SMC-R是一种对应用提供标准的socket接口,而底层采用RDMA进行通信的技术。其在高效使用RDMA技术的同时,保留对标准TCP应用的兼容,使更多的应用无需做任何修改便能享受RDMA带来的技术红利。 + +# 技术架构 +SMC-R技术架构说明如下: +协议层级与透明替换 +SMC-R是一套完全兼容socket的可靠、流式的传输协议。SMC-R工作于内核空间,处于socket层和内核IB verbs层之间,向上支持常见的socket接口,向下使用IB verbs内核态接口配合RDMA驱动传输数据。Alibaba Cloud Linux 3提供了控制socket层协议族替换的工具,实现net namespace维度或单个应用维度下的TCP至SMC-R透明替换能力,您无需修改任何网络应用即可完成从TCP到SMC-R的转换,享受RDMA带来的网络性能提升。技术架构图如下所示: + +自动协商和安全回退 + +SMC-R具备自动协商、动态回退TCP的能力。SMC-R建立RDMA链路时,首先在内核中与通信对端建立TCP连接,在握手过程中使用特殊的TCP选项表明自身支持SMC-R,并确认对端同样支持SMC-R。 +若协商过程中确认两端均使用SMC-R,则SMC-R为用户态网络应用申请所需RDMA资源,包括准备RDMA异步通信模型所需的QP与CQ、创建发送数据缓冲区、创建接收数据缓冲区并将其注册为可被远程节点直接访问的远程内存缓冲区RMB(Remote Memory Buffer),完成RDMA链路的初始化。SMC-R将访问RMB所需的访问密钥以及起始地址封装成远程访问令牌(RToken)告知远程节点,作为其访问RMB的重要验证信息。 +若协商过程中发现收发两端其一无法支持SMC-R时,将触发SMC-R回退机制,使用协商时建立的TCP连接完成数据传输,以保障网络的稳定和可靠。 + + + + +协商和数据传输流如下图所示: + +环形内存和数据收发 +SMC-R实现高性能传输的关键在于高效的RDMA网络和环形共享内存结构。SMC-R使用RDMA WRITE单边操作的方式将网络应用传递至内核的数据直接高效地写入远程节点环形RMB中,并伴随着使用RDMA SEND/RECV双边操作的方式交互连接数据管理CDC(Connection Data Control)消息,用于更新、同步RMB中的数据游标(Cursor)。工作原理说明: +针对一侧RMB,读者更新数据消费者游标(Consumer Cursor),标识即将读取的下一字节地址。为避免数据丢失,写者不会将数据写入超过消费者游标的RMB空间中。相似的,写者更新生产者游标(Producer Cursor),标识即将写入的下一字节地址,为确保数据的正确性,读者不会读取超过生产者游标的RMB空间中的内容。数据游标的更新与同步伴随着网络数据传输的始终,确保数据传输的安全与可靠。 + +数据传输过程如下图所示: + +# 核心优势 +SMC-R的优势主要体现在以下几点: +高性能 +得益于RDMA将数据面功能下沉至RNIC并旁路内核直接访问对端环形接收缓冲区,SMC-R相较于传统TCP协议栈在合适的场景下可获得更低的时延、更高的吞吐量,以及更小的CPU负载。详细说明如下: +更轻薄的协议栈。 +使用RDMA进行通信,网络时延更低、CPU占用更少、吞吐量更高。 +高效可靠的远程环形缓冲区直接访问。 +透明替换 +SMC-R兼容POSIX socket接口,通过sysctl和用户态工具支持net namespace或单个应用维度下的TCP至SMC-R协议栈透明替换,在用户无修改的情况下完成新连接协议栈替换,无需额外的应用改造和开发成本。详细说明如下: +兼容socket接口的RDMA RC传输,实现可靠的流式传输协议。 +自动协议协商和安全回退TCP机制。 +net namespace和应用维度的协议栈无损透明替换。 +底层兼容弹性RDMA iWARP和RoCE网络。 +# 应用场景 +基于SMC-R的高性能、透明替换等优势,该技术的典型应用场景示例如下: +时延敏感的数据查询和处理 + +Redis、memcached、PostgreSQL等高性能数据查询与处理的场景,对网络性能有极高的要求。SMC-R为应用提供无侵入式透明替换TCP的能力,无需应用二次开发和适配,即可为应用提供最高50%的QPS提升。 + +高吞吐的数据传输 + +集群内的大规模数据交互与传输,往往需要占用大量的带宽和CPU资源。得益于SMC高效的通信模型,SMC-R在相同的吞吐性能下,CPU资源使用显著低于传统TCP,为应用节省更多的计算资源。 + +# 使用说明 + +Alibaba Cloud Linux 3提供丰富的SMC-R运维监控工具,向您提供完善的SMC-R状态监控和故障诊断功能。您可以通过下述步骤使用SMC-R: + +加载SMC-R模块。 +SMC-R默认编译为内核模块,您可在系统中手动加载smc与smc_diag内核模块。命令说明如下: +加载smc内核模块。 + + +modprobe smc +加载smc_diag内核模块。 + + +modprobe smc_diag +开启透明替换。 +Alibaba Cloud Linux 3支持两个维度的透明替换。具体说明如下: +net namespace维度 +Alibaba Cloud Linux 3为您提供了将net namespace范围内所有新创建的TCP socket替换为SMC-R socket的功能。替换过程如下图所示: +在net namespace维度开启透明替换的操作说明如下: +运行以下命令,打开net namespace范围全局替换。 + + +sysctl net.smc.tcp2smc=1 +默认情况下,sysctl net.smc.tcp2smc=0。当sysctl net.smc.tcp2smc=1时,应用新创建的socket的协议族将由PF_INET/PF_INET6转变为AF_SMC,即从TCP socket转变为SMC-R socket。 +运行应用。 + +若对端同样执行步骤1中所述操作,则两端将使用SMC-R传输数据,否则将回退至TCP协议完成数据传输。协商过程的详细说明,请参见技术架构的自动协商和安全回退。 + +运行以下命令,关闭net namespace范围全局替换。 + + +sysctl net.smc.tcp2smc=0 +应用维度 +Alibaba Cloud Linux 3还提供了应用维度的TCP替换为SMC-R功能。功能实现需要基于SMC-R的运维监控工具集smc-tools。 + + + + +利用smc-tools工具集中的脚本smc_run运行应用程序时,smc_run将使用LD_PRELOAD环境变量把smc-tools工具集中的libsmc-preload.so定义为优先加载的动态库。libsmc-preload.so将尝试把应用程序新创建的TCP socket替换为SMC-R socket。smc_run命令的使用说明如下: + + +Usage: smc_run [ OPTIONS ] COMMAND + +Run COMMAND using SMC for TCP sockets +例如,当您尝试使用SMC-R运行当前目录下的testApp应用程序时,需要运行以下命令: + + +smc_run ./testApp +与net namespace维度的透明替换类似,需要收发两端均使用smc_run将TCP透明替换至SMC-R,才能在两端间建立SMC-R连接,使用RDMA传输数据。 +使用SMC-R的运维监控工具,对SMC-R进行监控。 +smc-tools工具集为您提供了多个维度的SMC-R跟踪诊断,主要包括: +smcr:提供SMC-R相关的linkgroup、device等信息。 +smcss:提供活跃的SMC socket相关信息。 +运行以下命令,安装SMC-R的运维监控工具集smc-tools。 + + +yum install smc-tools -y +使用smcr。 +smcr用于显示SMC-R linkgroup、device等信息。 +命令说明如下: + + +Usage: smcr [ OPTIONS ] OBJECT {COMMAND | help} +OBJECT : { linkgroup | device } + linkgroup + Linkgroup(s) or link(s) used by SMC-R. + device + One or more SMC-R devices. +OPTIONS : {-v[ersion] | -d[etails] | -dd[etails]} + -v, -version + Print the version of the smcr utility and exit. + -d, -details + Print detailed information. + -dd, -ddetails + Print more detailed information. +使用示例: +您可以运行以下命令,查看支持SMC-R的设备。 + + +smcr device +返回结果示例: + + +Net-Dev IB-Dev IB-P IB-State Type Crit #Links PNET-ID +eth0 erdma_01 1 ACTIVE 0x7ffd No 0 +您可以运行以下命令,查看SMC-R linkgroup的信息。 + + +smcr linkgroup +返回结果示例: + + +LG-ID LG-Role LG-Type VLAN #Conns PNET-ID +00000100 CLNT SINGLE 0 1 +使用smcss。 +smcss用于显示SMC-R相关socket的详细信息。 +命令说明如下: + + +Usage: smcss [ OPTIONS ] +OPTIONS : + (none) + displays a list of connecting, closing, or connected SMC sockets with basic information. + -a, --all + displays all types of SMC sockets: listening, opening, closing, and connected. + -l, --listening + shows listening sockets only. These are omitted by default. + -d, --debug + displays additional debug information, such as shutdown state. + -D, --smcd + displays additional SMC-D specific information. Shows SMC-D sockets only. + -h, --help + displays usage information. + -R, --smcr + displays additional SMC-R specific information. Shows SMC-R sockets only. + -v, --version + displays program version. + -W, --wide + do not truncate IP addresses. +使用示例: +您可以运行以下命令,查看所有的SMC-R sockets的详细信息。 + + +smcss -a -R -d +返回结果示例: + + +State UID Inode Local Address Peer Address Intf Mode Shutd Token Sndbuf Rcvbuf Peerbuf rxprod-Cursor rxcons-Cursor rxFlags txprod-Cursor txcons-Cursor txFlags txprep-Cursor txsent-Cursor txfin-Cursor Role IB-device Port Linkid GID Peer-GID +ACTIVE 00000 1105985880 192.168.XX.XX:49080 192.168.XX.XX:10003 0000 SMCR <-> 00000001 00020000 00040000 00040000 0001:00026256 0001:00026256 00:00 0001:00026264 0001:00026256 00:00 0003:00006264 0003:00006264 0003:00006264 CLNT erdma_012211 01 01 0016:3e01:2211:0000:0000:0000:0000:0000 0016:3e01:43b4:0000:0000:0000:0000:0000 \ No newline at end of file diff --git "a/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/SMC/\346\212\200\346\234\257\346\217\255\347\247\230\357\274\232\351\230\277\351\207\214\344\272\221\345\217\221\345\270\203\347\254\254\345\233\233\344\273\243\347\245\236\351\276\231.md" "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/SMC/\346\212\200\346\234\257\346\217\255\347\247\230\357\274\232\351\230\277\351\207\214\344\272\221\345\217\221\345\270\203\347\254\254\345\233\233\344\273\243\347\245\236\351\276\231.md" new file mode 100644 index 000000000..36c93205e --- /dev/null +++ "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/SMC/\346\212\200\346\234\257\346\217\255\347\247\230\357\274\232\351\230\277\351\207\214\344\272\221\345\217\221\345\270\203\347\254\254\345\233\233\344\273\243\347\245\236\351\276\231.md" @@ -0,0 +1,72 @@ +注:一年一度的云栖大会近日在杭州如约举行。今年的云栖大会上阿里云发布了第四代神龙架构,其中弹性 RDMA 加速能力尤其值得关注。基于弹性 RDMA,阿里云操作系统 Alibaba Cloud Linux 3 和龙蜥社区操作系统 Anolis OS 在网络方面基于社区 SMC-R 优化形成兼容 socket 的 RDMA 产品方案,旨在帮助云上应用无修改的享受 RDMA 带来的性能提升。本文将为您阐述 SMC-R 的产生背景、原理架构以及部分性能数据。 + +近些年,随着云计算的飞速发展,特别是阿里云神龙、AWS Nitro 等硬件虚拟化方案的出现,云上的虚拟化网络性能有了质的飞跃。相比于云网络的欣欣向荣,CPU 的性能提升却似“挤牙膏”一般有些力不从心。因此,将部分原本由 CPU 承担的工作卸载到后端硬件的解决思路成为了云计算领域研究的一个“热点”。远程内存直接访问 (Remote Direct Memory Access, RDMA) 这项追求极致性能,曾经主要应用在高性能计算、高频交易等特定场景中的技术也因此进入了云厂商的数据中心。 + +# 从 TCP 到 RDMA + +RDMA 作为一种旁路内核的远程内存直接访问技术,被广泛应用于数据密集型和计算密集型场景中,是高性能计算、机器学习、数据中心、海量存储等领域的重要解决方案。RDMA 在阿里巴巴已大规模稳定运行多年,支撑了阿里云 ESSD、PolarDB 等核心业务,并在双十一等重大场景得到充分验证。 RDMA 具有零拷贝、协议栈卸载的特点。RDMA 将协议栈的实现下沉至 RDMA 网卡 (RNIC),绕过内核直接访问远程内存中的数据。由于不经过系统内核协议栈,RDMA 与传统 TCP/IP 实现相比不仅节省了协议处理和数据拷贝所需的 CPU 资源,同时也提高了网络吞吐量、降低了网络通信时延。 在过去,RDMA 只能在一些数据中心网络中通过网卡和交换机紧密配合使用,部署复杂度高。但如今,阿里云弹性 RDMA 将复杂的 RDMA 技术带到云上,使普通的 ECS 用户也能使用高性能的 RDMA 传输,无需关心底层复杂的网卡、交换机等物理网络环境配置,使其成为一种亲民、普惠的技术。 + +# 从 verbs 到 socket + +不过,虽然 RDMA 性能优异,但是由于 RDMA 使用的 IB verbs 接口和常用的 POSIX socket 接口存在巨大的差异,普通应用要使用 RDMA 将面临着大量的业务改造,高效的将 RDMA 应用于现有业务存在较高的技术门槛。 + +所以,历史上存在一些将 RDMA 的 IB verbs 语义封装成 socket 接口的尝试,典型如 rsocket、libvma。其中,libvma 通过 LD_PRELOAD 拦截 socket 接口,转而使用用户态 verbs 完成数据传输。但这些方案存在一些缺陷:由于转换发生在用户态,一方面缺少内核统一资源管理,另一方面在兼容性上也存在一些问题。 + +从资源管理和兼容的角度上看,在内核中实现 socket 接口相比于用户态来说有着天然的优势。在 Alibaba Cloud Linux 3 和 Anolis OS 中,我们提供并优化了基于 RDMA 的共享内存通信 (Shared Memory Communications over RDMA, SMC-R) 技术,这是一次基于内核 RDMA 实现 TCP 应用兼容的尝试。 + +原生的 SMC-R 支持标准 RoCE 网络,我们对其进行了扩展,首次实现对 iWARP 的支持,可以完美的支持阿里云自研的弹性 RDMA,从而实现云上应用零修改的享受 RDMA 带来的性能红利。 + +# 兼备 socket 和 RDMA 的内核实现:SMC-R + +用一句话来描述,SMC-R 是一套与 TCP/IP 平行的向上兼容 TCP socket 接口,底层使用 RDMA RC 进行数据传输的协议族。 SMC-R 工作于内核空间,处于 socket 层和内核 RDMA 的 IB verbs 层之间。SMC-R 像是一个能力卓越的翻译兼管家,它接收用户传达的 socket 指令,转而使用 RDMA 的 IB verbs 接口管理 RDMA 资源,完成底层基于 RDMA 的数据传输。所以,用户只需将原有 socket 接口使用的协议族从 AF_INET(6) 修改为 AF_SMC 即可完成从 TCP 协议栈到 SMC-R 协议栈的转变。 但这还不够,我们希望在零修改的前提下完成协议替换。为此,Alibaba Cloud Linux 3 和 Anolis OS 在 socket 层增加协议族替换相关的 sysctl 和白名单,提供了 net namespace 和单个应用维度下的 TCP 至 SMC-R 协议栈透明替换能力,使应用不需要任何修改即可让数据在 RDMA 链路这条高速公路上飞驰起来。 然而,仅本地一厢情愿的使用 SMC-R 可不行,远端节点同样得具备 SMC-R 能力才能让高速公路有始有终。因此,SMC-R 具备自动协商和安全回退 TCP 的能力。 SMC-R 建立 RDMA 链路时,首先会与通信对端建立 TCP 连接,双方在握手过程中通过特殊的 TCP 选项表明自身支持 SMC-R。协商成功后,SMC-R 将为用户态应用申请必要的 RDMA 资源,将接收数据缓冲区注册为可被远程节点直接访问的远程内存缓冲区 (Remote Memory Buffer, RMB),并将对应的访问密钥以及缓冲区起始地址封装成远程访问令牌 (RToken) 告知远程节点,作为其访问 RMB 的重要验证信息。 特殊情况下,若在协商过程中发现收发两端其一不具备 RDMA 传输条件时,将触发安全回退机制。SMC-R 会使用协商过程中建立的 TCP 连接完成后续的数据传输,保证网络的可靠稳定。 数据传输的高速公路建立起来后,交通规则也要安排妥当。顾名思义,SMC-R 是一种通过 RDMA 实现共享内存的通信方式,其将环形 RMB 作为共享内存,配合数据游标实现高效的数据传输。 SMC-R 使用 RDMA WRITE 单边操作的方式将网络应用传递至内核的数据直接、高效地写入远程节点环形 RMB 中。同时使用 RDMA SEND/RECV 双边操作的方式交互连接数据管理 (Connection Data Control, CDC) 消息,用于更新、同步 RMB 中的数据游标 (Cursor)。针对一侧 RMB,读者更新消费者游标 (Consumer Cursor),标识即将读取的下一字节地址。为避免数据丢失,写者不会将数据写入超过消费者游标的 RMB 空间中。相似的,写者更新生产者游标 (Producer Cursor),标识即将写入的下一字节地址。为确保数据的正确性,读者不会读取超过生产者游标的 RMB 空间中的内容。就这样,两个数据游标在环形 RMB 上你追我赶,贯穿网络数据传输的始终,确保传输的安全与可靠。 最后,数据在高速公路上飞驰难免会遇到差错,为了保证一切都在掌控之中,Alibaba Cloud Linux 3 和 Anolis OS 为 SMC-R 提供了一系列监控诊断接口和工具,包括控制透明替换的 sysctl、查询 SMC-R socket 状态的 proc 文件、获取 SMC-R 各维度信息的 smc-tools 工具集等,以保障网络的可监控性和易运维性。 通过上述架构概述和理论分析,SMC-R 展现了其兼容 socket 接口,透明替换 TCP,使用 RDMA 完成底层数据传输的能力。基于这些,我们终于可以总结出 SMC-R 的核心优势: 高性能 + +更轻薄的协议栈; + +使用 RDMA 进行通信,网络时延更低、CPU 占用更少、吞吐量更高; + +高效可靠的远程环形缓冲区直接访问。 + +透明替换 + +兼容 socket 接口的 RDMA 可靠流式传输; +自动协议协商和安全回退 TCP 能力; +net namespace 和应用维度的协议栈无损透明替换; + +底层兼容弹性 RDMA iWARP 和标准 RoCE 网络。 + +# 性能表现 + +基于上面的介绍,我们知道 SMC-R 的一个主要优势在于保证兼容的情况下提供更好的性能,但性能到底如何?我们一起来看看 SMC-R 配合阿里云弹性 RDMA 在几个典型应用场景中的表现吧。 测试环境 + +CPU:Intel(R) Xeon(R) Platinum 8269CY CPU @ 2.50GHz 104 核 + +网卡:弹性 RDMA * 1 + +OS:Alibaba Cloud Linux 3 + +「时延敏感的数据库」 场景 redis + +不同 data size 场景下,redis-benchmark 测试 SMC-R 对比 TCP 性能数据 + +不同 clients 数量场景下,redis-benchmark 测试 SMC-R 对比 TCP 性能数据 + +在时延敏感的数据查询与处理场景中,SMC-R + 弹性 RDMA 帮助 Redis 在不同 data size 下平均提升约 50% 的 QPS,在不同 clients 数量下平均提升 20% 的 QPS。 + +「高性能 RPC」场景 1、thrift + +不同类型 RPC 接口下使用 TCP 和 SMC-R 所得 QPS 对比  + + + + +2、netty + +不同类型 RPC 接口下使用 TCP 和 SMC-R 所得 QPS 对比  + +在高性能 RPC 场景中,不同类型接口下 SMC-R + 弹性 RDMA 帮助 thrift 平均提升约 30% 的 QPS;netty 平均提升约 12% 的 QPS。 + +通过上述实验数据,我们清晰的看到 SMC-R 在时延敏感型数据查询、高性能 RPC 场景下具备不俗的性能表现。其实除了上述实验场景外,SMC-R 还可以应用于集群大规模数据交互、高吞吐大文件传输等其他场景。 + +当然,SMC-R 也不是万能的,RDMA 的一些缺陷在 SMC-R 中同样存在。特别是在建连性能上,由于 RDMA 需要与硬件交互,其建连性能远不如 TCP,所以在大量短连接的场景下,SMC-R 的表现不如 TCP;SMC-R 需要为每个连接预先分配内存,在连接数非常多的情况下,内存占用也会比 TCP 更高。另外,SMC-R 作为一种数据中心内部使用的通信方式,并不适合对公网暴露。 + +未来,我们希望继续优化 SMC-R,普惠云上应用。为此,我们将在龙蜥社区高性能网络 SIG (OpenAnolis: https://openanolis.cn/sig/high-perf-network) 上开源代码并持续改进。同时,我们将 SMC-R 相关文档发布于 Alibaba Cloud Linux 3 官网上(https://help.aliyun.com/document_detail/327118.htm),并欢迎大家加入 Alibaba Cloud Linux OS 开发者&用户群(群号:34077273),一同推进云上操作系统的进步。相信在不久的将来,SMC-R 能够帮助更多的用户无侵入的改造应用,方便快捷的享受 RDMA 带来的网络性能提升。 \ No newline at end of file diff --git "a/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/features/virtio-net split header.md" "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/features/virtio-net split header.md" new file mode 100644 index 000000000..2ccedea94 --- /dev/null +++ "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/features/virtio-net split header.md" @@ -0,0 +1,34 @@ +## 描述 + +The purpose of this feature is to split the header and the payload of +the packet. +``` + +| receive buffer | +| 0th descriptor | 1th descriptor | +| virtnet hdr | mac | ip hdr | tcp hdr|<-- hold -->| payload | +``` +We can use a buffer plus a separate page when allocating the receive +buffer. In this way, we can ensure that all payloads can be +independently in a page, which is very beneficial for the zerocopy +implemented by the upper layer. + +## 进展 + +### spec + +目前在推社区 [virtio_net: support split header](https://lists.oasis-open.org/archives/virtio-dev/202207/msg00018.html) ([@Xuan Zhuo](https://openanolis.cn/user/XuanZhuo)) + +### linux kernel + + +已经开发完成, 待 spec 通过之后提交社区 [@衡琪](https://openanolis.cn/user/Ningchang) + +### Qemu (vhost-user) + + +已经开发完成, 待 spec 通过之后提交社区 [@衡琪](https://openanolis.cn/user/Ningchang) + +### DPDK (vhost-user) + +已经开发完成, 待 spec 通过之后提交社区[@衡琪](https://openanolis.cn/user/Ningchang) diff --git "a/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/features/virtio-net support AF_XDP.md" "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/features/virtio-net support AF_XDP.md" new file mode 100644 index 000000000..4c5ffd292 --- /dev/null +++ "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/features/virtio-net support AF_XDP.md" @@ -0,0 +1,11 @@ +## 描述 + +virtio-net 支持 AF_XDP。 AF_XDP 是一套新的 socket, 用于从 XDP 直接接收数据包, 并可以从用户态直接通过驱动发送数据包。全链路 zerocopy。 这个功能要有驱动进行支持, 我们从云环境出发让 virtio-net 对于这个功能进行了支持。 + +这个功能的支持要依赖于 [virtio virtqueue reset](https://openanolis.cn/sig/high-perf-network/doc/613961711197188002?preview=true&no=369164890060064485) 功能。 + +## 进展 + +### kernel + +目前待 virtqueue reset 功能被 kernel 社区接收之后继续推进。[virtio-net: support xdp socket zero copy](https://lore.kernel.org/all/20210610082209.91487-1-xuanzhuo@linux.alibaba.com/) ([@Xuan Zhuo](https://openanolis.cn/user/XuanZhuo)) \ No newline at end of file diff --git "a/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/features/virtqueue reset.md" "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/features/virtqueue reset.md" new file mode 100644 index 000000000..e07669732 --- /dev/null +++ "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/features/virtqueue reset.md" @@ -0,0 +1,27 @@ +## 描述 +支持 virtqueue 单独 reset, 不影响整体 device。 + +## 进展 + +### spec + + +功能已经进入 virtio spec, 随 virtio 1.2 正式发布[@Xuan Zhuo](https://openanolis.cn/user/XuanZhuo) + + https://github.com/oasis-tcs/virtio-spec/issues/124 + https://github.com/oasis-tcs/virtio-spec/issues/139 + +### linux kernel + + +目前正推社区 [virtio pci support VIRTIO_F_RING_RESET](http://lore.kernel.org/all/20220720030436.79520-1-xuanzhuo@linux.alibaba.com) ([@Xuan Zhuo](https://openanolis.cn/user/XuanZhuo)) + +### Qemu (virtio-net, vhost-user) + + +目前正在推社区 [Support VIRTIO_F_RING_RESET for virtio-net and vhost-user in virtio pci](https://lore.kernel.org/qemu-devel/cover.1658141552.git.kangjie.xu@linux.alibaba.com/) ([@kangjie](https://openanolis.cn/user/kangjie)) + +### DPDK (vhost-user) + + +目前正推社区 [vhost: support VIRTIO_F_RING_RESET for vhost-user](https://inbox.dpdk.org/dev/20220719072650.118176-1-kangjie.xu@linux.alibaba.com/) ([@kangjie](https://openanolis.cn/user/kangjie)) \ No newline at end of file diff --git "a/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/virtio sig \344\273\213\347\273\215.md" "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/virtio sig \344\273\213\347\273\215.md" new file mode 100644 index 000000000..f96f4db82 --- /dev/null +++ "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/virtio sig \344\273\213\347\273\215.md" @@ -0,0 +1,48 @@ +## 背景 +virito 是一个高效、成熟的虚拟化场景下的 IO 协议,国内外大量的云计算厂商的虚拟网卡都是基于 virtio 来实现的,目前阿里云的绝大多数 ECS 也都基于 virtio-net,过去在支持阿里的业务的过程中,我们在 virtio 上做了很多优化和改进。virtio 作为一个开源方案,需要社区一起共建,因此我们希望在龙蜥社区积极推动 virtio 的优化,更好的赋能整个 virtio 生态,并进一步推进国内云计算的发展。 + +为了更好的支持更多的特性和优化在龙蜥操作系统的落地,我们在龙蜥社区成立了高性能网络 virtio SIG(Special Interest Group, 兴趣小组),通过加强社区内各个 virtio 相关的团队及公司之间的合作, 增强彼此在这一块的沟通和了解,推动 virtio 在龙蜥更好的发展。希望后续有更多的社区伙伴来共同参与进来, 也欢迎大家积极参与讨论,提问题或需求,大家以一种平等的关系共构建龙蜥社区的 virtio sig。 + +## 组织原则 +共赢、平等、开源 + +## 目标愿景 + +* 探索 virtio 更多可能性, 推进 virtio 标准实现与落地 +* 促进技术交流 +* 提供技术帮助 +* 为各个伙伴提供需求输入 +* 同步各个伙伴的开发进展 +* 促进各个伙伴之间的合作 + + +## 组织形式 +* 定期收集参与伙伴的 topic。有 topic 的情况下, 会召开开放性会议。日常 virtio 相关讨论将以周会形式召开,会议纪要将公开并存档。 +* 通过邮件及钉钉群的方式申报交流议题 +* 开放性会议将以云会议的方式,会议开始一天前会将会议 ID 以及议题汇总发送到 SIG 相关邮件列表和钉钉群 +* 议结束后纪要通过邮件列表发出,并在 SIG 中归档 + + +## 邮件列表 +netdev@lists.openanolis.cn + +## 联系 +邮件列表或钉钉群: 34264214 + +## 会议纪要 +[纪要](https://gitee.com/anolis/community/tree/master/sig/%E9%AB%98%E6%80%A7%E8%83%BD%E7%BD%91%E7%BB%9C/virtio) + + + + + + + + + + + + + + + -- Gitee From 457ea75183c5c7f3e75f53fd314aa35ac6e058b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=9F=E6=9D=B0?= <7818108+logic_jie@user.noreply.gitee.com> Date: Wed, 21 Dec 2022 03:35:32 +0000 Subject: [PATCH 07/10] 1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 钟杰 <7818108+logic_jie@user.noreply.gitee.com> --- .../20220819 \345\221\250\344\274\232.md " | 52 +++++++++++++++++++ ...00\346\224\276\344\274\232\350\256\256.md" | 4 ++ .../20220826 \345\221\250\344\274\232.md" | 11 ++++ .../20220909 \345\221\250\344\274\232.md" | 2 + .../20220916 \345\221\250\344\274\232.md" | 11 ++++ 5 files changed, 80 insertions(+) create mode 100644 "sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/20220819 \345\221\250\344\274\232.md " create mode 100644 "sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/20220824 \345\274\200\346\224\276\344\274\232\350\256\256.md" create mode 100644 "sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/20220826 \345\221\250\344\274\232.md" create mode 100644 "sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/20220909 \345\221\250\344\274\232.md" create mode 100644 "sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/20220916 \345\221\250\344\274\232.md" diff --git "a/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/20220819 \345\221\250\344\274\232.md " "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/20220819 \345\221\250\344\274\232.md " new file mode 100644 index 000000000..780a1b7c8 --- /dev/null +++ "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/20220819 \345\221\250\344\274\232.md " @@ -0,0 +1,52 @@ +## virtio per-virtqueue reset device 实现 + +Kangjie Xu + +### 背景 +vq reset 后端支持:前端 vq reset 代码已合入,后端缺乏支持,因此我们对 virito-net,vhost-net, vhost-user(DPDK) 支持。 +之前 patch set v1 已发到社区,收到了社区一些反馈意见 https://lore.kernel.org/qemu-devel/cover.1658141552.git.kangjie.xu@linux.alibaba.com/T/#t , +我们针对这些问题进行了改进。 + +### 本周进展 +发布 vq reset patch set v2,针对之前的问题进行了改进,包括: +1. 增加新消息 VHOST_USER_RESET_VRING +2. 支持 vhost-net 场景 +3. 解决破坏热迁移兼容性的问题 + +发布v2后,mst提问:尽管这个patch支持的是 pci modern 模式,我们的改动有没有破坏原有legacy模式下的功能? +因此我们使用 iperf 简单测试了下不同场景下的连通性和性能,没有问题。 + + +## virtio split header + +Heng Qi + +### 背景 +由于 linux 内核协议栈的数据拷贝会造成比较大的开销,并且基于高速网卡的数据中心对带宽的需要也不断增加,因为避免数据包拷贝的做法是值得关注的。 +我们在 virtio-net 驱动中测试实现了 split header,其可以将 packet 的 header 和 payload 分割到不同的 buffer 中。 +这样的 payload 按页对齐的 skb 进入到 kernel stack 之后,便可以通过零拷贝绕过协议栈,进而提升内核处理数据包的速度。 + +### 本周进展: +#### spec 方面 +上周 Jason Wang 和 Huck 针对我们所发的 virtio net support split header spec v6 提出了一些问题,尤其是 split header 回退相关的处理。 本周针对上周的问题重新整理出了 split header v7 并提交。https://lists.oasis-open.org/archives/virtio-dev/202208/msg00110.html + +#### 代码实现 + +1. 实现并测试了 split header 回退的代码 +2. 支持了 indirect 间接描述符的支持。 +3. 增加了 split header configure 的代码,待测试。 + + +## virtio per-virtqueue reset kernel + +Xuan Zhuo + +### 本周进展: + +8.14 号 Linux kernel 6.0-rc1 释出。此版本带上了 virtio per-virtqueue reset 的支持。 +在释出之后, 在 Google Cloud 环境上出现 crash, 原因是限制 vq 的 size 的功能在 PCI legacy 的场景下是不支持的, 所以 revert 了部分 commit。但是对于 virtio per-virtqueue reset 的功能并不影响。 + +后续 virtio-net 支持 af_xdp 的功能会在近期提交到社区, 希望可以在 6.1 进入 linux kernel。 + + + diff --git "a/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/20220824 \345\274\200\346\224\276\344\274\232\350\256\256.md" "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/20220824 \345\274\200\346\224\276\344\274\232\350\256\256.md" new file mode 100644 index 000000000..f3cc0f8d0 --- /dev/null +++ "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/20220824 \345\274\200\346\224\276\344\274\232\350\256\256.md" @@ -0,0 +1,4 @@ +1. 同步目前的 anolis 的 virtio 开发的技术的进展 https://etherpad.openanolis.cn/p/virtio +2. split header 分享 @衡琪 +3. 就 CDNP 和 Anolis 初步达成合作意向 +4. 后续开放性会议改为不定期会议, 内部周会可以申请参加。 所有的会议的纪要同步开放。 \ No newline at end of file diff --git "a/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/20220826 \345\221\250\344\274\232.md" "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/20220826 \345\221\250\344\274\232.md" new file mode 100644 index 000000000..082370f30 --- /dev/null +++ "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/20220826 \345\221\250\344\274\232.md" @@ -0,0 +1,11 @@ +- virtqueue reset 后端支持 +* QEMU patch v2的反馈意见 + * Jason wang 建议拆成virito-net/vhost-kernel 和 vhost-user + * 对 migration相关考虑 和 调用链的设计做了一些解释 + * Jason wang 认为 transport(PCI) 应该先于 device 处于enabled 状态。而我们的做法是相反的。如果device ready先 enabled,如果有外部IO产生 + (虽然现在QEMU中不存在这样的情况),而如果 transport 此时没有提前 enabled,导致无法使用 PCI transport,就会产生问题。 + * 解决一些命名的问题 + +* QEMU(virtio-net/vhost-net) 发布 v3 https://lore.kernel.org/qemu-devel/cover.1661414345.git.kangjie.xu@linux.alibaba.com/T/ +* linux(vhost-net) patch 发布 v1 https://lore.kernel.org/bpf/20220825085610.80315-1-kangjie.xu@linux.alibaba.com/T/#u +* QEMU(vhost-user) patch 发布 v1 https://lore.kernel.org/qemu-devel/cover.1661510725.git.kangjie.xu@linux.alibaba.com/T/#t \ No newline at end of file diff --git "a/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/20220909 \345\221\250\344\274\232.md" "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/20220909 \345\221\250\344\274\232.md" new file mode 100644 index 000000000..0daf6bad2 --- /dev/null +++ "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/20220909 \345\221\250\344\274\232.md" @@ -0,0 +1,2 @@ +## kernel vhost vq reset +* patch 已经被 acked 等合并进入主线 \ No newline at end of file diff --git "a/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/20220916 \345\221\250\344\274\232.md" "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/20220916 \345\221\250\344\274\232.md" new file mode 100644 index 000000000..84fd6c4a6 --- /dev/null +++ "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/20220916 \345\221\250\344\274\232.md" @@ -0,0 +1,11 @@ +## qemu vq reset +* virtio-net + vhost-kernel v5 已经被 acked + + +## split header spec + +Michael 对之前的 split header 方案提出了较强意见,主要是针对现有方案 +所使用的 descriptor chain,mst 认为 descriptor chain 会影响性能。 +为了解决这个问题,我们重新发了 split header spec v8。新的方案不依赖于 +descriptor chain ,并且基于 mergeable buffer 来实现,但是需要对 + device 做一些约束,例如在第一个缓冲区中留出一些空间,以让 xdp 等场景使用。 \ No newline at end of file -- Gitee From 1bb4915dcdc1c402bb1a32d2a7db1e8f5203964e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=9F=E6=9D=B0?= <7818108+logic_jie@user.noreply.gitee.com> Date: Wed, 21 Dec 2022 03:35:49 +0000 Subject: [PATCH 08/10] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=20si?= =?UTF-8?q?g/=E9=AB=98=E6=80=A7=E8=83=BD=E7=BD=91=E7=BB=9C/content/test.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../content/test.md" | 1 - 1 file changed, 1 deletion(-) delete mode 100644 "sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/test.md" diff --git "a/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/test.md" "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/test.md" deleted file mode 100644 index b6fc4c620..000000000 --- "a/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/test.md" +++ /dev/null @@ -1 +0,0 @@ -hello \ No newline at end of file -- Gitee From d57eaa8db59ff50027196c4a97cb8035abd5e464 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=9F=E6=9D=B0?= <7818108+logic_jie@user.noreply.gitee.com> Date: Wed, 21 Dec 2022 03:36:01 +0000 Subject: [PATCH 09/10] =?UTF-8?q?=E9=87=8D=E5=91=BD=E5=90=8D=20sig/?= =?UTF-8?q?=E9=AB=98=E6=80=A7=E8=83=BD=E7=BD=91=E7=BB=9C/content/VIRTIO/20?= =?UTF-8?q?220819=20=E5=91=A8=E4=BC=9A.md=20=20=E4=B8=BA=20sig/=E9=AB=98?= =?UTF-8?q?=E6=80=A7=E8=83=BD=E7=BD=91=E7=BB=9C/content/VIRTIO/20220819=20?= =?UTF-8?q?=E5=91=A8=E4=BC=9A.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../content/VIRTIO/20220819 \345\221\250\344\274\232.md" | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/20220819 \345\221\250\344\274\232.md " => "sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/20220819 \345\221\250\344\274\232.md" (100%) diff --git "a/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/20220819 \345\221\250\344\274\232.md " "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/20220819 \345\221\250\344\274\232.md" similarity index 100% rename from "sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/20220819 \345\221\250\344\274\232.md " rename to "sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/content/VIRTIO/20220819 \345\221\250\344\274\232.md" -- Gitee From 12722625d1f73225aea7e1db2d396ea862ac6a3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=9F=E6=9D=B0?= <7818108+logic_jie@user.noreply.gitee.com> Date: Wed, 21 Dec 2022 03:36:26 +0000 Subject: [PATCH 10/10] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=20si?= =?UTF-8?q?g/=E9=AB=98=E6=80=A7=E8=83=BD=E7=BD=91=E7=BB=9C/virtio?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20220819 \345\221\250\344\274\232.md" | 52 ------------------- ...00\346\224\276\344\274\232\350\256\256.md" | 4 -- .../20220826 \345\221\250\344\274\232.md" | 11 ---- .../20220909 \345\221\250\344\274\232.md" | 2 - .../20220916 \345\221\250\344\274\232.md" | 11 ---- 5 files changed, 80 deletions(-) delete mode 100644 "sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/virtio/20220819 \345\221\250\344\274\232.md" delete mode 100644 "sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/virtio/20220824 \345\274\200\346\224\276\344\274\232\350\256\256.md" delete mode 100644 "sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/virtio/20220826 \345\221\250\344\274\232.md" delete mode 100644 "sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/virtio/20220909 \345\221\250\344\274\232.md" delete mode 100644 "sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/virtio/20220916 \345\221\250\344\274\232.md" diff --git "a/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/virtio/20220819 \345\221\250\344\274\232.md" "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/virtio/20220819 \345\221\250\344\274\232.md" deleted file mode 100644 index c874c2d5b..000000000 --- "a/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/virtio/20220819 \345\221\250\344\274\232.md" +++ /dev/null @@ -1,52 +0,0 @@ -## virtio per-virtqueue reset device 实现 - -Kangjie Xu - -### 背景 -vq reset 后端支持:前端 vq reset 代码已合入,后端缺乏支持,因此我们对 virito-net,vhost-net, vhost-user(DPDK) 支持。 -之前 patch set v1 已发到社区,收到了社区一些反馈意见 https://lore.kernel.org/qemu-devel/cover.1658141552.git.kangjie.xu@linux.alibaba.com/T/#t , -我们针对这些问题进行了改进。 - -### 本周进展 -发布 vq reset patch set v2,针对之前的问题进行了改进,包括: -1. 增加新消息 VHOST_USER_RESET_VRING -2. 支持 vhost-net 场景 -3. 解决破坏热迁移兼容性的问题 - -发布v2后,mst提问:尽管这个patch支持的是 pci modern 模式,我们的改动有没有破坏原有legacy模式下的功能? -因此我们使用 iperf 简单测试了下不同场景下的连通性和性能,没有问题。 - - -## virtio split header - -Heng Qi - -### 背景 -由于 linux 内核协议栈的数据拷贝会造成比较大的开销,并且基于高速网卡的数据中心对带宽的需要也不断增加,因为避免数据包拷贝的做法是值得关注的。 -我们在 virtio-net 驱动中测试实现了 split header,其可以将 packet 的 header 和 payload 分割到不同的 buffer 中。 -这样的 payload 按页对齐的 skb 进入到 kernel stack 之后,便可以通过零拷贝绕过协议栈,进而提升内核处理数据包的速度。 - -### 本周进展: -#### spec 方面 -上周 Jason Wang 和 Huck 针对我们所发的 virtio net support split header spec v6 提出了一些问题,尤其是 split header 回退相关的处理。 本周针对上周的问题重新整理出了 split header v7 并提交。https://lists.oasis-open.org/archives/virtio-dev/202208/msg00110.html - -#### 代码实现 - -1. 实现并测试了 split header 回退的代码 -2. 支持了 indirect 间接描述符的支持。 -3. 增加了 split header configure 的代码,待测试。 - - -## virtio per-virtqueue reset kernel - -Xuan Zhuo - -### 本周进展: - -8.14 号 Linux kernel 6.0-rc1 释出。此版本带上了 virtio per-virtqueue reset 的支持。 -在释出之后, 在 Google Cloud 环境上出现 crash, 原因是限制 vq 的 size 的功能在 PCI legacy 的场景下是不支持的, 所以 revert 了部分 commit。但是对于 virtio per-virtqueue reset 的功能并不影响。 - -后续 virtio-net 支持 af_xdp 的功能会在近期提交到社区, 希望可以在 6.1 进入 linux kernel。 - - - diff --git "a/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/virtio/20220824 \345\274\200\346\224\276\344\274\232\350\256\256.md" "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/virtio/20220824 \345\274\200\346\224\276\344\274\232\350\256\256.md" deleted file mode 100644 index 73d191717..000000000 --- "a/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/virtio/20220824 \345\274\200\346\224\276\344\274\232\350\256\256.md" +++ /dev/null @@ -1,4 +0,0 @@ -1. 同步目前的 anolis 的 virtio 开发的技术的进展 https://etherpad.openanolis.cn/p/virtio -2. split header 分享 @衡琪 -3. 就 CDNP 和 Anolis 初步达成合作意向 -4. 后续开放性会议改为不定期会议, 内部周会可以申请参加。 所有的会议的纪要同步开放。 \ No newline at end of file diff --git "a/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/virtio/20220826 \345\221\250\344\274\232.md" "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/virtio/20220826 \345\221\250\344\274\232.md" deleted file mode 100644 index 89ac3ea6c..000000000 --- "a/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/virtio/20220826 \345\221\250\344\274\232.md" +++ /dev/null @@ -1,11 +0,0 @@ -- virtqueue reset 后端支持 -* QEMU patch v2的反馈意见 - * Jason wang 建议拆成virito-net/vhost-kernel 和 vhost-user - * 对 migration相关考虑 和 调用链的设计做了一些解释 - * Jason wang 认为 transport(PCI) 应该先于 device 处于enabled 状态。而我们的做法是相反的。如果device ready先 enabled,如果有外部IO产生 - (虽然现在QEMU中不存在这样的情况),而如果 transport 此时没有提前 enabled,导致无法使用 PCI transport,就会产生问题。 - * 解决一些命名的问题 - -* QEMU(virtio-net/vhost-net) 发布 v3 https://lore.kernel.org/qemu-devel/cover.1661414345.git.kangjie.xu@linux.alibaba.com/T/ -* linux(vhost-net) patch 发布 v1 https://lore.kernel.org/bpf/20220825085610.80315-1-kangjie.xu@linux.alibaba.com/T/#u -* QEMU(vhost-user) patch 发布 v1 https://lore.kernel.org/qemu-devel/cover.1661510725.git.kangjie.xu@linux.alibaba.com/T/#t \ No newline at end of file diff --git "a/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/virtio/20220909 \345\221\250\344\274\232.md" "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/virtio/20220909 \345\221\250\344\274\232.md" deleted file mode 100644 index 078248cdf..000000000 --- "a/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/virtio/20220909 \345\221\250\344\274\232.md" +++ /dev/null @@ -1,2 +0,0 @@ -## kernel vhost vq reset -* patch 已经被 acked 等合并进入主线 \ No newline at end of file diff --git "a/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/virtio/20220916 \345\221\250\344\274\232.md" "b/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/virtio/20220916 \345\221\250\344\274\232.md" deleted file mode 100644 index 54c00cca4..000000000 --- "a/sig/\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234/virtio/20220916 \345\221\250\344\274\232.md" +++ /dev/null @@ -1,11 +0,0 @@ -## qemu vq reset -* virtio-net + vhost-kernel v5 已经被 acked - - -## split header spec - -Michael 对之前的 split header 方案提出了较强意见,主要是针对现有方案 -所使用的 descriptor chain,mst 认为 descriptor chain 会影响性能。 -为了解决这个问题,我们重新发了 split header spec v8。新的方案不依赖于 -descriptor chain ,并且基于 mergeable buffer 来实现,但是需要对 - device 做一些约束,例如在第一个缓冲区中留出一些空间,以让 xdp 等场景使用。 \ No newline at end of file -- Gitee