如何减少linux内存碎片

1. 什么式内存分配以及内存碎片

     内存分配是虚拟内存分配vma,虚拟内存在内核是一个连续的空间(这里内核只是管理vma的其实地址和结束地址,所以占用很小)。在运行过程中mmap时,由于虚拟内存各个线程式共享的,所以分配vma会加锁,在多线程中表现不佳。第二,在长期运行过程中,vma导致碎片会,在分配中,查找vma可用gap的时间可能很长,最坏时间时o(n),  同时也会引起vma红黑树的深度增加,查找,删除,增加时长增加。所以减少内存碎片在提高性能和内存利用率十分重要。 同时由于碎片导致页表项变大,tlb miss概率变大,导致内存访问速度降低。

2. 减少内存碎片

   ptmalloc和jemalloc内存管理器通常的解决思路:自己管理内存,根据分配的内存大小,把管理器分成阶梯大小的内存管理器,比如2,4,8,...字节进行管理,分配的时候,按照best-fit在对应的阶段块分配内存,这样做的好处基本减少了内存碎片,而且是个通用的管理内存方法,但是内存利用率相对较低。 

   slab的解决思路:在内核中,内存分配基本是一样的,比如各类文件系统的分配,大小相同,opt成员大部分一样。使用malloc的思路可以解决内存碎片问题,但是初始化成本很高。slab利用专有的这类场景,管理自身的缓存池,避免成员大量重复的初始化。

附录:

1. mmap源码分析 mmap内核源码分析,基于内核版本3.10(二)_SweeNeil-CSDN博客

2. malloc内存管理 内存优化总结:ptmalloc、tcmalloc和jemalloc | bhpike65

3. slab管理器 linux内存管理之slab机制_Mark~J的博客-CSDN博客_linux slab机制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值