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