您的位置:首页 > 运维架构 > Linux

人物专访:核心黑客系列之一 Robert Love

2009-11-10 16:52 711 查看
人物专访:核心黑客系列之一Robert Love
 
 
每个星期,我们都采访一个内核编写社区的人,虽然这样的采访会很侧重技术,但是我们的立足点是为了让所有人都能接受。本周我们采访了Robert Love,现在他正在维护“可抢占内核”的升级包和其他一些事。他使用Linux已经7年了,对于现在的内核有很多贡献。所有这些最后用他自己的话来描述。

记者Jeremy Andrews(以下简称“JA”):请谈一点关于你自己和你的背景。

Robert Love:我现在是Florida大学计算机和数学系的学生,未婚但有一个很可爱的女朋友。我的编程兴趣是操作系统和数学/科学计算。

JA:你何时毕业?还会继续读研吗?

Rebert Love:我想继续留在学校里读研究生,特别是如果社会经济状况还像现在这样的话。

JA:你何时并且如何开始学习Linux的?

Rebert Love: 在1994年,我有了第一台运行Linux的个人电脑,那时还是1.0的内核。这也是我第一次实际接触一个类UNIX的系统。有我一台386SX电脑(感 谢妈妈!)并且安装了可转换的Windows 95beta版。随着使用Linux越来越多,我最后终于在2.2的时候完全的转移到Linux上来,从那时起,我一直完全的使用Linux。 我当时部分的转移到Linux上是由于一个明显的原因:我相信Linux是一个强大和强壮的系统,它有很好的应用程序。但根本的原因是我喜欢和Linux 系统以及围绕在它周围的社区交流的能力。

JA:你能比较一个1.0和2.4内核的不同点吗?

Rebert Love:如果它们有几页代码是相同的话,我会感到很惊奇的。所以,每件事都不同。

JA:安装和使用1.0的内核是怎样的?当时有什么软件?

Rebert Love: 很幸运,在1994/1995年,Linux发展的很好。当时SLS和Slackware都发行完整版。我最开始使用Slackware2.0。你不得不 下载很多磁盘文件集(disk sets)-也许现在也一样。我记得磁盘文件A好像是核心,磁盘文件N提供网络支持等等。(译者:我想那时没有光盘,发布还是用软盘的,所以才有所谓的磁 盘文件,也就是一个文件1.44M) 那时Linux就有网络,X (XFree86 2.0)也有,还支持很多硬件呢。 从今天看来最大的问题就是缺少文档,在加上复杂的安装过程。我记得我怎么做都不能让PPP工作……最终我放弃了。如果我可以让PPP工作的话,我也许那时 就转换到Linux上了。

JA:你做了那些贡献?

Rebert Love: 现在我大多数时间用来维护可抢占内核的升级包上。它允许低优先级的进程被抢占,即使是在内核空间(译者:现在的内核是不可抢占的,抢占是只发生在内核空间 的工作完成,切换回用户空间的时候),这样可以提高体统响应。这个升级包最初是由MontaVista-一个很棒的公司-做的,所以我现在和他们以及社区 的其他人紧密的工作。它是一个很有趣的项目。我们的目标是使它加入2.5内核中。 我很随意的,否则……我修改漏洞,做优化。我写了i815和AMD761 AGP GART代码。我还维护其他可能加入内核或没用的升级包。

JA:如果内核可以被抢占的话,那么内核将发生什么样的变化?

Rebert Love: 我们使用的模型是当内核没有被锁时,允许内核在任何时间都能被抢占。在这种思路的设计下,当使高优先级的进程变为可运行(runnable)的事件发生 时,系统将抢占当前的任务并运行高优先级的任务。 我们必须修改在entry.S中的中断代码,防止一些情况发生和允许从一个中断处理程序返回的时候抢占。但是,就象我们不能允许多处理同时在临界区 (critical regions)内一样,我们不能在临界区内执行抢占-所以当保持一个spinlock(holding a spinlock)的时候,我们要避免抢占的发生。低速内核例程(bottom half handler)和调度程序也被修改来防止它们在执行时被抢占。

JA:就目前来说,你认为这个包有多稳定?我在一个单独的Linux服务器上作所有的工作,我经常升级到新内核和新软件。提高整体系统响应时间看上去很吸引人,但是你认为这个升级包可以稳定到可以被“每天都使用(every-day-use)”的服务器用吗?

Robert Love:这个包非常稳定。我很自信的建议每个人都使用它。我们有很多用户并收到了很多反馈。我想所有明显的bug都被改正了。 我现在在我的主系统上就在使用这个包。 好的一面是我们知道设计和实现是正确的。使用我们最近的包,我想我们可以处理任何问题。

