选择特殊符号
选择搜索类型
请输入搜索
SLAB 分配器多年以来一直位于 Linux 内核的内存管理部分的核心地带,内核黑客们一般不愿意主动去更改它的代码,因为它实在是非常复杂,而且在大多数情况下,它的工作完成的相当不错。但是,随着大规模多处理器系统和 NUMA系统的广泛应用,SLAB 分配器逐渐暴露出自身的严重不足:
较多复杂的队列管理。在 SLAB 分配器中存在众多的队列,例如针对处理器的本地对象缓存队列,slab 中空闲对象队列,每个 slab 处于一个特定状态的队列中,甚至缓冲区控制结构也处于一个队列之中。有效地管理这些不同的队列是一件费力且复杂的工作。slab 管理数据和队列的存储开销比较大。每个 slab 需要一个 struct slab 数据结构和一个管理所有空闲对象的 kmem_bufctl_t(4 字节的无符号整数)的数组。当对象体积较少时,kmem_bufctl_t 数组将造成较大的开销(比如对象大小为32字节时,将浪费 1/8 的空间)。为了使得对象在硬件高速缓存中对齐和使用着色策略,还必须浪费额外的内存。同时,缓冲区针对节点和处理器的队列也会浪费不少内存。测试表明在一个 1000 节点/处理器的大规模 NUMA 系统中,数 GB 内存被用来维护队列和对象的引用。缓冲区内存回收比较复杂。对 NUMA 的支持非常复杂。SLAB 对 NUMA 的支持基于物理页框分配器,无法细粒度地使用对象,因此不能保证处理器级缓存的对象来自同一节点。冗余的 Partial 队列。SLAB 分配器针对每个节点都有一个 Partial 队列,随着时间流逝,将有大量的 Partial slab 产生,不利于内存的合理使用。性能调优比较困难。针对每个 slab 可以调整的参数比较复杂,而且分配处理器本地缓存时,不得不使用自旋锁。调试功能比较难于使用。为了解决以上 SLAB 分配器的不足之处,内核开发人员 Christoph Lameter 在 Linux 内核 2.6.22 版本中引入一种新的解决方案:SLUB 分配器。SLUB 分配器特点是简化设计理念,同时保留 SLAB 分配器的基本思想:每个缓冲区由多个小的 slab 组成,每个 slab 包含固定数目的对象。SLUB 分配器简化了kmem_cache,slab 等相关的管理数据结构,摒弃了SLAB 分配器中众多的队列概念,并针对多处理器、NUMA 系统进行优化,从而提高了性能和可扩展性并降低了内存的浪费。为了保证内核其它模块能够无缝迁移到 SLUB 分配器,SLUB 还保留了原有 SLAB 分配器所有的接口 API 函数。
灯光设计原理
一、光的艺术作用 (一)、光艺术的起源 阳光、月光、星光和火光伴随着原始人的生活,旭日与夕阳 交替,白昼和黑夜循环, 原始人在光的沐浴下生成发育繁衍。 火的发明使用,使人类进入了 新的文明阶段,火不仅用来照明、取暖、烧烤食物,到了晚间,原始人围着火堆,举起火把 狂欢舞蹈, 一堆堆火光映红了一张张欢乐而喜悦的脸, 一串串舞动的火把构成火蛇巨龙, 这 就是人类早期的用光构成的原始光艺术雏型。 随着火、蜡烛、油灯、汽灯、电灯等人工光源的发明创造,人类跨越了一个又一个文明 阶段进入了当今灯光照明高科技时代, 由于人工照明技术的迅速发展和人造光源的普及, 人 们的夜生活变得越来越丰富多采, 灯光艺术作为一种新的视觉艺术形式, 把人们的生活空间 装点得更加美丽。在现代环境艺术设计、 舞台艺术设计、 室内装饰等方面, 灯光艺术已被广 泛地应用。 (二)、光的艺术魅力 光照的作用对人的视觉功能的发挥极为重