导读:
标 题:
看看国外的本科生能做什么?
人物专访:核心黑客系列之一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+。幸运的是,它们只在特别的地方发生,比如“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有几本很棒的书(“Understandin
g the Linux Kernel”-Bovet and Cesati,和“Linux Device Driver 2ed“-Rub
inend Corbet非常棒)。但是打开内核的钥匙还是度代码。你有整个系统的代码-读
它,修改它,学习它。
我一年前加入了lkml,但是直到2.3我才第一次真的做出了贡献。在lkml旁观
(Lurking on lkml)是观看高手出招的最好办法,你能学到很多。
JA:谢谢你有时间回答所有的问题,由于这次谈话,我一定要下载你的包并升级
我的系统
Rebort Love:太好了!请让我知道它工作的如何并且也同时感谢MontaVista的伙
计们(可抢占内核最初的开发者)。
------------------------------------------------------------------------
Any comments you have about this interview, or this series, can be poste
d here or mailed to me at jeremy@kerneltrap.com
后记:与Robert谈完后,我下载了他的包并测试了一下(2.4.10-ac12)。wow!
提高很明显!VMWare和Mozilla这样的程序在加载和退出时我的系统要冻住一段
时间的,应用了Robert的包后,我能够同时加载他们两个,而我的系统还可以响
应。我注意到当大型程序装载时xmms不再“skips"了。从现在起,我将使用它
了,我希望它能更快的融入2.5内核
from: http://kerneltrap.com/article.php sid=328
本文转自
http://cache.baidu.com/c?m=9f65cb4a8c8507ed4fece7631046893b4c4380147a8a8f027fa3c215cc790b1f1a33fefb70714613d3b23e3d43b84828baae6b27625460eccddf893cd6bb992925883034744cd81c47884fb8ca3023c727925cfdea44a7ecff25e3dac5a3d94323be44757c97f1fb4d701fdd1b83034095b1ee48025e60ad9d37728e5f6028ef3430b5508997251e739687d94b4db33da16a06e3dc22b14e05c415b3696a3345d05bc70d465234f74e57e8354e13e2eb4a962b6e3025&p=8765c64ad7c21ee708e292755b4494&user=baidu