开源之夏 2023 | 欢迎报名Rust相关项目_linux

开源之夏是中国科学院软件研究所联合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

活动日程及参与方式

目前正处于学生注册、沟通导师、提交项目申请环节。

开源之夏 2023 | 欢迎报名Rust相关项目_Rust_02