当前位置:嗨网首页>书籍在线阅读

10-SMP内核

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

17.2.3 SMP内核

注意一个有趣的现象:Linux在优化其SMP性能方面所做的大部分工作也会有助于提升它的实时性能。对称多处理(Symmetric Multiprocessing,SMP)是一种多处理架构,其中的多个处理器(通常是在一块板卡上)共享内存和其他资源。SMP带来的挑战要比单处理器复杂很多,这是因为SMP中的并发途径较多,从而对共享数据的保护也就更加复杂。在单处理器模型中,某个时刻只会有一个任务在内核中执行。并发保护只涉及防止中断或异常处理程序对数据造成的破坏。在SMP模型中,除了要应对来自中断或异常处理程序的威胁之外,并发保护还要考虑到内核中可能有多个线程在同时执行。

Linux从早期的2.x版本开始就已经支持SMP了。在从单处理器模型转移到多处理器模型的过程中,它使用一个BKL(Big Kernel Lock,大内核锁)来保护并发操作。BKL是一个全局的自旋锁(spinlock),它能够阻止任何其他任务在内核中执行。Robert Love在《Linux内核设计与实现》一书中将它描述为“被内核遗弃的孤儿”。在列举BKL的特征时,Robert还开玩笑似地加上了“邪恶”一项!

早期基于BKL实现的SMP内核在进行调度时效率很低。人们发现某个处理器可能会长时间处于空闲状态。为了提升内核的SMP性能,开发人员做了大量工作,而这些工作也直接给实时应用带来了好处——主要是降低了延时。BKL被替换为更小粒度的锁,它们只在实际的共享数据周围进行保护,从而显著降低了抢占延时。