
两个卖点,一个是随处都可以手写然后email出去
一个是抖腕子翻页,呵呵,好像还可以通过晃动(测加速度)来zoom picture
至于印度文和英文的互译,就比较平常了吧
GapiDraw
看着是不错
Feature List
Some of the key features of GapiDraw are:
* GapiDraw works on Stationary PCs, Smartphones and Handheld Computers using the same code base. Write once and run everywhere. And it actually works!
* GapiDraw is compatible with legacy DirectDraw code. Standard operations such as Blt and BltFast are virtually identical to DirectDraw.
* Support for both full screen mode and windowed mode on all hardware platforms.
* GapiDraw supports most image formats and more. BMP, PNG, JPG and GIF are supported on all platforms. BMP images can even be RLE-encoded.
* Advanced graphic tools. Bitmapped fonts (with and without kerning), Surface intersections, Collision masks, High performance timers, Animated mouse cursors, Animated alpha blends, Surface tint, Surface colorization, Rotozoom, and much more..
* Easy extensions. All graphic surfaces in GapiDraw can be accessed using a low-level interface. This allows easy-to-implement video playback, 3D integration, and custom video filters.
* Ability to suspend execution and access other applications. Custom overloaded functions for suspending and resuming are available as well.
* Optimized for minimum memory footprint. All operations requiring dynamic allocation of memory (such as image loading) are done with a minimum of memory overhead.
* Support for all four portrait and landscape display orientations with no performance penalty.
* Rapid prototyping and development using the GapiApplication Framework.
* RGBA surfaces, for easy-to-use blits with variable alpha map.
* Save any surface (including display and back buffer) to a PNG or BMP file.
Develop on your PC. Recompile for the mobile device.
And it works. Really!
Device support
GapiDraw supports the following MICROSOFT systems:
* Stationary PCs running Windows 95/98/ME/2000/XP (**)
* Pocket PC 2000(*), Pocket PC 2002, and Pocket PC 2003 devices
* Pocket PC 2000, Pocket PC 2002, Pocket PC 2003 emulators
* Microsoft Smartphone 2002 and Smartphone 2003 devices
* Microsoft Smartphone 2002 and Smartphone 2003 emulators
GapiDraw supports the following SYMBIAN devices:
* All Nokia Series 60 devices (including the NGage)
* All Nokia 92xx devices
* Sony Ericsson P800 and P900 devices
GapiDraw supports the following PALM devices:
* To be announced
Support for additional hardware platforms and devices are under constant construction. Please check this page on a regular basis for updates.
(*) GapiDraw requires a 12-bit or 16-bit color Pocket PC.
(**) On Stationary PCs GapiDraw requires DirectX 7.0 or later.
说是Reliance IndiaMobile, an India based wireless carrier, has launched the Telson TWC 1150, a wristwatch phone with plug-in camera from Telson Electronics. The device is a next-generation mobile phone with 'cyber' design, and the world's lightest CDMA2000 1x phone.
我看到明明写着CEC嘛!
some important new features:
A new option to prevent sites using Javascript to block the browser's context menu.
Mozilla 1.7 size and performance have improved dramatically with this release. When compared to Mozilla 1.6, Mozilla 1.7 Beta is 7% faster at startup, is 8% faster at window open time, has 9% faster pageloading times, and is 5% smaller in binary size.
A long-standing bug with CSS backgrounds on table elements has been fixed, including support for columns and proper layering (standards mode only).
《英语完全征服》d5,给老婆买的
《新桥恋人》UFO D9
《Almost famous》D9还带张CD
《新龙门客栈》D9
《Secret Garden》D9,不过这张要换

