主持人:接下来请IBM公司的Linux技术支持中心的Paul E .Makenney博士做演讲。
Paul E .Makenney:大家好,谢谢,我会介绍如何把技术引入到Linux当中,前面的演讲者是从他们日常的工作角度来说的,那么我从历史的角度来说一下如何把Linux引入到技术当中。
首先我要说现在我们要庆祝一个周年,也可以看到25年之前是我第一次来北京。可以看到我现在变化很大,可以看到我现在已经变得老一些了,但是北京也发生 了很大的变化,对于我来说这是印象非常深刻的,那么我在1983年的时候看到的北京,和2008年,现在举办2008年举办奥运会的城市,这之间的变化是 非常巨大的。
我主要会介绍一下如何找到RCU,我还要介绍一下Linux如何改变RCU,同时这方面我们的一些经验。
那么对于RCU我想说的就是现在在极端要求读的性能,决定论的时候,RCU可以被看错读写锁的可替代的技术,我这儿有很多网站,就是对RCU的基本概 念,Linux每周新闻当中有什么叫RCU,有它的基本概念等等,大家可以去这个网站上看。为什么这个很重要呢?就是对于同步的操作它会有不同的成本,那 么你可以看到这个表当中是列到了一个从小到大的成本,那么RCU可以让我们来进行最为便宜的这种运行操作。
那么大家可以看到这个是在 Linux内核当中RCU的使用,在过去5年当中它有很大的增长,但是这个图可能会有一些误导,但是我们必须要认真的分析这个图,我们可以做RCU的使用 和锁的一个比较。大家可以看到这个PPT上有最底下的这是RCU,上面这个是一个与锁的进行的比较。我们可以看到,我们比较他们之间的一个差别,我觉得 RCU并不是用在每一个锁当中,RCU是专门的进行一个使用,我觉得这个技术是非常成功的,我会问RCU是怎么来使用到今天这一步的。非常简单的一个问 题,RCU是Linux改变的,RCU在2001年和2002年和2008年是非常不同的。
为什么会有这样一个变化,那么根据我的经 验,在早期的日子呢,对于企业系统来说有并行的服务器,保护的网络环境,不需要进行时时的应答,而且它的内核开发者的数目很少,大概只有几十个,所以之后 它为了适应Linux,在Linux进行了一个重大的改动,之后我会给大家介绍一下它有哪些变化,介绍一下它给Linux如何改变了RCU,那么首先看到 的是黑色的字体。大家可以看到这个黑色的字体,我所列出来的,就是我所说的,所以那些是我在90年代的时候了解RCU,当时我觉得我已经了解了关于RCU 的一切东西,那么这些白色区域是90年代没有认识到的,但实际上这都是一些新的内容,同时还有很大的一个变化,对于Linux的开发者来说,他们希望有简 易性,他们希望越简单越好。能够减少复杂性,所以对于Linux第一个补丁就是提供给这种同步的一个RCU。
那么之后在右边的蓝色就 去掉了,大家可以看到这是在事先简化的RCU的Linux的变化,大家可以看到这个蓝色的去掉了,还有底下的这个,所以整个的结构会便的更加的简单。但是 之后我们发现Linux的这种开发人员他们不喜欢这个内存闸。那么如果要是有这个内存闸的话,他们会自动的进行拒绝,他们根本不喜欢这个,所以之后我们又 进行了调整,那么我们又添加了底下这些API的列表,之后我们可以把这个内存闸提出来,或者说把它去掉。
之后我们就是出现了 Linux内核的一个时时的操作系统,那么我们这个又第一次调整了API,大家可以看到我们增加了左边的这两个浅蓝色的框里面的黑色字体,所以我们进行了 一个调整。那么之后我们也提到了Linux又要在这种小内存系统当中运行,那么我们也进行了这方面的讨论,我们发现有很多问题,就是对于这个表会占很多的 内存,所以我们添了一个H列表,那么可以看到这个黑色就是H列表,这是我们添加的,我们来减少他们对于内存的使用等等,来适应小内存环境的需要。
大家知道原来我所知道,Linux原来就是一个网络,所以也就是说对于Linux来说,我们要在一个非常繁重的网络工作环境下进行运行,那么之后我们又 加入了这个黑色,就是同步的这样一个NET,那么之后Linux同时原来还有防火墙,那么对于Linux来说我们必须要抵御网络的拒绝服务的攻击,下面我 们又加了RCU,它来保证即使遇到抵御服务的攻击,仍然RCULinux能够生存下来,所以这些就是我刚才所说的Linux它的内存闸不受欢迎。RCU也 会应用于数之上,所以我们就是又进行了一个调整。那么这个就是我这里面指出来的RCU,我们又增加了几条在里面。
大家可以看到下来有 一些空都已经填上了,RCU是一个函数,它是根据拷贝来进行不断的更新,所以日本有一个人提出了把它用于一个SELinux的环境,AVC的环境当中。所 以我们又增加了一部分,就是最底下的这一部分,所以又增加了两条,之后我们进行了更多的Linux的内核的操作系统的要求,那么要符合这个时时操作系统要 求呢,我们会提供一个CPI,它确实会工作,那么人们可能把它用于,把它用于比如说像一些中断的情况等等。
所以我们必须要调整API,来显示它时时的发生变化,大家可以看到这次我们增加的就是中间这一部分,左边的是时时的,右边的是及时的进行更新。那么这些就 是可以让我们进行时时的RCU,那么之后人们会把RCU到可卸载的模块当中,因为如果这个模块卸载之后,那么就需要进行RCU,让RCU有一个反映,我们 这时候有一个人它也是增加 了一个基本的RCU的一个基本的操作,那么又增加了其中一部分,这样可以两使用。
在2006年时发 现,确实这些读者于是Sleep,这样的话对于每一个使用RCU的开发者我们需要做这样一个更新,这样的话我们已经比较接近现在的现状了,但是把内核进行 成熟的列表运算也是非常复杂的。所以要把它变得更加的私有化,很多情况下我们需要更多的进行转换。在底部的方框里面添加了内容,那么到底现在RCU变成什 么样呢,我们可以看到通过这么一个长期的演变,一开始我们是这样一个情况,这个是开始我认为RCU完全的情况,这是现今RCU的情况,所以把RCU引入到 Linux里面,它确实经历了这么一个长期的过程。
在RCU里面加入了大量的Linux,因为Linux可以运行很多种工作,没 有任何其他的操作系统可以做到这一点。有的一些专有的软件可以这样做,但实际上是做不到的。还有另外一个原因就是Linux本身就是一个网络,所以它作为 一个网络的重要的基础结构,提供了支持,它可以被看做是一个防火墙。另外一个非常关键的一点就是大量的开发者,Linux拥有独特的优势,如果说每个人每 年节省了1%的时间,如果我们有一万个开发者,那么每年我们就可以节省100个人/年,这就是一个回报。
那么这一万个开发者可能 并不都是全职的,如果只有500个是全职的,那10周就可以实现回报。80年代的时候我们有非常小的规模做开发,每年我们只能节省0.4个人/年,两年多 才可以收回投资成本,也就是说像Linux这样的技术,这些工具帮我们节省了很多的时间,确实给我们带来很大的回报,所以我们必须希望是人们需要更多的工 具,我们需要添加更多的工具,它会有很多的回报。这就是为什么Linux这么重要,我们必须要解决这些问题。
那么到底Linux贡献 技术的益处是什么呢,我们需要这样一个环境,或者需要一定的修改,才能够使得它在Linux里面可用。另外一个我学到的就是,在实施Linux技术是一个 复杂的一项工作,有很大的工作量。比如说我们在做RCU引入Linux的时候,就做了大量的工作。所以我的结论就是Linux技术的话它就有非常高的回报 性,但是不要认为它很轻松。
最后的是IBM法律部门的幻灯片,大家有没有什么问题要问我呢?如果没有什么问题的话,我们就邀请下一位演讲者。