JA:你看到系统响应时间提高的有多明显?

Rebert Love: 非常明显。 系统响应时间有200%的提高。通过这个可抢占内核的升级包,平均系统响应时间现在是1ms,最大到10ms。现在还有降低响应时间的一些长时间锁,有些 长度达到100ms+。幸运
4000
的是,它们只在特别的地方发生,比如“VC切换(switching VCs-译者:不知什么意思:-<)”。

JA:还有一个有Andrew Mortan维护的包也要达到同一个目标,你的和他的有什么区别?

Rebort Love: 我们的目标是相同的,那是因为内核代码是非抢占的。所以,内核会一直运行直到完成或者显式的自动放弃。如果在内核执行期间,用户空间的事件发生了,它们必 须等到内核完成。这就是我们需要解决的问题,也就是降低系统响应时间的原因。 Andrew的低响应时间包在整个内核中的策略点放置了基于条件的调度调用。这些调用可以有效的允许长时间的内核操作说“我很好心可以让其他人来运行,有 任务需要运行吗?如果有,运行吧!”这样会打断操作,减少这些地方的系统响应时间。 我的这个可抢占内核的包同他的工作机制不同,它通过修改内核本身来允许内核代码被抢占。所以上面的问题根本不会发生-如果一个任务要运行,它就会运行-并 且系统响应也改善了。

JA:最近在lkml上你谈到将两种包结合的可能性,你现在有作这方面的工作吗?

Rebert Love: 这当然值得考虑。因为我们在上锁期间不能抢占,那么长时间的锁就会对系统响应时间造成值得注意的影响。该锁的操作时间就是系统的等待时间了。 一个解决办法是像Andrew那样中断锁操作。这就是将他的包融入可抢占内核的部分。或者更实际的办法,做一个应用了他的包的能意识到抢占的版本,当一个 锁操作时引发的任何一个基于条件的调度程序也许是很有帮助的。 这个方向的一个问题就是确认一个长时间的锁操作。这是preempt-stats包的作用,它测量非抢占时间并报告到底是什么锁产生的。 这只是关于长时间锁的一种解决办法。

JA:内核的那些部分会有你说的长时间的锁?

Robert Love: 控制台层(console layer)曾经使用了一些很长时间的锁,不过幸运的是Andrew Mortan最近修改了很多。帧缓存(frame buffer)使中断无效了很长时间-避免向它打印很多东西。如果你卷动了很多次屏幕,你将发现需要等待最长500ms。切换虚拟终端很糟糕。 blkdev_close()使用了一个长时间的锁。一些模块操作也很耗时。如果VM开始thrashing,将产生很长时间的等待,因为在保持一个锁期 间,它做所有的事。VFS也有一些长时间的锁。

JA:你的这个包进入内核2.5有多大可能性?会有写什么困难?

Robert Love: 这将取决于Linus对这个包的评价,其他内核编程者的意见。Linus曾经说过他这个主意很感兴趣,我希望这有所帮助。 我们有一个很大的用户数据库,那也将有所帮助。我们得到了很多反馈包括展现其提高性能的基准测试结果。 关于可抢占内核的争论是因为它降低了系统吞吐量(system throughput)。这是很正确的观点。也是需要我们关注的观点。现在的测试表明会损失0-5%的吞吐量-我想对于200%的响应速度的增加还是很值 得!而且,有时候还会增加吞吐量。不管如何,对于那些任何吞吐量的损失都不能接受的系统,可抢占性内核只是一个配置参数而已。

JA:开发时你使用的主要工具?请描述一下你的环境,计算机和使用的方法。

Robert Love: 我主要的机器是P3-733,384M内存,U2W SCSI硬盘。我也有一个IBM的ThinkPad和我公寓里各种各样的老机器。我运行最新的RedHat Rawhide和Ximian GNOME。 我使用vi编码因为我不想学习其他OS :-) 我一般在X里,所以我通常使用gnome=terminal和gvim窗口打开我的project。我倾向于先广泛的看看,如果需要做做研究,然后开始编 码。很少在纸上作设计。我经常依靠lkml和email-我喜欢其他人跳跃性的想法。

JA:你使用其他的操作系统吗?和Linux相比,你喜欢还是不喜欢它们?

Robert Love: 我有一个Windows2000的工作站,和一台运行Irix的老式SGI Indy。除此之外,任何事情都是Linus。我使用Windows是为了Powerpoint,以防AbiWord不能剪贴它。 我最不喜欢其他操作系统的原因就是它们不是open source的。我不是一个free software的狂热者-虽然我赞成它们的优点,我认为源码开放和围绕它的社区是无价的。

