背景:在我的 Linux (ubuntu) 工作站中,我想运行一些实验,分配比物理 RAM 更多的内存,同时在 GUI 中执行其他“正常”操作。
问题:我有足够的交换空间。当实验开始交换时,GUI 变得非常慢。我怀疑问题在于“正常”的东西不断地移入和移出交换空间。我希望操作系统仅交换实验内存,而不是“正常”内存。
问题:我可以将在某个点(例如,开始实验之前)分配的所有内存标记为“不可交换”吗?我不介意这是在页面级别还是在进程级别完成的。
感谢您的帮助!
不可交换内存称为“固定”内存,这是常用于 DMA(直接内存访问)的内存类型。mlock(2)您可以使用或函数来标记虚拟地址的某些部分mlockall(2)。
您可以使用 GDB脚本标记某些应用程序内存固定mlock.gdb:
call mlockall(3)
detach
Run Code Online (Sandbox Code Playgroud)
并使用这样的命令锁定您的应用程序内存:
gdb --pid ${PID} --batch -x mlock.gdb
Run Code Online (Sandbox Code Playgroud)