delphij's Chaos

选择chaos这个词是因为~~实在很难找到一个更合适的词来形容这儿了……

24 Jan 2004

FreeBSD committer 徐逸锋先生访谈


FreeBSDChina社区最近采访了徐逸锋(David XU),一位来自中国大陆的FreeBSD src committer。徐逸锋先生在FreeBSD KSE项目中做出了相当多的贡献,在这次访谈中,他谈到了关于自己参加FreeBSD开发的一些经历、KSE、SMPng以及关于FreeBSD的一些其他事情。我们非常感谢徐先生接受我们的采访,也希望这次访谈能够帮助大家进一步了解FreeBSD。

李鑫(以下简称「李」):可否请简要介绍一下关于您的一些基本情况?
徐逸锋(以下简称「徐」):我是浙江绍兴人,现年35岁,大学毕业后工作过好几个地方,现住在杭州,已婚。

李:是什么促使您参与到FreeBSD的开发中的呢?
徐:我在成为FreeBSD src committer以前,一直在使用FreeBSD, 并且对FreeBSD的POSIX thread(PThread)支持不满意,一直希望有一个性能更好的PThread支持,在2002年,我有幸与Julian Elischer在将FreeBSD内核线程化上做了大量的交流工作,Julian Elischer非常友好地帮助我成为src committer.

李:您是在2002年9月成为FreeBSD src committer的,此后,您在FreeBSD Project中的主要工作几乎都与KSE有关。除了KSE之外,您还对那些技术比较感兴趣呢?
徐:我目前全部工作集中在KSE项目上,主要是因为这个项目还没有完成,复杂度比原来设想的要大,而且Julian Elischer由于家庭原因,化在这个项目上的时间减少,现在主要是Daniel Eischen和我在做这个项目,我想这个项目完成后,也需要休息一段时间。可能与我工作性质有关,我将会对FreeBSD支持嵌入式系统感兴趣。

李:可能也是困扰许多开放源代码软件开发的问题,您开发 FreeBSD 的时间从哪里来? 您所在的公司对您参加FreeBSD的开发是否支持? 您是如何解决生存问题的?
徐:我白天上班也没有什么时间,可以自由支配的时间集中在晚上和星期天。公司并不知道我是FreeBSD的一员,我所从事的FreeBSD上的开发是出于爱好,与实际工作无关,但是我会用FreeBSD做项目小组中的CVS/WEB/FILE服务器。目前公司给我的工资可让我生存。

李:在国外的(特别是从事驱动程序的那些) FreeBSD 开发者,经常能够得到一些来自硬件厂商的硬件捐赠,您对这些捐赠的看法如何?您是否需要类似的捐赠?
徐:捐赠是必要的,因为开发者不可能拥有不同的平台和各种硬件,个人去买各种各样的硬件来搞开发也是不太现实的,捐赠有利于一些硬件尽早更好地被FreeBSD支持。我当初为了完成KSE的SMP测试,确实希望得到装有SMP的机器,国外也有人想捐赠,但是后来都因为运费太贵而放弃,后来自己买了个双P3的主板解决。一个心愿是将来拥有一台Athlon 64的机器做64位开发。:-)

李:除了调度器和线程库 (libthr & libkse) 之外,KSE还涉及到系统的哪些部分? 相对Jason Evans的《Kernel-Scheduled Entities for FreeBSD》而言,现在的KSE有什么概念上的重大变化吗?
徐:KSE基本上是属于调度器这一层的,与其他的部分无关,目前的KSE项目基本上准守了Jason Evans当时的想法,当然也有一些差别,主要是对调度器在SA上的支持与当时的想法有点不同,现在对于SA的支持已经做到与调度器相对独立,而不是当时想象的那么紧密联系在一起。

李:KSE同Solaris LWP的主要区别是什么? 采用 Scheduler Activation 概念之后,内核通过向 UTS 提供更加准确的调度信息,是否需要用户修改自己的程序才能够发挥其作用? 或者,用户只需要简单地连接一个支持KSE的线程库就可以了?
徐:FreeBSD内核现在已经是线程化的,同时也有提供兼容Linux的clone进程的LWP, 但是这部分不是FreeBSD的主要部分。FreeBSD主要使用了自己的线程模型,一个进程可以拥有多个内核线程,而LWP本质上是一个退化的进程,但是终究还是进程。内核提供的Scheduler Activation的接口并不是为用户直接使用的,要直接使用它也不是易事,用户最好还是通过libkse来使用, libkse提供Pthread的调用接口,实现了libc_r的所有功能,而其性能超越libc_r,并引入了新的PThread特性, 例如libkse支持PThread的Process Scope和System Scope概念, 用户可以继续保持他的源代码不修改就可以直接连接libkse, 但是也可以考虑使用新引进的特性。

李:KSE线程库同 Linux 上的 NPTL 实现有什么显著的差异吗?如果有,这些差异对开发者或用户是否会有很大的影响?
徐:我不是十分了解NPTL,但是KSE是想要支持PThread里面的一些概念, 例如基于静态优先级的调度,SCHED_RR, SCHED_FIFO, Priority Mutex, Process scope和System scope,POSIX thread对于线程的调度要求与传统的UNIX的动态优先级调度算法是不同的, 而这些特性要加到内核里面去实现是很难做到的,KSE的开发者倾向于把这些特性在用户模式的库中加以实现, 很多功能原来libc_r里面就有的,而其他的操作系统可能不具备这种功能,我们也不想丢掉。用户在使用libkse库时,最好对PThread有充分的认识,在改变线程优先级上应当小心, 在libkse中,改变线程优先级别确实会产生一些效果,这一点也是从libc_r上继承过来的。