Making System Calls from Kernel Space
明白了 VFS cannot open root device LABEL=/
都是IDE选项没有编译进内核造成的
另外似乎initrd太小也有可能导致这个问题
Robert Love--KernelTrap访谈 之二(中文版)
摘要
本次采访中(2002年10月), Robert和我们讨论了Linux抢占式内核的现状, 他最近参与0(1) 级调度器开发的情况, 以及他在 VM overcommit方面的工作。他还对linus使用Bitkeeper,Linux的未来以及最近在Ottawa举行的kernel summit会议发表了自己的看法。(2003-09-22 09:51:38)
By Anlin
Kernel trap在2001年10月对Robert love进行了第一次采访;之后不久, 他的抢占式内核补丁被收入2.5系列内核;他在内核开发方面一直很活跃。最近,他再次接受了我们的采访。
本次采访中, Robert和我们讨论了Linux抢占式内核的现状, 他最近参与0(1) 级调度器开发的情况, 以及他在 VM overcommit方面的工作。他还对linus使用bitkeeper,Linux的未来以及最近在Ottawa举行的kernel summit会议发表了自己的看法。
Robert现在在加州为MontaVista公司工作,但8月底他将回到佛罗里达州立大学继续他的大学三年级的学业。请继续阅读我们采访的全部内容:
//JA for Jeremy Andrew @ KernelTrap
//RL for Robert.M.Love
JA: 我上次访问你到现在已经有8个多月了, 那时你已经对Linux内核做出了令人印象深刻的贡献。几个月前你的抢占式内核补丁被收入2.5 版内核的开发树,而且你投入很大精力参与了O(1) 级调度器的开发工作。 除了这些以外,您在 Gainesville的工作和生活怎样呢?
RL: 都还不错。4月份我完成了在佛罗里达大学的第二年学业。我很喜欢大部分课程,尤其是数学。8月底我将开始第三年的学习。
摄影是我的爱好之一, 我买了新的照相机---Canon Elan 7e。这是一个SLR 35毫米 beast的单反相机(但不是数码的)。我拍了很多照片,从中获得了很大的乐趣。
一月份我就开始在MontaVista, 一家嵌入式Linux公司,工作了。 我在实时和性能工作组做内核hacking方面的工作。 MontaVista 是开源软件的坚定支持者,因此我可以同时为社
区的很多项目工作。 公司一直对抢占式内核很有兴趣,这一直是他们的开发项目(note: 抢占式内核最初是由Monta Vista提出并初步实现的), 而且他们也支持我对2.4 和 2.5 版内核的维护工作。
JA:听起来您可以做自己喜欢的工作,并可以因此得到报酬?
RL: 我真的很幸运。
JA:您提到Monta vista是一家嵌入式Linux公司, 但是我必须承认,除了他们对抢占式内核的贡献之外我对他们并不是很熟悉。 您可以更多介绍些他们的工作吗?
RL: Monta vista为开发者提供了一套开源的基于Linux的嵌入式系统的解决方案。 对于着眼于嵌入式产品的开发者来说, Linux是一个广泛的选择。 我们提供了一个产品和多样
的服务来满足他们的需求。
JA:这个夏天您准备怎么渡过?
RL:在学期中我通常会兼职,但是这个暑假我会在硅谷为Monta Vista作全职工作。 这是一个非常值得的经历。这儿我有一辆车,所以我可以借着这个机会去旅游。北加州真的很美。
JA: 来这儿以后您去了哪些地方旅游呢?
RL: 我在south bay 居住和工作,所以我花了很多时间在附近游览。我经常去 San Francisco, 也去过 Santa Cruz 并且徒步穿过山谷附近的山脉。我很喜欢那些大学城,像 Stanford所在地 Palo Alto和 UC Berkeley 所在地Berkeley。我还去过Yosemite ,很喜欢那里。
JA:回到您在内核方面的工作。 您是什么时候得知您的抢占式内核补丁将被Linus收入2.5 的开发树的?
RL: 当Linus说 "Ok" 的时候 :-)
糟糕,我几乎想不起来了。我们曾经讨论过这个问题并且这也常常在社区中被提出来。我给了他针对2.5.4-pre5 的补丁,他提出了很多问题,这些问题在我后来的一个补丁进行了处理。
瞧,结果就是,2.5.4-pre6 有了一个抢占式的内核!
JA:作为Linux台式机用户,我很高兴听到您的补丁被采用了。 但是,我仍然记得不久前争论中,很多人不赞成抢占式内核应该成为Linux内核主干(mainline)的一部分。您从其他的内核hacker那里得到的反映如何?
RL: 各式各样的。有些人很喜欢这个而且在为进一步的增强而工作,有些人不喜欢,其他的则持中立的态度。 最重要的家伙(Linus)很喜欢这个;而且我也从两个最具天才(我的个
人看法)的内核hacker Andrew Morton和Ingo Molnar那里得到了支持,对此我十分感激。
JA:现在您对已经被收入mainline development tree的补丁做多少维护工作呢?
RL:比还是作为外部补丁的时候少多了。 在此之前我要花很多的时间跟踪开发树,保持事情的同步并发布补丁。现在我则不必担心类似的事情。实际上是其他的补丁要注意和抢占式内核保持一致。
JA:抢占式内核增加了哪些复杂的因素呢?
RL:有per-cpu数据的问题。由于内核已经是可抢占式的了, 我们有一个规则是内核代码不能假定当前使用的cpu不会被其他代码夺走,这也是被抢占的结果。因此,必须依靠per-cpu
数据运行的代码必须确定抢占被临时禁止。
JA:内核的哪些部分必须因此禁止抢占呢?
RL:举个例子吧, 比如一个图片, 就值数千本 jacky handy书,
int cpu = smp_processor_id();
extern stats[NR_CPUS];
do_stuff(stats[cpu]);
more_stuff(stats[cpu]);
以上的代码中, 因为有了内核抢占( kernel preemption),你可以在任何地方进行抢占。当重新调度时,你可能在使用另外一个cpu并且'cpu'的值不再指向当前的cpu了。 这样并不好。
解决方法是:
int cpu = get_cpu();
extern stats[NR_CPUS];
do_stuff(stats[cpu]);
more_stuff(stats[cpu]);
put_cpu();
函数get_cpu()和put_cpu()返回当前的cpu值, 但同时也禁止了抢占。需要注意的是只有当前没有锁并且允许中断时才需要做这些,并不是每次使用都会产生问题。我们已经修正了所有已发现的问题.须注意的是以上的方法在单处理器系统中可能造成问题,因为单处理器的数据是“隐式锁定”的, author可能因为不能在同一个cpu上再次读入数据(执行代码)而没有对数据进
行保护。抢占改变了这一切,因此你可能需要禁止抢占。
JA:全部的抢占式补丁都被收入2.5内核了吗?
RL:是的,而且2.5包括了很多2.4的补丁没有收入的变化。2.5还包括了对当前多数处理器结构上内核抢占的支持,体现了支持该补丁的开发者的产生。
JA:2.5现在支持哪些处理器体系结构呢?
RL: ARM, I386, PPC, sparc64和x86-64. Monta Vista已经为2.4提供了支持SH和MIPS的补丁并且这些也可以很方便地进行移植。
JA:除去对额外处理器结构的支持, 2.5的内核抢占式补丁还有哪些2.4的补丁不具备的呢?
RL:我们改变了一些补丁的工作模型。总的结果是一样的,但是实现上有了一些改进。
具体的说, 我们把一些preempt_enalbe()宏移入prrmpt_schedule() 从而减少了一些行间代码。
preempt_enable()在每个spinlock中都是inline的,这减少了目标代码的长度,尤其对于RISC结构的机器。 其次, 我们把preempt_schedule() inline进entry.S 的中断返回路径。我们可以在两个时机进行抢占调度:中断处理完成后(这是一个理想的时机,因为通常中断会唤醒一个进程并且置need_resched标志)和某个锁的释放后。对于中断处理方面的抢占,我们在entry.S的返回代码里加入了汇编。这些代码做些 preempt_enable()之类的检查而后调用preempt_schedule(),如果必要的话。preempt_schedule()再调用 schedule()。我们只是专注在返回路径中preempt_schedule()的逻辑以避免某种重定向。
除此之外,还有一些其他方面的小的改进…
JA:您未来对Linux内核抢占有什么改进计划呢?
RL:这里有一些我或者其他人正在做的事情…
Ingo Molnar, Dave Miller, Linus和我一直在tossing around一些补丁来移除整个local_bh_count和local_irq_stat的概念(大致的讲,就是一个关于有多少个中断或者BH正在进行的计数)并且将他们封装入preempt_count。这将会使我们能够将preempt_count作为
一种接近原子性的计数器使用并减少很多代码。
我认为仍有一些代码路径可以更好地利用抢占式内核,我会寻找使这个新的视角得到应用的地方。最后,也是惯例的是:减少锁持有的时间以减少延迟。
JA:您的scheduler hint补丁得到了多少回馈信息呢?
RL:不是很多,而且遗憾的是,最有用的回馈却是在list(note: lkml)之外得到的。我并不会过分相信scheduler hints是一件好的事情。它们在Solaris上表现很好, 但是对我来说只是一个提醒我scheduler需要fixing的标记。 换句话说, 它们是一种band aid。唯一我认为有
些用处的是HINT_TIME, 这是Solaris系统的成功之处。困难在于分是实现公正以及判定我们所增加的复杂性是否值得,或许不。
JA:您可以描述些正在做的关于O(1) scheduler的工作吗?
RL: 当Ingo第一次将他的scheduler张贴出来的时候,它设计上的完美给我留下了很深的印象。 我对Ingo作为一个程序员和结构设计者有着极大的尊重,但我仍感到十分惊讶。我
开始对其做出贡献,给出我的认识并修正bug,让抢占式内核在新的scheduler上工作。最近, 我完成了task affinity cpu系统调用, 实时的增强, 可配置的优先级并编写了些相关的文
档。 现在Ingo和我共同维护这个scheduler, 我还将更新的内容应用到Alan的 2.4-ac树上并且维护stock2.4树的o(1) scheduler补丁。
JA:O(1)对Alan的2.4-ac树的backport是我仍使用它的一个主要的原因。加上你的抢占式补丁和rmap,它工作地非常好。说句老实话,我有很长时间没有运行其他的程序了,甚至都忘了它的样子。与2.5的scheduler相比,Alan的 2.4-ac树中的scheduler有什么缺少的吗?
RL: 在2.5中已经证明相当稳定的代码移植到2.4-ac的过程肯定会有延迟,Alan合并了它们,但是并没有出现过于特殊而无法解决的情况。 2.4 将会和2.5保持合理的同步。
JA:您对2.5内核开发的进展是否感到高兴呢?
RL:是的,整个开发过程看起来进行得不错。我给Linus的所有代码都成功地被接受了,这总是一件好事情。
JA:对于2.5您仍然希望Linus收入的有影响的补丁有哪些?
RL: 非常不幸运的是还未收入的补丁中,只有很少是未决定(pending)的。现在我更感兴趣的是那些我们希望可以在万圣节冷冻期(Halloween freeze)前完成的事情。 但愿SCSI层可以引入一些sanity,我还祈祷tty层更多的工作。余下的Patrick Mochel's优秀的设备模型和driverfs代码是我非常欢迎的。
最后, 我希望Andrew Morton能够将Rik 的 rmap vm分成逻辑块并由Linus掌管它们。 期望这样所有的VM开发者都可以改进它,我自己也很喜欢为它工作。
JA;您曾经单独在虚拟内存上花过时间吗?
RL: 一点点。虚拟内存是我感兴趣的方面之一,但是我还没有贡献很多代码。实际上, 我围绕rick的 rmap vm做过一些工作;现在,我为rick's vm和 the stock 2.4 vm两
方面做strict vm overcommit的工作。严格的虚拟内存overcommit工作是一个有趣的挑战。其中大部分的工作是alan cox为他的2.4-ac树做的。 现在,Linux将会高高兴兴的overcommit memory –也就是说,在没有空闲内存作为保证(back)的情况下,内存分配也会成功。这个策略通常工作良好,因为一个系统往往拥有大量自由的内存。更进一步的说,很多内存的分配并没有充分地利用或者很快就被释放了。因此 overcommit减轻了虚拟内存系统的压力,从而减少了页交换的频率。现在我们已经成功完成了一种基于简单的启发式规则的分配方法,这会在允许足够的 overcommit
"fixing"有两层含义。首先,我们必须严格地计算分配的内存块的大小。举例而言, 一个在很多进程间共享 的"Copy On Write" 的页只占用一页的内存, 因为这就是它物理上消耗的。但是在任意时刻,一个进程都可以对此页执行写操作从而不再共享它而是拥有自己的拷贝。因此,我们需要对每一个可写的共享实例计算一次而不是总共只计算一次.其次, 既然我们已经有了一个合适的accounting, 我们就必须制定一个严格的规则。比如,"committed memory will not exceed swap"。有了这些改变, 内存过度使用的情况就不会发生了。所有失败的情况都被归结到分配函数上
(fork,mmap,malloc,etc)。对内存的访问也不会造成OOM(Ouf Of Memory) kill的情况了,如果内存块已经被分配,它就应该是存在的。
JA:听了您的解释以后, 我感到不解的是为什么现存的虚拟内存系统不采用严格的虚拟内存overcommit呢? Overcommit听起来是一件好事, 是不是它存在什么不足?
RL:是的, 主要有两点:(a) 额外的accounting. (或许是不足考虑的吧。实际上, 无论严格的overcommit是否存在, 我完成的部分都进行accounting的工作) 。(b) 禁止overcommit之后, 虚拟内存系统的压力就会提高而且页替换频率也会跟着增加。
JA:您曾提到对于对称多处理器scalability的兴趣,那么对于Linux对称多处理器scalability的未来你有什么看法呢?
RL:那就看你想scale些什么了 :-)
2到4个处理器的现在的情况(note: Linux运行于2~4 CPU的smp系统之上)是很理想的, 或许我们可以再顺利地扩充一些。但是继续扩充到无限则会将Linux置于一种扭曲的混乱状态。
JA:您还提到了对锁机制的兴趣, 能否举些例子?
RL: 你看,我并不知道自己为什么会对锁机制感兴趣的。大多数人或许并不会认真考虑他们所使用的锁是如何实现的。但是我读一个操作系统时做的第一件事就是理解它的锁机制。 我想或许我就是这么古怪吧…
总之,我对于我们实现的各种原语(primitive)以及它们的使用方式都是很感兴趣。我们已经实现了一个非常棒的轻量的(lightweight) spinlock。在内核summit会议上,我曾提出要实现一种新的轻量级的互斥锁,也就是一种没有我们现有信号量的复杂特性的二进制信号量,或许具有 spin-then-sleep行为。
JA:2.5的锁机制相比以前的内核来说有什么改进呢?
RL: 它实现地更好, 尤其是在VFS层。我对于2.5做的第一件事就是把BKL(BigKernelLock)从高层的llseek()函数中去除,把它放入单独的llseek实现中去。这样现在每个函数都可以决定它需要哪些锁了。因此,普通磁盘操作使用的llseek就只需要i_node信号量了。
这种 “锁下推”(pushing locks down)工作在 VFS层的很多VFS例程(methods)中继续。 其他领域的工作也在继续, 尤其是移除BKL的工作。当rmap被收入时, 我知道Bill Irwin有一些可以减少锁竞争的补丁。Andres Morton也做了一些在VM中减少VFS层高度竞争的工作。
JA:那么Linux的锁机制与其他操作系统, 比如FreeBSD和Solaris的比起来怎样呢?
RL: Solaris 要比Linux grain得好很多(note:具有更细粒度的锁),它在多于64个cpu的环境中仍能良好地工作。因此,Solaris有低端为高端折中的名声。 FreeBSD在它的5.0开发树中引入了一些有趣的锁构造,但他们也只是刚刚开始grain他们的内核,他们似乎把目光都放在高端的具有 scalability系统上。
JA:从2.5向上看,您希望下一个内核的开发中包括有什么工作呢?
RL: tty层的重写。哈哈。 我不能想得那么久远。我很希望看到内核得到整理,旧的cruft被移除以及类似的事情。而且有一个只是使之更精炼的发布版本。
JA:您对于Linux内核的发展方向感到担忧吗?
RL: 是的,我常对高层工作对普通情况造成的影响感到担忧。你或者扩展到128个cpu或者只是在一两个cpu上优化运行。你或者对一些少数运行的任务进行优化或者运行着上千个数据库线程而无法进行优化。
我只是对前者(scalability)进行了改进,所以你可以想象出我所担心的事情。这也是我们大多数人都担心的。
由于Linux内核演进(evolutionary)性的设计,状况会变得更糟。 我很担心我们只是对出现的问题进行hacking 和rehacking,而这将会是最大的问题。
JA:您预计我们什么时候会看到2.6版本的发布?
RL:18个月,你赌多少(place your bets)?
JA:一年半看起来很长, 尤其在几个月前的代码刚freeze的情况下。为什么您认为我们要花那么长的时间才能看到2.6的发布呢?
RL:我曾看到过早至2003年初的预测, 那就只有几个月的时间来达到稳定期了。 就过去的历史而言, 达到稳定状态所花费的时间要比 特性波动期("the flood of feature" )长得多。
我预测一个现实的日期:2003年夏天。距离现在有一年的时间。考虑历史因素,我会把这段时间加长到18个月,或许稍微少一些;但绝对是距离冻结期(freezing)有一年的时间的。
我更关注2002年10月31日的实际冻结,如果我们赶的及的话,我们可以有足够的时间来使内核达到稳定状态。不管是一个月,还是一年。
JA:除了内核以外近期您还对哪些开发计划感兴趣呢?
RL:GNOME2是令人感到惊奇的!
Metacity (一个和gnome2兼容的窗口管理器) 很漂亮而且速度很快,Havoc 真是个天才!
JA:您对于Linus采用bitkeeper的决定以及其后长时间的争论有什么看法?
RL:如果它可以让他(linus) 效率更高而且更高兴, 那么我就喜欢它。 我希望它是开源的吗? 当然了。但是它很有效而且是当前最好的解决方案,所以我对此并不抱怨。
JA:那您用BitKeeper来管理你的内核开发工作吗?
RL:没有。我用 diff, patch, grep, find和大量的目录。
JA:一个幽默的描述。那么您为什么不选择这种基于更加正式的管理系统的策略呢?
RL: 我认为很多内核开发者也是选择这种方式吧。 或者类似的是他们使用CVS来保存数据,但是大量的脚本文件或许是最普遍的代码管理工具了。我选择它是因为它适合我。
JA:您最近参加了在Ottawa举行的内核Summit会议,您觉得会上最有趣的是什么?
RL: 内核开发会议本身就是很有趣的. 这是一个为期两天的只有被邀请才能参加的会议。有大约60名核心的内核开发者出席。上次我们谈话时,你问我是否遇到过其他的内核开发者。虽然这不是一个如我预想的petting zoo,现在我仍可以说我正巧遇到了他们所有的人。
一些好的议题包括Patrick Mochel的driverfs和James Bottomley的SCSI。Patrick有包括占统治地位的driverfs开发计划。SCSI需要很多的工作,并且James有希望成功对其进行领导。我曾希望关于VM的争议应该是有争议的(当然最终是有回报的), 但Linus在一开始就明确表示他希望在2.5中给rmap一个机会,对此我感到很欣慰。最后的谈话是由Ted Ts'o 领导的,集中于内核发行版的管理。我们决定了现在声名狼藉的freeze date,2002年十月31日。Dave Jones也被惩罚了,被给予了帮助Linus进行feature freeze工作的机会。会议最有价值的部分, 则是非正式的"hallway discussion"以及在Ottawa的一些俱乐部里进行的交谈。 面对面交谈确实是一件很值得的事情, 我认为从中可以得到很多益处。
JA:您还参加了内核开发者会议之后的Ottawa Linux 会议…..
RL: OLS也很有趣。这是一个更大的群体,大概有500人左右。 大会的话题也是以内核为中心的。这对我来说很棒,虽然我很希望讨论不同的话题。尽管这样, Havoc Pennington仍然
做了一个很棒的关于GCONF的演讲。OLS的非正式的部分也是很有价值。内核开发者会议恰巧在OLS开始前结束,所以大多数的内核hacker也出席了OLS,因此我们可以继续我们的讨论并认识很多新的朋友。
JA:您还有要补充的吗?
RL: 激光是由光汇聚成的,不是由声音。
我们应当去获得普通用户的看法。
JA:非常感谢您再次接受我的采访. 您对Linux内核的贡献一直集中在我感到很有趣而且用处的领域。我将很乐意看到您的兴趣将会把您引导到哪里。
RL:谢谢。 我也很高兴和你谈话。 Take care.
--------------------------------------------------Related Links:
英文原文来自: http://www.kerneltrap.org
Robert Love's Home Page - (http://www.tech9.net/rml/)
Robert's Linux Page - (http://www.tech9.net/rml/linux/)
Robert's kernel.org FTP Directory - (ftp://ftp.kernel.org/pub/linux/kernel/people/rml)
MontaVista's Home Page - (http://www.mvista.com/)
Robert Love--KernelTrap访谈 之一
摘要
本周,KernelTrap采访了当前负责维护可抢占内核补丁的Robert Love。他使用Linux已经7年了,为现在的内核作出了很多贡献。他的话,是这一切的最佳描述...(2003-07-11 13:29:15)
By Anlin
JA: 请谈谈您的个人情况...
RL: 我现在是Gainesville佛罗里达大学计算机与数学专业的学生,家乡
在Ft. Lauderdale, FL(note: FL for Florida)。我还没结婚,但
有一个很不错的女朋友。我编程的兴趣在于操作系统和数学/科学计算。
JA: 何时毕业,毕业后有什么计划?
RL: 2004年。但我还是想留在学校里继续读书以获得更高的学位,特别是
经济仍停滞在当前的状况(remains as-is)。
JA: 来自 Ft. Lauderdale, FL.的什么地方?我住在那里的Lauderhill。
RL: 我出生于Pembroke Pines,在那里长大。
JA: 您什么时候开始接触Linux?
RL:
第一次在我的PC上运行Linux是在1994年年末,当时用的是1.0版的内核;
这也是我第一次真实的Unix体验。我的那台PC是386SX(感谢妈妈),在
转而运行Linux之前,它之上运行的操作系统是Windows 95 beta。我在
使用2.0版时进步更大,从2.2版开始则完全转向了Linux,此后一直只使
用Linux。
我转向Linux有一个显而易见的原因: 我相信Linux是一个强大健全有着优
秀应用软件的系统。然而更重要的原因是它使我能对系统以及围绕它的社区
的有充分的接触。
JA: 你可不可以描述一下1.0版内核相比现在的2.4版的几个关键区别?
RL: 如果1.0和2.4有几页代码是相同的,我将会非常惊讶。两者没有任何
相同的地方。
JA: 安装和使用1.0版的内核是什么样的情形,有哪些软件可以使用?
RL: 幸运的是,1994/1995年,Linux发展良好。那时SLS和Slackware
都提供了全功能的发行版。我最初使用Slackware2.0。那时你必须以磁盘
集(disk sets)的形式将Linux安装文件下载到磁盘上,可能你现在仍这么
做。我记得磁盘集A是核心,磁盘集N提供网络支持,等等。那时Linux已经
支持网络了,X也可以使用(XFree86 2.0),也支持很多硬件。
和今天相比,最大的问题是缺少文档,安装又非常复杂。我记得起初我曾因
为没办法让PPP用Linux;如果那时我可以使用PPP的话,我可能早就转向
Linux了。
JA: 您为内核做出的贡献有哪些?
RL: 目前我主要的时间是花在可抢占内核补丁的维护上。这个补丁可以使低
优先级的进程被剥夺,即使它当前处于核心态,结果是改善了系统的响应时间。
这个补丁最初是MontaVista-一个伟大的公司-的杰作,所以我和他们以及这
个社区(Linux社区)的其他成员密切合作。这是一个很有趣的项目。我们正把
目标是将它加入到2.5版的内核中。
我的工作是非常随机的。修正bugs,优化,作一些旨在使系统简洁的清理。我
也写过i815和AMD761 AGP GART的代码,也维护着其他一些的零碎的补丁。
JA: 为了使得内核可抢占,您的补丁对内核作了哪些必要的修改?
RL: 我们的模型是当内核不被锁定时,任何时刻都可被抢占。根据这个设计,
当一个事件激活更高优先级的进程时,系统将会剥夺当前正在运行的进程,转
而运行这个更高优先级的进程。
我们必须修改entry.S中的中断代码来避免某些情况并能在中断处理过程返回
时发生抢占。但是我们不能在临界区内抢占,这和在SMP环境下的临界区中不允
许并发的道理相同,所以我们防止了持有自旋锁(spinlock)时被抢占的情况。
bottom half handler和scheduler同样需要修改,以保证在它们运行时不
发生抢占。
JA: 时至今日,您认为您的补丁的稳定性如何?我的所有工作都在一台独立的
Linux服务器上完成,我不断为它升级内核和软件。改善系统的响应固然有吸引
力,但您有没有考虑过对一台不间断运行的服务器来说,补丁是否足够稳定呢?
RL: 补丁非常稳定。我可以非常有信心地鼓励任何人来使用它。我们有很多用户,
收到了很多反馈。我想我们已去除了明显的漏洞(bugs)。我在自己的主系统中
使用这个补丁。
最重要的是我们知道它的设计和实现是正确的。使用了我们最新的补丁之后,我
感觉我们已解决了所有的问题。
JA: 在您看来,系统响应时间上的改进有多明显呢?
RL: 非常明显。
我们曾经记录过200%的系统延迟方面的提高。安装了可抢占内核补丁后,系统的
平均延迟大约为1ms,不会超过10ms。仍有些长时间的锁占用会影响响应,导致
有些延迟达到100ms甚至更长。幸运的是这些情况只在特定情况下出现,就像切
换虚拟控制台(switching VCs)。
JA: 现在还有另外一个最终目标相同的补丁(由Andrew Morton维护),跟您的
有何不同?
RL: 这两个补丁所针对的问题都是内核是非抢占的。也就是说,处于内核态的任
务会一直运行,直到其运行结束或主动交还控制权。如果用户态事件在内核操作
的时段发生,用户程序必须等待内核完成本次运行。这个等待就导致了系统延迟,
而它(系统延迟)正是我们要去改进的。
Andrew的低延迟补丁在内核的各策略点(note: Andrew认为可能引发长时间延
迟的点)加入了条件调度调用(conditional scheduling calls),这些调度
非常有效地使长时间的内核操作作出让步:"我很乐意让别人先运行。有没有想运
行的任务啊?如果有的话,就先运行吧!"这样拆分了长时间的操作,降低了相应
内核运行点的系统延迟。
抢占式补丁工作机理则很不一样。它修改内核本身以允许核心代码被抢占,所以
上述问题甚至根本不会存在。如果有任务需要运行,它就会运行,系统响应从中
受益(note: 减少了响应时间,改善了系统响应)。
JA: 在最新的lkml 中,您提到有可能将两个补丁组合起来。这是您现在的工作
方向吗?
RL: 这当然是需要考虑的。由于我们不能在系统被锁定时抢占(note: 即使内核
打了可抢占补丁),长时间的锁对系统延迟来说是一个很大的威胁。锁的延时很可
能就成了那段时间系统的延迟。
一种解决方法是像Andrew的补丁所做的那样拆分这些锁。这将成为合并部分他的
补丁到抢占式补丁的目的,或者更现实一些,做一个他的低延迟补丁的抢占式版本。
他的patch中的在内核被锁定时的任何条件调度都可能是有用的(note: 对于改进
我们的patch)。
这个方向(note: 拆分长时间的占用锁)的第一步是标识出长时间被占用的锁,这
正是抢占统计(preempt-stats)补丁所做的。这种方法衡量禁止抢占的时间并报
告导致这个结果的锁。
以上仅仅是针对长时间锁的一种解决方法。
JA: 您所标识的内核的哪些部分会出现这种长时间锁呢?
RL: 控制台层,过去可能出现非常长时间的锁,幸运的是,最近
Andrew Morton修正了很多这方面的问题。Frame buffer的代码会屏蔽中断很
长时间以避免往其输出太多。如果滚屏太多,延迟甚至可能达到500ms。切换虚拟
终端的情况也很糟糕,blkdev_close()会很长时间的占用一个锁。有些模块操作
很耗时。如果VM开始出现颠簸(thrashing),它也会导致很多延迟,因为颠簸时
VM会占用一个锁。VFS也有一些长时间占用的锁。
JA: 将您的补丁加入2.5可能性多大?会有哪些阻碍?
RL: 这完全取决于Linus先生对这个补丁的看法以及其他hacker的意见。Linus
之前曾表示他对这个想法很感兴趣,我希望他的兴趣可以帮着将这个补丁加入内核。
作为一个独立的补丁,我们有很广泛的用户基础,这显然非常有用。我们收到了很
多反馈,包括一些显示这个patch对系统带来巨大的改善的评测。
反对意见是,抢占式内核降低了系统的吞吐量。这是关键点,也是我们需要特别说
明的。现在的多数测试显示了0~5%的吞吐量损失--我想相对于200%的响应提升这
是值得的!另一些测试则显示了系统吞吐量的提升,因为我们更好的排列了系统的处
理流程(thread better)。退一步,对于那些无法接受吞吐损失的系统,抢占式
内核只是一个可选。
JA: 您开发时主要使用哪些工具?请描述一下您的环境、计算机和使用的方法。
RL: 我使用最多的主机是PIII-733(384MB内存+U2W SCSI磁盘)。我也有一台
IBM ThinkPad,还有撒满一地的旧工具(note: 电脑原件)。我运行的是最新的
RedHat Rawhide和Ximian GNOME。
我用vi写代码,因为我不想学其他的OS。:)
我一般在X下工作,因此会打开一些gnome终端和gvim窗口以进行我的工作。我喜
欢到处grep,必要时research,然后开始coding。我几乎不在纸上设计。我经
常依赖于lkml和私人email--还喜欢在别人面前吹嘘自己的想法。
JA: 您还使用什么操作系统?与Linux相比你,喜欢它们什么,不喜欢什么?
RL: 我有一个Windows 2000的工作站,和运行Irix的老的SGI Indy。其他都是
运行Linux的机器。我保留Windows是为了可以运行PowerPoint,以防止
AbiWord不管用的情况。对其他操作系统我最不喜欢的是它们不开放源码。我不是
自由软件的忠实信徒--尽管我赞赏它的优秀--但是开放的源码和它周围的群体都是
无价的。
JA: 您有没有玩过开发源码的BSD操作系统?更具体地说,你有没有具体研究过其
他的内核?
RL: 我曾经有过OpenBSD的计算机,但后来我把它扔到了垃圾站(不是OpenBSD的
原因)。我关于系统的知识停留在理论阶段。我对Matt Dillon在FreeBSD方面的
工作印象很深(他写了包括VM在内的很多部分)。他们的SMPng工作在很好的跟上
(在SMP伸缩性方面,他们不如Linux),他们也在考虑实现抢占式内核。
JA: 您知不知道他们将采用那种形式的抢占?像你的补丁中使用的,或者Andrew的,
或两者的组合中使用吗?
RL: 他们正考虑使用一个完全抢占式的内核,就像我的补丁那样。除了这个方案
被FreeBSD核心团队讨论过之外,我不清楚他们在这方面还做了哪些工作。
JA: 您对当前2.4系列内核的印象如何?您认为它稳定吗?
RL: 从2.2以来,我想我们跨越的距离(note: 内核的改进)是令人惊奇的。2.3中
完成、现在保留在2.4中的工作是令人难以置信的。我们所做的一些改进,尤其是
Linus和Ingo的工作,都是难以置信的。2.4可以工作在非常高性能/高可扩展的
环境之中。
这并不表示我对2.4完全满意了。在这一点上,我认为,去除Rik的VM是一个错误。
如果Linus想在2.5中有新的尝试,就应该尝试所有的途径。然而,在稳定版本中,
我认为我们应该尽可能少作改变。我们不仅仅抛弃了一年多的VM工作,同时也丢弃
了所有相应的文档和理解。尽管如此,VM看起来正在很好地成型。我使用的是
Alan的内核,它采用了Rik的VM,我们正在对它进行改进工作。谁知道如果将2.4
交给Alan,VM将会是什么样子。
JA: 如果突然由您主管内核,您会如何处理这些问题?
RL: 首先,在我的统治下内核将会变成一堆垃圾。不管我如何抱怨,或者他人如何
反对Linus,他不光是一个神奇的hacker,更是一个出色的管理者。Linux需要他。
在VM问题上,我的2.4将跟随Alan的方向。Rik的VM是经过测试并有文档的。我想
我们需要对它进行更完善的测试。太多Rik的好想法和补丁被忽略了。其他不应当
被吸收的补丁却被吸收了。我们需要逐渐吸收VM的工作成果,和吸收与VM没有冲突
的补丁同步进行,测试结果。在Alan的开发树上我们有类似的机制。
对于2.5,当然,任何东西都可以进来。任何东西也可能被去除。我认为Andrea的
VM现在表现得不错。可能它比我认为的更好。但现在才发现它的优点,这不是一个
好的时机。
JA: 对于2.5您看好什么?您期望什么时候开始这方面的工作?
RL: 当然是抢占式的内核。
除此之外,我想继续探索finer-grained locking和overall cleanup。我想
块设备,SCSI层,以及控制台层的重写是有计划的。我们需要考虑NAPI以及其他
形式的IRQ控制。 Ben LaHaise的异步I/O也应该被吸收。Keith的new kbuild
看起来很好。我期待所有这些。
我认为有必要对tty系统进行彻底的重写,但我不知道谁会来做这件事... 至少我
不会。我认为,不会有人,包括Linus,清楚何时2.5问世。我曾经预测在3月份到
5月份之间--像往常那样在2.4.0之后两个月内。既然都快一年了
(2.4在2001年1月4日发布),我更无法猜测。我怀疑当VM稳定了,Alan和Linus
一致的时候,我们会见到2.5.0。但愿不会太久。
JA: 您见过Linus吗?还有Alan,或者其他的Kenerl hackers?
RL: 我没有见过任何著名的hacker。我真希望某一天能见到他们。或许在某个会
议上,或在宠物公园。
JA: 在您除Linux之外的其他时间里,喜欢做些什么?
RL: 除了Linux,学校和女朋友,我喜欢越野骑车,修整我的汽车,看rock演出。
JA: 最近看了哪些精彩的演出? Gainsville出了好多著名的音乐。
RL: 嗯,最近不是很多。Cadillac Blindside两星期前有一场演出,我喜欢他
们。 Jane's Addiction昨晚上演。当然,Less than Jake是当地的,我经常
看这样的演出。它们很棒。
JA: 对那些好学的Kernel hackers,您有什么建议和启示激励他们?
RL: 读源码,玩转源码,逐渐深入。对新手来说,O'Reilly出了一些好书
("Understanding the Linux Kernel" by Bovet and Cesati,
"Linux Device Drivers, 2ed" by Rubini and Corbet都很不错)。
最重要的是读源码。你有整个系统的源码--读、改、学。我几年前在lkml注册,
但在2.3之前我从未作过任何贡献。在lkml潜水是一个很好的方法,可以学到很
多东西。
JA: 非常感谢您花费这么多时间透彻地回答了我的所有问题!由于我们的谈话,我决定
在我的系统上使用你的可抢占内核补丁。
RL: 太好了!告诉我它运行如何,同时也谢谢MontaVista的那些伟大的家伙们。
后记:
在与Robert谈话之后,我下载了他的补丁,作了一个运行测试(应用于2.4.12-ac1)。
哇!性能改进真令人吃惊!VMWare和Mozilla之类曾经在启动和退出时让系统冻结的
应用程序在使用了Robert的补丁后,可以同时启动,并完全保持系统的响应。我还
发现当这些大程序启动时xmms不再"skips"。我将一直使用这个补丁。现在我希望
它能被吸收到2.5的源码中。
译者注:
英文原文自:www.kerneltrap.org
Robert.M.Love在大学三年级的时候,就已经成为了linux kernel的core
hacker之一,拥有了7年使用Linux的经验,不得不让人叹服。
他很谦虚,还很英俊(可以去internet上搜索他的相片:)。
KernelTrap(他的访问以有技术深度而著称) 在2001/2002年各对Robert.M.Love,
分别进行一次访问。2001年的访问(本篇访谈)时,Robert.M.Love所维护的内核
可抢占patch尚未加入2.5中。2002年的访问则是在这个patch加入2.5后进行的。
2002年的访谈翻译工作也将很快开始,请关注。
译者的email:
easyway: huyisui@zju.edu.cn
anlin: book_daemon@yahoo.com.cn
欢迎大家对我们的的翻译工作提出建议。
FreeS/WAN Project Bows Out
也没什么感慨地,ucLinux应该也会消失。
而vsftpd代替wuftpd也正说明Open Source开发方式的优越之处
内部就给优胜劣汰了,哈哈