Open Source Summer 2023 | Bem-vindo ao se inscrever em projetos relacionados ao Rust_linux

Summer of Open Source é uma série de atividades de verão iniciadas pelo Instituto de Software, Academia Chinesa de Ciências e openEuler, que visa incentivar os alunos a participar ativamente do desenvolvimento e manutenção de software de código aberto e promover o desenvolvimento vigoroso de excelentes comunidades de software fonte. O evento reúne as principais comunidades de código aberto para fornecer projetos para o desenvolvimento e manutenção de importantes softwares de código aberto e inscrições abertas para estudantes universitários de todo o mundo.

A comunidade openEuler tem atualmente 94 projetos online! Todos os estudantes universitários podem se inscrever de acordo com a direção em que estão interessados ​​ou são bons

Hoje trarei uma introdução às tarefas na área de tecnologia Rust. A comunidade openEuler lançou um total de 10 projetos na área de tecnologia Rust. As tarefas são moderadamente difíceis. Todos são bem-vindos a participar dos projetos. Forneceremos recursos de aprendizagem ricos e orientação técnica.

Projeto 1: Usando Rust for openEuler para implementar um dispositivo de teste de simulação que suporte o protocolo CXL.mem

Descrição do Projeto:

O CXL é um barramento de servidor de alto desempenho de última geração que suporta coerência de cache entre a CPU e os periféricos e melhora muito o desempenho da interação de dados entre a CPU e os periféricos. No entanto, ainda existem poucos dispositivos de hardware em conformidade com a especificação CXL e é necessário fornecer um ambiente de teste de simulação CXL para facilitar o desenvolvimento e a depuração de drivers e aplicativos relacionados à camada superior.

Este projeto requer o uso de Rust for Linux baseado em openEuler para realizar a simulação de função de dispositivos type3 que suportam o protocolo CXL.mem, que é usado para depurar o driver do protocolo CXL ou desenvolver aplicativos de camada superior.

Padrão de saída:

1. Use Rust for Linux para implementar as funções do dispositivo do protocolo CXL.mem
2. Faça a avaliação de desempenho do dispositivo de simulação CXL.mem.

requisito de habilidades:

1. Familiarizado com Rust for Linux
2. Familiarizado com o protocolo CXL.mem.

Mentor do Projeto:

Página inicial do projeto:

https://gitee.com/openeuler/open-source-summer/issues/I6YQ1X?from=project-issue

Projeto 2: Realizar as principais funções do Processo No. 1 baseado em tokio

Descrição do Projeto:

O processo nº 1 é o primeiro processo iniciado no modo de usuário e é responsável por puxar outros processos no modo de usuário durante a fase de inicialização. O systemd é atualmente o processo número 1 amplamente utilizado por vários distribuidores. Seus recursos, como resolução de dependências e inicialização paralela, aceleram o processo de inicialização do Linux. Mas agora o systemd gradualmente se tornou muito grande, fornecendo um grande número de módulos e recursos redundantes, o que o torna não confiável o suficiente.

Portanto, esperamos implementar uma versão simplificada do systemd baseada em ferrugem e um systemd altamente confiável e de alto desempenho baseado no IO assíncrono de tokio.

Padrão de saída:

Implemente as principais funções do systemd com base em tokio baseado em ferrugem ou outras estruturas assíncronas. Critério de eleição:

1. Perceba os principais recursos de análise de dependência do systemd, incluindo pelo menos: Requer, Deseja, Depois, Antes, Conflitos

2. Realize a capacidade de inicialização paralela, suporte à ativação do soquete de serviço e monitoramento do ponto de montagem

3. Ser capaz de acessar o serviço sshd no ambiente do contêiner e conectar-se normalmente com o ssh

requisito de habilidades:

1. Familiarizado com o desenvolvimento da linguagem rust, estruturas assíncronas como tokio

2. Familiarizado com o desenvolvimento do soquete de domínio unix

3. Familiarizado com os módulos principais, como unidade, soquete e serviço do systemd e o processo de inicialização do linux

Mentor do Projeto:

Página inicial do projeto:

https://gitee.com/openeuler/open-source-summer/issues/I6XN37?from=project-issue

Projeto 3: Ambiente de teste de simulação Transplant CXL para openEuler

Descrição do Projeto:

O CXL é um barramento de servidor de alto desempenho de última geração que suporta coerência de cache entre a CPU e os periféricos e melhora muito o desempenho da interação de dados entre a CPU e os periféricos. No entanto, ainda existem poucos dispositivos de hardware em conformidade com a especificação CXL e é necessário fornecer um ambiente de teste de simulação CXL para facilitar o desenvolvimento e a depuração de drivers e aplicativos relacionados à camada superior.

Atualmente, a comunidade do kernel Linux e a comunidade QEMU fornecem um ambiente de teste de simulação CXL baseado em QEMU, mas não foi transplantado e o desempenho testado no sistema operacional openEuler. Este projeto requer o transplante do ambiente de teste de simulação CXL para o sistema operacional openEuler e uma avaliação de desempenho.

Padrão de saída:

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

Cronograma de Eventos e Participação

Atualmente em processo de inscrição de alunos, comunicação com tutores e submissão de candidaturas de projetos.

Open Source Summer 2023 | Bem-vindo à inscrição para projetos relacionados ao Rust_Rust_02