这篇文章是《第9章 参与KVM开源社区》的完整内容,旨在介绍KVM相关的开源社区、代码结构,并指导读者如何参与到社区中贡献代码或提交问题。
核心内容总结如下:
1. 开源社区介绍
- Linux内核社区:KVM作为Linux内核的一个模块,其开发流程遵循内核社区模式。代码通过维护者层级审核,最终由Linus Torvalds合并到主干。
- KVM社区:专注于内核中的KVM模块。代码维护主要由Red Hat的Gleb Natapov和Paolo Bonzini负责,并通过年度KVM Forum会议进行交流。
- QEMU社区:提供设备模拟,是KVM最常用的用户态工具。自QEMU 1.3.0起,所有KVM相关代码已合并到QEMU主干,无需使用专门的qemu-kvm。
- 其他社区:简要列举了Libvirt、OpenStack、Xen、Ubuntu等与虚拟化或开源系统相关的知名社区。
2. 代码结构简介
- KVM代码:位于Linux内核中,分为三部分:架构无关的核心代码(
virt/kvm/)。
架构相关代码(如arch/x86/kvm/)。
相关头文件。 - QEMU代码:配合KVM使用时,通过
/dev/kvm设备调用KVM内核模块的API(如创建虚拟机、vCPU等)来协同工作。 - 测试代码:介绍了用于底层特性测试的KVM单元测试和功能更强大的KVM Autotest集成测试框架。
3. 向开源社区贡献代码
- 交流方式:核心是通过邮件列表(KVM:
kvm@vger.kernel.org;QEMU:qemu-devel@nongnu.org)进行讨论。 - 代码风格:必须严格遵守。KVM内核代码遵循Linux内核代码规范;QEMU代码有其独立的规范(如4空格缩进)。两者在括号使用、命名约定等方面有差异。
- 生成与检查Patch:使用
diff或git format-patch命令生成补丁。
提交前必须用项目自带的检查脚本(如checkpatch.pl)检查代码风格,确保无错误。 - 提交Patch:通过邮件列表发送,邮件需使用纯文本格式、英文书写。
补丁内容应直接贴在邮件正文,并包含清晰的描述和Signed-off-by签名。
主题应注明[PATCH],若为系列补丁需标明序号。
4. 提交KVM相关的Bug
- 通过邮件列表:描述Bug时需提供详细的测试环境、现象、日志和可重现的步骤,以便他人快速定位问题。
- 使用Bug跟踪系统:KVM使用Bugzilla (
bugzilla.kernel.org),QEMU使用Launchpad (bugs.launchpad.net/qemu)。 - 定位Bug:介绍了使用Git的
git bisect命令,通过二分法快速定位引入Bug的具体代码提交。
5. 本章小结
本章系统介绍了KVM开源社区生态,旨在引导和鼓励读者参与社区,无论是贡献代码、提交问题还是学习交流,都能从中受益并对开源软件发展产生积极影响。
请注意:文章内容基于2013年的语境,部分信息(如软件版本、维护者名单、网址等)可能已发生变化。
