Linux-2.6.26内核的改变总结


  Linux 2.6.26内核已经发布了一段时间了,可是一直没有总结其所带来的改变,今天得闲,再罗唆一二。

  互斥锁(mutex)的出现使得信号灯(semaphore)同步原语变得不太需要关注性能,这种情况下,代码的可维护性、调试性和扩展性变得更加重要。最终,用C语言重现实现的信号灯取代了以前复杂的架构相关的实现版本,进驻了官方内核。当然,新的C语言版的性能还是不能和旧版本同日而语,可是这并不是什么问题,因为Linus明显鼓励你用更加简单的互斥锁,尽量避免用沉重复杂的信号灯。虽然,目前内核中直接用信号灯的地方已经不多,但是这个改变对内核性能的影响还是不可忽略的,主要体现在基于信号灯的大内核锁(BKL:Big Kernel Lock),Linus认为是历史遗留的大内核锁影响了性能,而不是信号灯,所以他提倡用去除影响内核扩展性的大内核锁的方式来消除这次改变的影响。只是大内核锁由来已久,去除又岂是那么简单的事情,否则它早就被移出内核了,还好这已经得到了主力队员的重视,相信在几个开发周期内大内核锁也许就能被移出,我们等待着这个时间的到来。这也意味着2.6.26之后的几个版本的内核需要在移植之前慎重测试,防止因为它影响了系统的性能。

  针对SYN泛洪(Flood)拒绝服务攻击(Deny of Service: DoS)的syncookies从这个内核版本开始已经可以支持TCP选项和IPV6了,其中对TCP选项的支持是透过时间戳实现的。Linux默认的TCP拥塞控制算法CUBIC更新到了2.2版本。

  这个内核版本最大的改变还是内置了源码级的调试工具KGDB,本想写篇文章探索其配置和应用,后来发现已经有jserv和hellwolf两位出手,也就偷懒了。另外,hellwolf还提到了可以直接用qemu调试内核。如果以上文档您还觉得不够权威,那么可以参考KGDB的文档。

相关内容