开源之夏 | 欢迎申请openEuler Kernel SIG开发任务,众多方向任你挑选!
开源之夏是中国科学院软件研究所联合openEuler发起的开源软件供应链点亮计划系列暑期活动,旨在鼓励在校学生积极参与开源软件的开发维护,促进优秀开源软件社区的蓬勃发展。活动联合各大开源社区,针对重要开源软件的开发与维护提供项目,并向全球高校学生开放报名。
openEuler社区目前已上线94个项目!欢迎各大学子按照自己感兴趣或擅长的方向进行申请,扫码可查看全部项目。
今天给大家带来内核方向的任务介绍,内核在Linux系统里的重要性不用多说,openEuler Kernel SIG 本次发布了16个内核方向的项目任务,涵盖内存、架构、公平调度等多个模块。
Kernel SIG的项目任务覆盖面广,难易程度适中。欢迎大家参与到Kernel SIG的项目中,我们将为大家提供丰富的学习资源和技术指导,深入浅出地带你探索内核技术领域 。你的技术能力将得到快速提升,成长为极具竞争力的内核领域技术人才。
项目1:利用eBPF实现自定义pagefault处理
项目描述:
userfaultfd目前实现了将pagefault上报到用户态处理,但是处理策略有限,而且整个流程有多次系统调用性能开销较大。期望通过eBPF代替userfaultfd实现自定义pagefault处理。
产出标准:
1、代码合入openeuler
2、测试虚拟机热迁移场景,对比原生userfaultfd的性能差异
技术要求:
1、熟练使用eBPF编程
2、熟悉Linux内存管理
项目导师:
zhangpeng362@huawei.com
项目主页:
https://summer-ospp.ac.cn/org/prodetail/23b970595?lang=zh&list=pro
项目2:基于openEuler kernel开发一款能统计所有流经netfilter hook IP的内核ko
项目描述:
方便开发维护人员感知报文流向
产出标准:
1、一个内核ko,注册netfilter 记录报文
2、一个命令行工具,查看各个hook点的报文
技术要求:
1、c语言
2、Linux kernel
项目导师:
71639600@qq.com
项目主页:
https://summer-ospp.ac.cn/org/prodetail/23b970590?lang=zh&list=pro
项目3:利用eBPF实现内存回收灵活控制
项目描述:
不同的业务进程可能有不同的内存冷热特征、不同的内存使用策略,而当前linux内核中内存回收基于的LRU管理策略是统一的,缺少针对不同应用的灵活性,期望通过eBPF实现内存回收灵活控制
产出标准:
1.支持进程、cgroup粒度的LRU策略控制、调整LRU链表
2.支持文件页、匿名页的回收比例控制或者独立回收控制
3.支持针对进程或者容器的定制化LRU链表
技术要求:
1、熟练使用eBPF开发
2、熟悉Linux内存管理机制
项目导师:
sunnanyong@huawei.com
项目主页:
https://summer-ospp.ac.cn/org/prodetail/23b970587?lang=zh&list=pro
项目4:扩展Trace event filter功能,增加根据函数调用栈过滤功能
项目描述:
trace事件是内核经常使用的维测功能。对于基础的内核接口,可能存在很多的调用路径。按照常规的方式使用Trace event会输出全部的维测信息。而我们可能只关注其中的特定路径。
产出标准:
扩展trace event的filter功能,实现支持根据函数调用栈进行过滤。
技术要求:
熟悉Linux内核开发
项目导师:
chenjun102@huawei.com
项目主页:
https://summer-ospp.ac.cn/org/prodetail/23b970583?lang=zh&list=pro
项目5:arm64 ftrace: 为注册ftrace的函数增加独立的跳板优化arm64 ftrace机制的性能
项目描述:
arm64 ftrace性能优化,当前arm64注册ftrace使用ftrace_ops_list_func扫描注册好的ftrace ops链表,该实现方式会影响ftrace性能,因此请你为注册ftrace的函数增加独立的跳板跳转到ftrace ops,主要涉及的工作如下:函数注册ftrace ops(包含回调地址)时,帮助被注册函数(通常使用ftrace_(regs_)caller当作跳板)直接跳转到注册的回调地址,而不是通过扫描多个ftrace ops链接的ftrace_list_ops来最终找到注册的ftrace ops。
产出标准:
代码合入openeuler;设计测试用例测试出收益并输出测试。
技术要求:
linux内核开发技术栈
项目导师:
bobo.shaobowang@huawei.com
项目主页:
https://summer-ospp.ac.cn/org/prodetail/23b970574?lang=zh&list=pro
项目6:Outbox驱动打入内核用以支持系统安装
项目描述:
随着存储、网络等硬件的发展,很多新的硬件具备很多新的能力,但是openEuler老的lts的内核版本并不支持此类硬件,导致系统无法安装,或者无法使用新的能力。需要在系统安装前或者安装过程中将outbox驱动添加到标准镜像中用于支持这类场景。
产出标准:
出工具打包成rpm,提供命令改造标准镜像能够支持安装过程中使用outbox驱动
技术要求:
不限,推荐使用脚本类语言
项目导师:
zhangrui182@huawei.com
项目主页:
https://summer-ospp.ac.cn/org/prodetail/23b970569?lang=zh&list=pro
项目7:基于机密计算实现密钥管理系统
项目描述:
当前密钥管理主要是KMS和HSM两种方案。然而这两种方案都有一些缺点:KMS有安全性问题、依赖互联网等缺点,HSM有成本高、密钥管理能力有限等缺点。
机密计算是基于硬件可信执行环境的安全保护技术,能够在保证数据安全的同时使用数据进行计算。因此我们可以基于机密计算实现一个密钥管理系统。该系统实现成本低,且不仅可以为系统上的应用提供密钥管理,也可以通过网络服务对外提供密钥管理服务。
**解决方案: **
使用secGear框架,基于机密计算的能力,实现一个密钥管理系统。
产出标准:
基于机密计算实现一个密钥管理系统
技术要求:
了解机密计算技术、熟悉常用加密算法的使用、熟悉C、Cmake
项目导师:
wangcheng156@huawei.com
项目主页:
https://summer-ospp.ac.cn/org/prodetail/23b970551?lang=zh&list=pro
项目8:内存盘支持io统计功能
项目描述:
io统计是内核在处理io过程中记录的额外信息,通过接口 /proc/diskstats 或者 /sys/block/[device]/stat 暴露给用户,用户可以通过iostat等工具查看设备的io信息,例如:读写带宽,iops,磁盘利用率等等。当前内核驱动中内存盘没有实现该功能,用户在使用内存盘时将无法获取io信息。
产出标准:
1、内核补丁,用于支持内存盘的io统计功能,需要做成模块参数,可以控制是否使能;
2、测试报告,1)用于验证内存盘的io统计功能;2)高io压力下测试场景下使能和不使能io统计功能时,对性能的影响。
技术要求:
1、首先内核开发基础
● 内核编译,内核替换(虚拟机或者物理机都可以)
2、其次在用户态,需要掌握
● 内存盘的使用,如何创建与删除内存盘(内核模块的插入与卸载,modprobe, rmmod)
● 使用fio, dd等工具或者自己写一个c程序,对磁盘进行读写
● 使用iostat观测内存盘的io情况
这两部分网上都有比较详细的资料,可以自行搜索。
3、最后在内核态,需要通过阅读内核代码,做到
● 了解内核io栈和驱动层的实现,其中驱动层有基于rq的模式和基于bio的模式,内存盘是基于bio的模式(代码位置 drivers/block/brd.c)系统调用入口:vfs_read(), vfs_write()等
○ 通用块层入口:submit_bio()
○驱动入口:block_device_operations 中的钩子 submit_bio,内存盘为 brd_submit_bio
●内核io统计的实现,核心代码在include/linux/part_stat.h,
○bio模式的驱动,涉及的接口有 bio_start_io_acct 和 bio_end_io_acct
项目导师:
yukuai3@huawei.com
项目主页:
https://summer-ospp.ac.cn/org/prodetail/23b970550?lang=zh&list=pro
项目9:在 ARM64 上实现基于 PAC 的数据流完整性(DFI)
项目描述:
基于 ARMv8.3 新引入的 PAC 特性,可以实现对控制流完整性(CFI)和数据流完整性(DFI)的保证。当前已知 macOS 上两者都有实现,而 Linux 内核仅实现了基于 PAC 的 CFI。本项目旨在设计一套基于 PAC 特性对 Linux 内核中的关键数据结构实施 DFI 的方案,并予以实现。
产出标准:
1、基于 PAC 的 DFI 方案设计文档,包括防护原理,目标数据结构等内容;
2、上述方案的代码实现以及测试报告,测试覆盖:防护效果、性能影响、内存底噪、镜像大小影响;
3、 补丁最终合入 openEuler 内核。
技术要求:
1、熟悉 C 语言和 Linux 内核开发;
2、熟悉 ARM64 汇编及 Linux 内核上的汇编语言编程方法;
3、 熟悉编译原理及 GCC 编译器插件的开发;
项目导师:
gongruiqi1@huawei.com
项目主页:
https://summer-ospp.ac.cn/org/prodetail/23b970544?lang=zh&list=pro
项目10:IOVA管理优化
项目描述:
IOMMU模块中的IOVA管理采用的是论文USENIX 2001 paper "Magazines and Vmem: Extending the Slab Allocator to Many CPUs and Arbitrary Resources"机制,但是长期运行时后,会由于存在大量缓存的IOVA而导致查找和分配新的IOVA性能下降,需要设计一个良好的平衡机制。
产出标准:
1、在适当的时机释放一些空闲的IOVA,避免红黑树过于庞大,但不影响正常申请释放IOVA的性能
2、避免跨NUMA结点访问,magazine和iova本地化;
3、减少共享magazine和红黑树操作的锁冲突
4、基于openEuler 5.10内核开发
技术要求:
1、熟悉Linux内核开发
2、熟悉IOMMU
3、熟悉iperf和fio测试
项目导师:
thunder.leizhen@huawei.com
项目主页:
https://summer-ospp.ac.cn/org/prodetail/23b970543?lang=zh&list=pro
项目11:实现arm32上的bpf trampoline和direct call
项目描述:
bpf tramploline是bpf的核心机制之一,将native calling convention转换为bpf calling convention,direct call则允许从普通内核函数入口直接跳转到用户自定义的handler上,两者结合可以用来实现将bpf prog作为tracing handler直接attach到内核函数或者另一个bpf prog入口上,实现高性能的trace功能,bpf trampoline也可以单独和bpf prog配合实现用bpf prog作为普通的回调函数来使用.
产出标准:
1、实现arm32上的bpf trampoline,跑通内核仓下的fexit_bpf2bpf、xdp_bpf2bpf、bpf_tcp_ca、dummy_st_ops用例;
2、实现arm32上的direct call,跑通内核仓下的fentry_test、fexit_test、fentry_fexit、modify_return、get_func_args_test、get_func_ip_test用例.
技术要求:
1、C语言
2、arm32汇编
项目导师:
xukuohai@huawei.com
项目主页:
https://summer-ospp.ac.cn/org/prodetail/23b970540?lang=zh&list=pro
项目12:优化arm32启动流程
项目描述:
arm32启动过程中,内核支持地址随机化,当前这块实现需要遍历所有的物理内存,并逐个比较是否存在内存冲突,存在比较多的冗余操作,优化arm32随机化实现,缩短启动时间。
产出标准:
1、优化arm32随机化实现
2、完成对arm32启动性能的测试,提供测试数据报告
3、基于openEuler 5.10内核开发
技术要求:
1、熟悉Linux内核开发
2、熟悉ARM架构启动流程
3、熟悉基于QEMU的内核调试流程
项目导师:
cuigaosheng1@huawei.com
项目主页:
https://summer-ospp.ac.cn/org/prodetail/23b970532?lang=zh&list=pro
项目13:arm64支持objtool以及ORC推栈
项目描述:
objtool是x86上实现的二进制文件分析工具,其主要功能用于支持x86上的可靠推栈方案:通过编译时生成ORC推栈元数据,可以在内核运行时实现可靠推栈。
由于可靠推栈是内核热补丁功能的必要条件,arm64目前只支持FP推栈,将objtool以及ORC推栈移植到arm64是有价值的。
1. 对此,主要涉及的工作如下:适配objtool工具到arm64(部分已完成)
2. 在arm64上实现ORC unwinder
3. 进行ORC unwinder的功能测试
此功能的实现涉及内核推栈机制、二进制指令分析、arm64体系架构等内容,范围较广,具有一定挑战性。
产出标准:
1. openEuler 合入实现 arm64 ORC unwinder 的PR
2. 功能测试的测试设计,测试用例与测试报告
技术要求:
linux内核开发技术栈
项目导师:
chenzhongjin@huawei.com
项目主页:
https://summer-ospp.ac.cn/org/prodetail/23b970530?lang=zh&list=pro
项目14: 零页内存池
项目描述:
对于应用申请内存时,为了防止内存信息泄漏,经常需要对内存进行清零操作,如果清零时间占比很大,可能导致应用性能波动或者下降,实现一套零页内存池方案,在需要零页时,从零页内存池获取内存,取代现有从伙伴系统获取内存和清零操作。
产出标准:
1、提供内存零页池框架,支持小页、THP大页内存池,动态扩展和缩容内存池容量;
2、为了避免锁冲突,考虑实现per-cpu的零页缓存;
3、为了避免numa时延影响,考虑实现按照numa粒度内存池
4、基于openEuler 5.10内核开发
技术要求:
1、熟悉Linux内核开发
2、熟悉内存管理机制
项目导师:
wangkefeng8778@163.com
项目主页:
https://summer-ospp.ac.cn/org/prodetail/23b970473?lang=zh&list=pro
项目15:eBPF软件应用市场
项目描述:
目前在容器、软件加速及维测上,社区开发了很多相应eBPF程序,而对于这些eBPF程序缺乏统一的分发方式。cilium等独立组件都有自己的管理方式,bcc等工具集也有自己的打包方式,openEuler内核开发的一些eBPF插件在内核仓进行发布。但是这些eBPF程序的升级及增加新的功能都依赖于整体软件的发布,存在升级周期长等问题。另外eBPF程序开发难度需要了解内核eBPF程序框架,相对来所开发难度较高。本任务希望能借鉴docker hub的管理模式,提供openEuler内核eBPF开发模板,及相应的编译分发的工具,解决eBPF软件打包分发难题。
产出标准:
1、构建openEuler应用市场基础设施,提供类似于docker hub的eBPF程序管理模式
2、 提供openEuler eBPF软件编写模板,简化编译和打包及分发流程。
技术要求:
1、熟练使用eBPF编程
2、熟悉Linux内存管理
项目导师:
weiyongjun1@huawei.com
项目主页:
https://summer-ospp.ac.cn/org/prodetail/23b970467?lang=zh&list=pro
项目16:内核公平调度任务(CFS)被高优先级任务(如RT任务)抢占后饿死场景监控
项目描述:
在实时调度与公平调度并存的产品业务场景,公平调度(CFS)任务可能会因为实时调度任务长时间占用CPU而得不到及时的调度,会导致正常用户业务将受到影响、且串口无法进行调测定位。本特性通过监测CFS进程的调度情况,当发现CFS进程调度饿死时,及时输出相关的调测信息,协助定位问题原因。
产出标准:
1、输出合理的设计文档。
2、编码符合clean code 规范,模块独立,无侵入式修改。
3、模块功能满足项目要求,能对CFS进程被RT进程长时间抢占后的饿死情况进行检测监控,可以设置检测阈值,以及需要被检测的CPU。
4、 模块运行资源消耗低,CPU占用率不高于1%
技术要求:
1、熟悉linux 内核编程框架,基于openEuler 内核进行开发。
2、熟练掌握C语言。
3、对linux调度子系统有一定的掌握,熟悉内核通用的进程异常检测机制。
项目导师:
314264452@qq.com
项目主页:
https://summer-ospp.ac.cn/org/prodetail/23b970403?lang=zh&list=pro
活动日程及参与方式
目前正处于学生注册、沟通导师、提交项目申请环节。
各位学生如果对上述项目感兴趣,欢迎扫码加入交流2群。
若群已满可添加openEuler小助手微信"openeuler123"进入【开源之夏|openEuler交流群】,请备注【开源之夏】~