找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3721|回复: 0

Linux锁定物理内存的方法

[复制链接]
发表于 2013-9-27 14:42:11 | 显示全部楼层 |阅读模式
有时候,我们需要对某些应用要求高效。
除了常用的优化外,还有一个重要的优化可以做,一行代码。
那就是,因为Linux的特性,内存一般分为物理内存和交换缓冲区,当你的数据被放在交换缓冲区,就要涉及到交换的代价和开销。
那么,是否可以,在Linux下,让一些特殊的应用可以完全在物理内存下而不在交换区,从而提升程序的整体性能呢?
完全可以,不过这个动作要慎重,除非你能精确的控制你的内存,否则,万一有一些内存泄露会造成你的物理内存被耗尽导致的系统Core。
来看看怎么做。
  1. int nRet = mlockall(MCL_CURRENT | MCL_FUTURE);
  2.         if (nRet != 0)
复制代码
mlockall需要文件头
#include <sys/mman.h>
这里要切记,MCL_CURRENT和MCL_FUTURE是很关键的。
MCL_CURRENT是指在你执行到当前语句前的所有内存,都会被直接锁定在物理内存中,永远不会被放在交换区中。
这个功能适应初始化你的固定大小的内存池。(实际测试大概有10%左右的性能提升)
后面的MCL_FUTURE这个参数可以要慎重再慎重。
这个参数是说,之后你所有程序申请的内存,都会被直接锁定在物理内存中,这个程序无内存交换区。
这里要确定你的内存是可控的方可做,否则,物理内存占满轻则会导致bad_alloc,重则会影响其他的程序使用。
所以我认为行代码,如何配合可控内存池,那么就可以实现很高效的数据交换。
在这里记录一下。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-12-22 16:10 , Processed in 0.563094 second(s), 7 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表