首先要说的是memory area,因为有时需要的内存没有一个page frame那么大,比方说只有10bytes,如果分配一个page frame给它,则会产生很多internal fraction。这是一方面,更重要的是很多
kernel的数据结构都不正好是一个或几个page frame那么大,那么在分配的时候就会造成很多internal fraction。为了解决这个问题,linux现在是采用sun solris的解决方法。在内存划出多块区域,
被称为cache用来存放常用的kernel object,每个cache用来存放一类kernel object,每个cache被分为多个slab,每个slab存放一些objects。这样就可以将internal fraction减少到最小,另外
还可以复用object(每个object还有构造函数和析构函数,函数指针存放在cache decriptor中),从而提高系统的运行效率。但是每个object都是按某个常数进行对齐的,一般是power of 2。因为我们
要知道硬件cache也是按一个常数(通常是power of 2)进行对齐,所以内存中的对齐有利充分利用cache。还有一个原因是,一旦对齐了后,计算下一个对象的开始地址就变得简单了,而且可以用高效的指令
来完成,比如1<<位移的次数。第三点优势在于,Usually, microcomputers access memory cells more quickly if their physical addresses are aligned with respect to the
word size (that is, to the width of the internal memory bus of the computer).所以object是按word size 进行对齐。
补充:
linux还有一些通用的cache(general purpose cache),他们存放的object的大小是2的指数,从32到131072bytes。
在linux中还有per-cpu page frame cache,保存的是从buddy system中申请的一个个page frame,用来满足cpu对单个page frame的需求。所以linux为了提高系统的运行效率,还是动了不少脑经
的哦
2009/02/04 三
分享到:
相关推荐
### Slab Allocator:一种对象缓存内核内存分配器 #### 概述 本文主要介绍了一种基于对象缓存的内核内存分配器——Slab Allocator。该分配器由Jeff Bonwick在Sun Microsystems设计实现,并在SunOS 5.4操作系统中...
slab allocator是一种高效的内存管理机制,它最初是在Linux内核中引入的,用于优化小对象的内存分配和释放。在应用程序层实现slab allocator的概念,意味着开发者试图将这种内存管理技术应用于用户空间程序,以便更...
在《The Slab Allocator: An Object-Caching Kernel Memory Allocator》这篇论文中,作者Jeff Bonwick深入探讨了SunOS 5.4内核中的内存分配器设计。这个分配器基于一组对象缓存原始技术,旨在降低复杂对象分配的成本...
Slab本身从页分配器(Page Allocator)中获得连续的页面。Slab包含了特定大小的对象以及管理这些对象状态的位图(bitmap),位图中的每个字节用来管理对应对象的状态:如果位图的某个字节为0,则表示对应的对象是...
其中,slab、slob和slub是Linux内核中三种主要的内存分配器,它们在性能、效率和内存使用上各有特点。 首先,SLAB是一种非常古老的内存分配器,它最早由Sun公司的开发者提出并用在Solaris操作系统中。SLAB分配器的...
- **slab allocator**:Memcached采用slab allocator来优化内存管理。它将内存预先分割成多个slab class,每个class包含大小固定的chunk,根据数据大小选择合适的chunk,从而避免频繁的内存分配和释放导致的碎片化。...
libumem是Sun OS(现在称为Oracle Solaris)中的一种用户空间内存管理库,它的出现源自于SunOS 5.4中的Kernel Slab Allocator。Kernel Slab Allocator是为了提高操作系统对内存分配和管理的效率而设计的,尤其在多...
- **内存分配管理**:采用SLAB ALLOCATOR机制,预分配内存空间以减少内存碎片。 - **SLAB缓存记录原理**:每个SLAB包含一系列相同大小的对象,便于高效内存管理。 - **SLAB ALLOCATOR的缺点**:可能导致内存利用...
总结来说,Java中高级面试中涉及到的Memcached知识点包括:客户端实现的分布式、Slab Allocator内存管理、惰性失效机制、无底洞现象及其解决方案以及一致性Hash算法的应用。理解并掌握这些概念对于优化和管理Java...
Memcached 的内存存储机制是 Slab Allocator,解决了内存碎片的问题。 Neo4j 是一种图形数据库,使用节点和关系来描述数据模型。节点和关系都可以通过属性来描述,属性通过键值对(key-value)的形式组成。Neo4j ...
1. Slab Allocation 机制:Memcached 内存管理的核心是 Slab Allocator,将内存划分为固定大小的 chunk,避免内存碎片。每个 slab 对应一组相同大小的 chunk,数据根据大小被分配到合适的 slab 中。尽管可能导致空间...
Memcached使用slab allocator进行内存管理,将内存划分为多个slabs,每个slab包含多个固定大小的chunk。这种方式避免了内存碎片,提高了内存利用率。 四、Memcached的过期策略 Memcached支持为每个键值对设置过期...
通过对Memcached内存管理机制Slab Allocator的理解,可以分析出是因为内存分配策略导致的高剔除率。这表明,了解组件的实现原理能够帮助定位和解决实际问题,避免盲目优化。 总结起来,面试官询问组件实现原理并非...
- **Slab Allocator的缺点**: 主要包括内存碎片问题和未使用的内存无法回收等。 - **使用GrowthFactor进行调优**: GrowthFactor控制slab增长的比例,合理设置可以优化内存使用效率。 #### memcached的删除机制 - *...
- **自主内存存储处理**:Memcached使用了一种名为slab allocator的内存管理方式来管理内存,这种方法通过预分配固定大小的内存块(称为slab),然后将不同大小的对象存储在这些固定大小的内存块中,有效地减少了...
7. ** slab分配器(Slab Allocator)**: Memcached采用slab分配器来管理内存,将内存划分为不同大小的chunk,每个chunk对应一个slab类。这种方式避免了内存碎片,提高了内存利用率。 8. **命令行参数(Command Line ...
它采用Slab Allocator策略,预先将内存划分为多个仓库(slabs),每个仓库内又包含不同大小的chunk用于存储数据。这种设计旨在避免碎片化,但可能导致内存利用率不高,因为无法精确匹配所有数据大小。增长因子...