李:使用 ULE 调度器是否会对使用了KSE的应用程序的性能产生比较大的改善?
徐:ULE的主要优点是较好地支持SMP,自动支持CPU affinity, 也就是尽量让一个线程保持在某个CPU上执行以提高CPU Cache的命中率,由此带来系统性能提升, 这种优化对每个程序或多或少都有好处,对于那些主要化时间在CPU上的进程效果最好。如果是单个CPU的系统,效果不会比44BSD有较大的优点。

李:FreeBSD 5.3-RELEASE计划将ULE调度器和KSE线程库作为操作系统的默认配置,您认为这样做是否已经时机成熟?在此之前,您认为还需要完成一些什么样的工作?
徐:时机基本成熟,目前主要的任务是让ports系统能够顺利的连接libkse或libthr和libc_r,任由用户选择, 还有就是完成gdb对libkse的调试支持。

李:对于开发人员来说,便于使用的调试器无疑会帮助他们达到事半功倍的效果,而对于一个使用线程的程序来说更是如此。您可否推荐一些与KSE有关的调试工具或调试技巧?
徐:libkse的调试支持将会被加到gdb中,gdb已经有很好的对线程的调试支持,libkse并不需要除gdb以外的调试工具。我本人不太使用调试器,主要是不想依赖它,对我来说最有用的就是assert和printf.

李:对于运行Apache2 (worker MPM)、MySQL 4.x、PHP 4.x的服务器,您认为使用哪组KSE线程库更好?
徐:我认为目前libkse最好,以后libkse或libthr哪个更好很难说,相互都会有一些对方不具备的优点, 最终结果是我们将会有一个更好的系统。

李:NetBSD 的 Scheduler Activation 实现和 FreeBSD KSE有什么主要区别?
徐:NetBSD的Scheduler Activation基本上是基于LWP的,而KSE不是。

李:SMPng使用了大量的细锁来取代全内核范围内的Giant锁,在提高性能的同时,这也增加了代码的复杂性和验证它们正确性的难度。您认为是否有更好的办法来解决内核的MP-同步问题?
徐:我认为目前内核WITNESS死锁监测系统还是很有效的,可以监测大部分的死锁情况,目前唯一的缺陷是对传统的lockmgr锁还不支持,而这个锁用在文件系统上比较多,我同时认为支持SMP的OS的正确性是很难做到的,其中一个问题就是race condition,很难发现, 没有很好的方法来检测这种问题。

李:您认为在 5-STABLE 和 5/6 branching 之后,SMPng的架构是否还会发生重大的变化?
徐:基本框架不会改变,但是各个子系统的优化还是有可能的,例如TCP/IP的SMP化,中断处理子系统的改进等。

李:是否可以介绍一些调试SMP内核的经验?
徐:关于调试SMP内核,其实除了调度器和支持SMP的机器相关的低级代码,其他部分基本上不关心SMP,大部分程序只需关心并发性存取上的控制就可以了,使用锁并且保持数据结构不被并发存取损坏, 避免race condition, 避免死锁等等, 最有效的还是KASSERT, printf :-)

李:您从事FreeBSD开发使用的主要工具是什么?
徐:vim, gcc.

李:除了FreeBSD之外,您是否还使用其它的操作系统? 您是否也参与其它(开放源代码)操作系统的开发?
徐:我还使用Windows, Linux,都是因为工作需要。除了FreeBSD, 我没有参加其他开放源代码项目。

李:如果可能的话,您最希望 FreeBSD 的哪一部分出现「突破性的」进展?
徐:我觉OS发展到现在,技术已经很成熟,不象前几十年在OS上有重大的概念性突破。目前我觉的TCP/IP多线程化是主要的任务。

李:您可否为希望了解 FreeBSD 内核的人推荐一些参考资料? 另外,您认为在开始真正的 Kernel Hacking 之前,他们需要有哪些准备?
徐:读Marshall Kirk Mckusick的《4.4BSD 的操作系统的设计与实现》。当然如果你想对系统刨根问底的话,可以读些硬件资料:

IA32 Intel Architecture Software Developers Manual, 共三卷。
INTEL MultiProcesor Specification version 1.4 PCI Local Bus Specification 2.3 Plug and Play ISA Specification
8259 中断控制器手册

李:除了 FreeBSD 的开发之外,您平时主要做一些什么工作? 您有没有其它方面的爱好?
徐:工作上,我是IT的一员, 从事各种软件开发,从设计到编码,还负责项目组人员管理,什么活都做。平时也会去逛逛书店,到风景区玩,大部分时间会在家里和我的儿子玩。

李:作为一个 FreeBSD 的开发者,您希望对用户说什么?
徐:坚持使用,一开始可能很难用,但是常用的也就那么点东西,熟悉了就不难了。

李:非常感谢您能够抽出宝贵的时间来接受我们的采访 :-) 祝您猴年大吉!另外,在此也感谢您长期以来对FreeBSD所作的巨大贡献。
徐:谢谢你们对我的关心,祝FreeBSD China Community越办越好,吸引更多用户加入,团结互助共同推动FreeBSD在中国的应用,最后祝大家身体健康,工作顺利,猴年吉祥。