青云在中国 Linux 内核开发者大会上讲了什么?

百家 作者:QingCloud 2017-10-25 12:32:26

中国 Linux 内核开发者大会,已经开了十二年了,向来都是以干货十足著称,这里的干货指的是涉及到计算机操作系统底层的技术,如虚拟化、云计算、容器、文件系统、实时 OS、程序调度、内存管理、网络延迟、Dump、Trace 等等,哪怕你是算法高手、应用专家、资深业务咨询,都会得以不同收获。


嗯,不妨看看今年的议程:



对于中国 Linux 内核大会本身,就不做过多的描述了,如果有兴趣,可以参考其往届会议(http://www.ckernel.org/index.html#old)。总而言之,是国内顶级的关于 Linux 内核交流的技术会议,“干货”十足。


没有错,今天要谈的就是其中在 10 月 21 号下午,由青云QingCloud 内核工程师 Neil Sun 孙锋所分享的 Topic:


QEMU 后端块设备驱动开发


乍看之下,QEMU 的驱动开发,似乎和大会的主题有所偏离,其实不然,要知道 QEMU 本身就是一个模拟器,几乎无所不能,QEMU 是一套由法布里斯·贝拉(Fabrice Bellard)所编写的以 GPL 许可证分发源码的模拟处理器,在 GNU/Linux 平台上使用广泛。Bochs,PearPC 等与其类似,但不具备其许多特性,比如高速度及跨平台的特性,经由 KVM(早期为 kqemu 加速器,现在 kqemu 已被 KVM 取代)这个开源的加速器,QEMU 能模拟至接近真实电脑的速度。


据孙锋介绍,QEMU 的驱动开发和 Linux 内核驱动开发其实是蛮相似的。QEMU 是对底层硬件架构的模拟实现,有着非常广泛的用途,如云计算中的虚拟化、智能手机操作系统 Android 模拟开发环境等均是基于 QEMU 之上的。

背景


说起为何要去开发 QEMU 的后端驱动,还得从青云 QingCloud 的 NeonSan (https://www.qingcloud.com/enterprise讲起,NeonSAN 是由软件定义存储技术实现的新一代分布式超大容量块存储系统(Server SAN),而既然是存储系统,对于云平台来说,就需要给云主机使用。青云QingCloud的 IaaS 平台使用的是 KVM Linux 内核虚拟化技术,而 QEMU 借助 VirtIO 技术模拟出 PCI 总线上的块设备供虚拟机使用,可以最大限度的提高 IO 性能,下图是其运行的工作原理:


所以,要让 NeonSan 能够搭配基于 KVM 的虚拟化技术,就需要为 QEMU 撰写块设备驱动。


写于开始编写之前


QEMU 后端存储支持多种类型:本地文件、本地块设备、网络协议如 nbd、glusterfs 等。 QEMU 针对后端存储的操作提供了多个操作工具:qemu-image 可以进行创建、转换、扩容、快照等镜像操作,qemu-nbd 可以将后端设备直接挂接为本地设备使用,通过 qemu-system-* 可以仿真启动不同物理架构的虚拟机,以及针对开发者和测试者使用的 IO 路径执行工具 qemu-io. 所谓工欲善其事,必先利其器,在开发之前,一定要熟悉这些工具的适用场景以及操作。

正式编写 QEMU 后端设备驱动


编写后端设备驱动,你需要了解块设备开发的两个核心结构体: BlockDriver 和 BlockDriverState,它们分别记录了驱动的详细信息和块设备实例信息。对于块设备,还需要了解块的大小定义等,如物理块大小,逻辑块大小,这些对于块设备的使用场景及性能都有着举足轻重的作用,如块设备不支持逻辑块 512 字节,那么客户的 Linux 操作系统将无法启动。在完全了解上述信息后,按照 QEMU 规范实现完成所列举的基本接口函数,块设备驱动也即开发完成了。是不是非常简单。


验证并测试


作为一名 Linux 底层系统工程师,必须具备工匠精神,写完驱动仅仅是完成了任务的一半而已,另外一半,就是不要出错,确保功能是完整的、可用的、安全的。那么就需要一系列的工具来进行验证。QEMU 在这部分也作了很完善的支持,如 qemu-iotests、blkverify、blkdebug等。


那么在 QEMU 之外,还要在 Guest 虚拟机中进行多项测试内容,如:


  1. 使用 LTP 的 IO 及 Filesystem 相关的子项进行 IO 功能的完整性测试。

  1. 使用 fio 的 verify 功能验证 IO 操作的一致性。

  1. 使用 fio 来测试 IO 最优性能及延迟。

  1. 使用 iostatdstatblktrace 等工具测试常规使用性能。

除此之外,还可以使用 Perf + FrameGraph 组合,生成酷炫的火焰报告图来分析驱动中各函数的调用耗费时间比例,从而优化调用性能。


最后,为了方便生产环境的运维及后期的性能调试,还可以开发“QMP”、“HMP”相关接口,实现对调试信息的控制以及调试信息的获取。


好了,到这里基本上就结束了 QEMU 后端块存储驱动开发的全部过程了。当然这是几个月以来孙锋以及青云QingCloud 内核团队的共同努力的结果。从准备、到分析、到编写、再到实际验证,这是一整套严谨的过程,一个具备工匠精神的工程师的日常操守。


青云QingCloud 内核小组

先来介绍下,此次分享的演讲者:孙锋,在加入青云QingCloud之前,曾是三星通信研究院的内核研发工程师,负责对三星 Android 移动端设备 Linux 内核稳定性的维护。在加入青云之后,除日常维护青云QingCloud 云平台 Linux 内核,保证云物理机的稳定运行,还会对诸如虚拟化、分布式存储、SDS 等进行研发支撑。



青云QingCloud 的后台采用较新的 Linux 内核,所以有可能会遇到其它人还没有遇到过的 Bug,踩别人没有踩过的坑,所以这里是让那些对系统底层原理感兴趣的同学的最佳实践之地,当然,也是青云QingCloud 底层稳定性的看护人。而解决的问题,都会反馈到上游社区,参与到全球的 Kernel 开发当中,成为卓越工程师的典范 —— Linux 内核开发者。


另外,青云QingCloud 也会维护一些常见 Linux 的发行版的镜像制作,如 Debian、CentOS 等,虽然这些发行版是由不同的巨头 IT 厂商提供的,但客户在使用过程中出现了内核问题,会第一时间从工单系统找到内核小组,因此帮助用户解决内核问题也是内核小组的工作。


一句话,内核小组就是研发的基石,最底层的技术支撑。正如孙锋所说:“还在犹豫什么?加入我们吧。”


写在最后


青云QingCloud 深刻理解开源对于云计算和现在、未来 IT 技术的影响,所以在未来会不遗余力的在关键技术领域为开源作出贡献,如 Linux 内核、虚拟化、SDN、容器和容器编排技术、以及 IoT、人工智能等关键社区。


参与开源,本身就是对自己技术能力最好的体现和嘉奖。此次为中国 Linux 内核大会贡献一份分享,算是牛刀小试。请期待我们更加精彩的表现,更多技术干货的分享。


- FIN -


关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接