linux内核2.6.39已经发布,有很多亮点
(2011-05-19 22:01:43)
标签:
linux
kernel
it
分类:
技术
刚看到2.6.39发布,有许多亮点:
1、加入了IPset框架,这个能简化iptables规则,提高规则匹配速度。初看跟OpenBSD中pf的table很类似。
2、媒体控制系统的更新(The media controller subsystem)
对linux内核来说,视频采集设备变得越来复杂,同一个视频设备有传感器、DMA桥、视频处理如白平衡调整、镜头阴影补偿处理、图像大小调整等等功能,这对内核来说,意味着不同功能的设备,它们之间又相互连接和传递数据,可以单独起用或暂停某项功能。这样对传统的设备模型来说是一个挑战。
传统的设备模型已经考虑了设备之间在起动与停止顺序方面的依赖,这在机器起动、关机、进入休眠需要用它这些依赖信息。
如果再要表达视频设备不同功能单元之间的联系,这种方法已经有点吃力了。这样有必要改变这种状况。
在这次更新中,新加入了一种新的方式。更重要的是,新的设备之间的关联方式更灵活,也能用来表达传统的电源方面的依赖关系。
3、显式地块设备 请求缓冲
在很早的时候,linux开始对块设备请求进行缓冲与批量处理。作法是当有IO在一个空闲的设备上排队时,这些设备将自动被堵上(plugging),这样IO不是立即派发到底层设备,而是被缓冲住。这样做的好处是能把大量请求按顺序进行合并,提高硬件的吞吐能力。2.6.39对这一块代码做了大的调整。为什么要调整呢?下面对相关历史进行说明。
设备被堵住之后,需要显式地拨掉这些堵住请求的塞子。这一般是在应用程序在进行IO等待状态时调用。这样请求都会派到下一层的设备进行处理。当然,另外还有一些启发式的方法,如当缓冲队列到一定长度,或堵住了指定的时间的时候,打开一次,让请求漏下去。
在最早的实现中,这一块涉及到全局状态。当应用程序快要进入阻塞在IO上时,简单地打开所有堵住的设备,把IO请求全部派发下去。这实现简单,但SMP方面的性能很差。后来的作法把状态放到每个设备结构中,这样虽然解决了SMP性能问题,但是应用程序就不太容易一次性打开所有堵住的设备,为了解决这个问题,又产生了一些新的问题。
另外自动地堵住,需要显式地打开,这种不对称的设置,也容易产生一些让IO停住的BUG。当然可以粗暴地加上自动打开功能,这样既便是有程序忘了打开,也不会让IO停住。
另外,有一些速度快的设备,这种方式反而影响它的性能,需要绕过缓冲。还有一些设备内部就有队列,这样也没必要在外部做缓冲了。
因为所有提到的这些,有必要做一次大的调整。方法是让进程显式地调用接口堵住IO请求,而这些信息都放在进程的内核态堆栈里,而不是放在设备结构里。在进程结构里跟踪这些信息。详细的实现情况请参考对应的链接。
4、终于去掉了内核中的那把巨形锁(big lock)
其它更新见下面的链接:
part1
part2
part3
分享:
喜欢
0
赠金笔
加载中,请稍候......
评论加载中,请稍候...
发评论
登录名: 密码: 找回密码 注册记住登录状态
昵 称:
评论并转载此博文
发评论
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。