JA:你曾经使用open source的BSD操作系统吗?特别是,你曾经关注过它的内核吗?

Robert Love: 我曾经有一台OpenBSD的机器,但是我把它丢到垃圾箱了。(虽然不是因为OpenBSD) 其他的我所知道的就是学术性的了,我被Matt Dillon在FreeBSD的工作所打动(他写了VM)。他们的SMPng工作进展的很不错(在SMP扩展性方面,他们落后于Linux)并且他们甚至 在考虑实现一个可抢占内核。

JA:你知道他们倾向于使用何种抢占性吗?可能像你的升级包,或者像Andrew的升级包,或者是个结合体?

Robert Love:他们考虑一个完全抢占性内核,就象我的包一样。我不知道对此他们会做了什么,也许在FreeBSD Core开发组已经被讨论过了。

JA:你对当前2.4内核系列有什么看法?你认为它很稳定吗?

Robert Love: 我想我们比2.2有很大的提高。在2.3和2.4中完成的工作太棒了。我们做的一些提高,特别是Linus和Ingo作的一些工作真的是棒极了。2.4现 在可以完成一些高性能/高扩展性的工作了。 这并不是说在这点上我对2.4完全满意,我认为拆分Rik的VM是个错误。如果Linus想在2.5中尝试不同的东西,他都可以。在稳定的系列中,我认为 我们需要更少的改变。我们不能就这么丢掉了花在VM上一年多的工作,还有所有的对应文档和理念。但是看来VM被裁减的很 好。我使用Alan的内核,这个内核还坚持Rik的VM,而且我们正在为提高它而努力。谁知道当2.4的内核被传递到Alan手上以后,我们会有什么样的 内核。

JA:如果你遇到突然改变内核,你会如何处理?

Robert Love: 首先,也许内核会变成不知道什么鬼样子,不管我如何抱怨或者其他人如何反对Linus,他不单单是一个不可思议的高手(hacker)而是一个很棒的管理 者,Linux需要他。 对于VM的问题,我将跟随Alan领导的2.4内核。测试和文档化Rik的VM。我想我们需要更好的测试。太多Rik的主意和包都被忽略了。其他包被合并 而不复存在了。我们需要一点一点的进行合并VM的工作,同时需要没有冲突的包,测试和结果。我们现在在Alan的代码树中需要这些。 对于2.5,当然了,任何事都在发展。丢弃任何可以丢掉的。我认为Andrea的VM性能很好,可能它更好。It is just a bad time to find out, IMHO。

JA:对于2.5内核,你最希望看到什么?从这里你打算何时开始?

Robert Love: 当然是一个可抢占的内核 :-) 除了那个,我将继续探索更好粒度的锁(finer-grained locking)和整体清除(overall cleanup)。我想块设备,SCSI层和控制台层需要重写。我们关注NAPI and/or 某种形式的中断扼杀(IRQ throtting)。Ben LaHaise的异步I/O工作合并。Keith的新的kbuild看上去不错。我期待这所有这些。 我真的认为我们需要重写tty系统,但是我不知道谁会做这个-我肯定不会做的。 我想没有人,包括Linus对于2.5开始有一个明确的线索。我最初认为是2.4.0发布(2001/01/04)几个月后-可能是3月,或5月,可是现 在还这样,一年又过去了,我猜不到。我怀疑等VM被证明是稳定的并且Alan和Linus可以完全同步的时候,我们将看到2.5.0。我希望这很快发生。

JA:你遇到到Linus吗?或者其他内核开发者?

Rebort Love:我没有遇到国任何“著名”的高手。我希望遇到他们,也许某天,在一个会议或是宠物公园吧。

JA:对于希望称为内核高手的人你有什么窍门和灵感?

Rebort Love: 读代码,“玩”代码(译者:其实文中多次提到“玩(play with)”这个词),并且要经常洗澡。对于初学者,O'Reilly有几本很棒的书(“Understanding the Linux Kernel”-Bovet and Cesati,和“Linux Device Driver 2ed“-Rubine and Corbet非常棒)。但是打开内核的钥匙还是度代码。你有整个系统的代码-读它,修改它,学习它。 我一年前加入了lkml,但是直到2.3我才第一次真的做出了贡献。在lkml旁观(Lurking on lkml)是观看高手出招的最好办法,你能学到很多。

JA:谢谢你有时间回答所有的问题,由于这次谈话,我一定要下载你的包并升级我的系统

Rebort Love:太好了!请让我知道它工作的如何并且也同时感谢MontaVista的伙计们(可抢占内核最初的开发者)。

 
 原文地址 http://blog.chinaunix.net/u/19412/showart_115724.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息