我可以将当​​前内存内容标记为不可交换吗?

我可以将当​​前内存内容标记为不可交换吗?

背景:在我的 Linux (ubuntu) 工作站中,我想运行一些实验,分配比物理 RAM 更多的内存尽管我在 GUI 中做了其他“正常”的事情。

问题: 我有足够的交换空间。当实验开始交换时,GUI 变得非常慢。我怀疑问题在于“正常”的东西不断地移入和移出交换空间。我希望操作系统仅交换实验内存,而不是“正常”内存。

问题:我可以将在某个点(例如,在开始实验之前)分配的所有内存标记为“不可交换”吗?我不介意这是在页面级别还是在进程级别完成的。

感谢您的帮助!

答案1

不可交换内存称为“固定”内存,这是常用于 DMA(直接内存访问)的内存类型。您可以使用标记虚拟地址的某些部分mlock(2)mlockall(2)函数。

例如,您可以将某些应用程序内存标记为固定使用GDB脚本mlock.gdb

call mlockall(3)
detach

并使用这样的命令锁定您的应用程序内存:

gdb --pid ${PID} --batch -x mlock.gdb

相关内容