OpenCloudOS内核开发指南
本文档目的:
- 保证内核代码开发和回合符合社区License要求。
- 保证Coding style 和代码质量达到内核Upstream Linus 库的质量要求。
- OC KERNEL 作为行业伙伴的上游内核, 将提供给下游伙伴一个代码稳定的(forward-only)内核树, 并且提供下游伙伴特性选择灵活性。
1-分支策略
分支名和使用流程
- master 代码组成: LTS + upstream backport features + SIG opensource features + bugfix。
- 各特性基于 master 形成各个独立分支,在达到特性合入要求和测试后合入merge master。
- master 分支会合入到腾讯内部代码树, 在其中充分测试验证后,特性合入lts/xx 稳定分支,开放给下游用户使用。
- OC 内核的稳定分支在 lts/ 目录下, 仅接受不影响kabi稳定的bugfix。
- master 和 稳定分支forward-only, 不得force push。
2-内核默认配置
make occonfig
提供内核默认配置。
make noocconfig
则在当前配置中删除OC特有的配置项,作为OC内核的一个build 测试用例。
3-内核特性开发要求
为了在不增加开发同学的负担的同时更好的全流程跟踪(自研)内核特性研发,要求加入OC kernel的内核特性必须符合以下要求:
- 清楚描述特性要解决的问题;
- 解决该问题使用的设计方案;
- 特性的使用方法和实际效果;
- 该特性必须提供CONFIG_ 模式的编译开关;
- 独有特性新加入的内核配置以CONFIG_OC_ 开始;
- 提供cmdline 开关or sysctl runtime 开关 or 以模块方式提供代码 (可选)
- 特性需要在PR,和commit log中,明确提供特性对内核的KAPI 和 KABI的修改;
- 特性通过了那些功能和性能测试。指定的测试要求见下文。 提交团队必须对提交代码的功能,性能和BUG负责。代码必须经过评审
- 特性提交负责人要
signed-off
, 并且需要加签评审者Reviewed-by:
orAcked-by:
- 如果有测试则请加签测试结果, 例如:
Tested-by: Desheng <deshengwu@Tencent 腾讯>
4-Commit 规范要求
- 遵循upstream/LTS commit 规范, 例如 commit log 必须有
Signed-off-by
, 尽量通过scripts/check_patch.pl 检查。 - 自研特性提交时commit log,要求包含
Reviewed-by
orAcked-by
。 - 回合其他代码树的特性时,需要作为独立分支,并且:
- 保持原upstream commit 数量和次序
- 保留原commit author
- 打上回合者的
Signed-off-by
: (建议使用git cherry-pick -s
) - 回合conflict的解决办法要注明在commit log:
Conflicts:<refactored some_function_foo ... >
- 在commit log 第一行标明其他代码树的commit ID,例如
or
commit 7548bf8c17d84607c106bd45d81834afd95a2edb upstream/openvz/openeuler
Upstream commit 8ebcc62c738f68688ee7c6fec2efe5bc6d3d7e60
5-Tag/版本 规范
目前在用TAG:
- 4.14.105-19-0015
- 5.4.119-19-0009.1
6-特性测试要求
每个新的内核特性合入时要求通过以下测试, 并提供测试报告:
1. 每个commit的 checkpatch.pl检查和各config 编译:
- 新加入的内核config, 要在 kernel/configs/nooc.config 文件中关闭并编译通过;
- OC Kernel 作为上游内核代码,下游用户会有不同的,任意的config使用要求,在ARM 和X86中,除了默认的
default
,noocconfig
,occonfig
必须build通过外, 还必须编译通过代码树中默认的defconfig
,allyesconfig
,allmodconfig
。 -
最小要求是不能增加build error/warning. 一个自测方法如下:
make allmodconfig modules all -s ; make allyesconfig noocconfig all -s
-
各config下内核基准测试自测建议如下:
make occonfig kvmconfig bzImage -s -j 32 && qemu -kernel arch/x86/boot/bzImage --nographic -m 4g -smp 4 --enable-kvm ...
-
提供特性的测试用例,例如kunit/kselftest 或者其他用例
- 通过基本内核测试
a. ltp 相关部分测试不增加failure。
b. stress-ng 测试–如果可以覆盖到。 - 执行测试时的gcov or kcov 代码覆盖率 > 90%。
(gcov的数据收集方法 在Linux内核里使用gcov做代码覆盖率检查 )
撰写人:alexsshi 2023-02-17
参考: