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.