开源之夏是中国科学院软件研究所联合openEuler发起的开源软件供应链点亮计划系列暑期活动,旨在鼓励在校学生积极参与开源软件的开发维护,促进优秀开源软件社区的蓬勃发展。活动联合各大开源社区,针对重要开源软件的开发与维护提供项目,并向全球高校学生开放报名。
openEuler社区目前已上线94个项目!欢迎各大学子按照自己感兴趣或擅长的方向进行申请
今天给大家带来Rust技术领域的任务介绍,openEuler社区共发布了10个Rust技术领域的项目,任务难易程度适中,欢迎大家参与到项目中。我们将为大家提供丰富的学习资源和技术指导 。
项目1:用 Rust for 为 openEuler 实现支持 CXL.mem 协议的仿真测试设备
项目描述:
CXL是下一代服务器高性能总线,支持CPU和外设之间的缓存一致性,大幅度提升了CPU和外设之间数据交互的性能。但是目前符合CXL规范的硬件设备还很少,需要提供CXL的模拟测试环境,以方便驱动和上层相关应用的开发与调试。
本项目要求采用Rust for Linux基于openEuler实现支持CXL.mem协议的type3型设备功能仿真,用于调试CXL协议的驱动或开发上层应用。
产出标准:
1、用Rust for Linux实现CXL.mem协议的设备功能;
2、给出CXL.mem仿真设备的性能评估。
技术要求:
1、熟悉Rust for Linux;
2、熟悉CXL.mem协议。
项目导师:
项目主页:
https://gitee.com/openeuler/open-source-summer/issues/I6YQ1X?from=project-issue
项目2:基于tokio实现1号进程的核心功能
项目描述:
1号进程用户态启动的第一个进程,在开机阶段由它负责拉起用户态的其他进程。systemd是当前被各发行商广泛使用的1号进程,它提出的依赖解析、并行启动等特点加速了linux的启动流程。但是现在systemd逐渐变得过于庞大,提供了大量冗余模块、特性,导致它不够可靠。
因此,我们希望能够基于rust实现一个简化版本的systemd,基于tokio的异步IO实现高性能、高可靠的systemd。
产出标准:
基于rust的tokio或其他异步框架实现systemd的核心功能。合格标准:
1、实现systemd的主要的依赖解析能力,至少包含:Requires、Wants、After、Before、Conflicts
2、实现并行启动能力,支持服务的socket激活、挂载点监控
3、能够在容器环境上拉起sshd服务,并能正常ssh连接
技术要求:
1、熟悉rust语言的开发,tokio等异步框架
2、熟悉unix domain socket的开发
3、熟悉systemd的unit、socket、service等核心模块及linux的启动流程
项目导师:
项目主页:
https://gitee.com/openeuler/open-source-summer/issues/I6XN37?from=project-issue
项目3:为 openEuler 移植 CXL 模拟测试环境
项目描述:
CXL是下一代服务器高性能总线,支持CPU和外设之间的缓存一致性,大幅度提升了CPU和外设之间数据交互的性能。但是目前符合CXL规范的硬件设备还很少,需要提供CXL的模拟测试环境,以方便驱动和上层相关应用的开发与调试。
目前Linux内核社区和QEMU社区提供了基于QEMU的CXL模拟测试环境,但是尚未在openEuler操作系统上进行移植和性能测试。本项目要求为openEuler操作系统移植CXL模拟测试环境并给出性能评估。
产出标准:
1、把现有基于QEMU的CXL模拟测试环境移植到openEuler操作系统上;
2、对移植的模拟测试环境进行性能评估并给出性能指标。
技术要求:
1、熟悉Linux内核开发;
2、熟悉QEMU相关开发;
3、熟悉CXL协议。
项目导师:
项目主页:
https://gitee.com/openeuler/open-source-summer/issues/I6YO77?from=project-issue
项目4:用 Rust 实现基于 RDMA 的通用 RPC 框架
项目描述:
RDMA 是被高性能数据中心广泛使用的高性能网络协议栈,但是至今还没有一款好用的基于 RDMA 协议的 Rust 语言的 RPC 框架。本项目要求采用 Rust 实现一个基于 RDMA 协议的通用 RPC 框架。
产出标准:
1、基于 RDMA 协议实现完整的 RPC 框架;
2、完成所实现的 RPC 框架性能测试。
技术要求:
1、熟悉 Rust 语言;
2、熟悉 Rust 异步编程;
3、熟悉 RDMA 协议的 API;
4、熟悉至少一种常见 RPC 框架。
项目导师:
项目主页:
https://gitee.com/openeuler/open-source-summer/issues/I6YNC8?from=project-issue
项目5:提供基于Rust的高性能grep命令
项目描述:
描述:grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep依赖pcre2作为正则表达式的匹配组件,由于rust提供了更为高性能的正则表达式组件,因此本项目希望通过rust重写grep的方式,直接调用rust提供的整体表达式组件,提供更好性能的grep组件。
C2Rust为能够将C代码转换为Rust语言的转换工具,中科大基于原生C2Rust的基础上,提供更为高效和准确的转换工具,因此本项目在开发过程中可以借助C2Rust工具进行转换,并通过二次修改的方式,完成整个项目的开发。该项目的目标如下:
1、该项目使用Rust语言开发,并且正则表达式库调用Rust提供的组件。
2、新的项目提供名称为ogrep的二进制文件,该命令的参数同原有的grep完全相同。
3、该项目的功能同原有的grep相同,相同的测试用例在ogrep以及grep上相同。
4、基于现有的benchmark测试工程或者设计新的性能测试用例,对不同的grep组件进行性能测试,并提供性能测试对比报告。
产出标准:
1、需提供可以编译通过、正常运行、测试通过的源码以及对应的指导文档。
2、命令行的行为同原有的grep相同。
3、C2Rust转换之后,尽量使用安全的方法进行二次修改,并且需要提供修改过程中的关键修改过程。
4、注释/文档详尽。
技术要求:
1、熟练掌握Rust开发语言
2、熟练使用正则表达式
项目导师:
项目主页:
https://gitee.com/openeuler/open-source-summer/issues/I6YJ6A?from=project-issue
项目6: 用 Rust for Linux 基于 openEuler 实现 RDMA 设备驱动
项目描述:
RDMA是高性能网络协议栈,常用于超算中心和高端存储。目前RDMA的驱动是用C语言实现的。Rust for Linux是采用Rust语言来开发Linux内核模块的框架。
本项目要求采用Rust for Linux来实现RDMA设备驱动。
产出标准:
1、用Rust for Linux实现的驱动要能对接RDMA的API库libverbs;
2、支持常见的发送、接收、建立连接、内存管理等功能;
3、支持虚实地址转换数据、队列连接数据在RDMA设备和主存之间交换。
技术要求:
1、熟悉Rust for Linux;
2、熟悉RDMA协议。
项目导师:
项目主页:
https://gitee.com/openeuler/open-source-summer/issues/I6YRPB?from=project-issue
项目7:对devtmpfs文件系统下的非常规文件进行监控以及进程溯源
项目描述:
当前内核提供了多种文件系统监控技术,比如inotify、fanotify。其中inotify支持对devtmpfs等伪文件系统的监控,但是无法进行文件操作的进程溯源,而fanotify支持对常规文件的监控以及进程溯源,但是无法对devtmpfs这类伪文件系统下的非常规文件进行监控。
我们期望一种内核态到用户态的完整解决方案,既支持对devtmpfs下的非常规文件进行监控,并且支持对文件操作的进程进行溯源。
产出标准:
使用C或Rust语言,实现对devtmpfs下的非常规文件监控以及进程溯源的功能。
1、监控文件的IN_CLOSE_WRITE事件
2、支持对触发文件事件的进程ID溯源
3、提供技术演示。
注释/文档详尽。
项目导师:
项目主页:
https://gitee.com/openeuler/open-source-summer/issues/I6XLIK?from=project-issue
项目8: 为 Rust 编程语言的 Crate 设计独立文件格式并实现
项目描述:
任务所指的 Crate 为 Rust 编程语言中的 Library Crate,当前 Crate 文件为 Library 源代码仓库的压缩包(去除了 .git 目录)。对于 Crate 文件的 Checksum 校验值,存储在对应的 Index 仓库中。
例如在 https://github.com/rust-lang/crates.io-index/blob/master/lv/gl/lvgl 的第一行存储了 lvgl 的 0.1.0 版本的所有信息,其中 cksum 是压缩包的校验值。
{"name":"lvgl","vers":"0.1.0","deps":[{"name":"cty","req":"^0.2.1","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"lvgl-sys","req":"^0.1.0","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"}],"cksum":"683a7099d37b83be0dd679b4daf4252c601348729ee6cd1769d23006d29a83a0","features":{},"yanked":false}
{"name":"lvgl","vers":"0.1.0","deps":[{"name":"cty","req":"^0.2.1","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"lvgl-sys","req":"^0.1.0","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"}],"cksum":"683a7099d37b83be0dd679b4daf4252c601348729ee6cd1769d23006d29a83a0","features":{},"yanked":false}
这样带来了几个问题:
1、Crate 文件不能单独分发,因为其文件格式不带校验值,所以无法确定是否被修改。
2、如果一个 crates.io 的代理服务即代理了 https://github.com/rust-lang/crates.io-index 仓库,同时缓存了 crate 文件就可以对这个轻易的对 Crate 文件进行修改并且使用代理的人并不感知。
为了解决这个问题,本次任务计划针对 Crate 设计一个文件格式,通过在 HEADER 中增加附属信息,提升 Crate 文件的易用性、安全性,使其能够独立的通过 Mirror 服务分发,降低 crates.io 的带宽压力。
产出标准:
1、对目前 Linux 中主流使用的各种文件格式有大概的分析,包括但不限于 rpm、deb 等
2、对有包管理方案的主流开发语言的 Library 格式进行分析,包括单不限于 Golang、Nodejs 、Python、Ruby 等
3、针对需求设计 Crate 文件的格式,并实现单 crate 文件和批处理能力的编码和解码功能
4、将以上的工作整理为英文文档,同时作为产出
5、针对 cargo 工具开发一个能使用此功能的 patch,能够兼容使用原压缩格式的 crate 文件
技术要求:
1、对 Rust 编程语言比较了解,有一定的 Rust 开发经验
2、熟练使用主流或非主流的 Linux 发型版
3、英语熟练
项目导师:
项目主页:
https://gitee.com/openeuler/open-source-summer/issues/I6XGL1?from=project-issue
项目9: 实现解析systemd格式配置的rust库
项目描述:
systemd是一个Linux系统的初始化系统和服务管理器,它使用一种特定的格式来描述系统服务和守护进程的配置。本题目的目标是编写一个Rust crate库,能够解析systemd格式的配置文件,并将其转换为Rust数据结构。具体而言,需要实现以下功能:
1、读取systemd格式的配置文件,解析其中的配置项和值。
2、将解析后的配置项和值存储到Rust数据结构中,例如HashMap或Struct。
3、提供一个简单的命令行界面,让用户可以输入配置文件路径并查看解析结果。
产出标准:
1、使用Rust语言编写程序, 提供lib形式的crate。
2、使用标准库或第三方库解析配置文件。
3、使用合适的数据结构存储解析结果。
4、注释/文档详尽。
技术要求:
1、熟悉linux
2、熟悉rust语言
3、熟悉systemd配置格式
项目导师:
项目主页:
https://gitee.com/openeuler/open-source-summer/issues/I6XKVU?from=project-issue
项目10: 用 Rust 基于 DPDK 在用户态实现 RDMA RoCEv2 协议
项目描述:
RDMA 被高性能数据中心广泛使用,RDMA RoCEv2 协议因为兼容以太网被各大互联网厂商和云计算提供商所广泛使用。RDMA 的极致性能需要通过专业的 RDMA 网卡实现,但是在某些环境中仍然需要软件模拟来实现相同的功能。现有使用叫广泛的软件模拟实现为 soft-roce 内核实现,该实现存在不稳定的问题,被 RedHat 踢出了发行版内核。
基于上述现状,本项目要求采用 Rust 语言异步编程的方式,基于 DPDK 实现用户态 RoCEv2 协议。通过 DPDK 在用户态实现 RoCEv2 协议一方面具有很高的灵活性,易于调试、便于修改,另一方面也能保证不错的性能。
产出标准:
1、在用户态完整实现 RoCEv2 协议;
2、对接 DPDK;
3、支持 libverbs 调用接口。
技术要求:
1、熟悉 Rust 语言,以及 Rust Async;
2、熟悉 DPDK;
3、熟悉 RoCEv2 协议。
项目导师:
项目主页:
https://gitee.com/openeuler/open-source-summer/issues/I6XGL1?from=project-issue
活动日程及参与方式
目前正处于学生注册、沟通导师、提交项目申请环节。