简单来说:在玩游戏时,如果系统开始频繁使用 Ubuntu 的 Swap(交换空间),游戏性能通常会显著下降。
下面是详细的原理分析、对游戏的具体影响,以及如何优化。
Swap 是硬盘(或 SSD)上的一块专用空间,当系统的物理内存(RAM) 不够用时,Ubuntu 会将内存中不常用的数据暂时转移到 Swap 中,从而防止系统因内存耗尽而崩溃。
对于游戏来说,内存是实时加载和读取的。如果游戏数据被挤到了 Swap 里,后果如下:
这是最常见的现象。当游戏需要加载一个新场景、新模型或读取刚才被挪到 Swap 里的数据时,CPU 必须等待数据从硬盘读回内存。这时游戏画面会瞬间冻结或帧率暴跌,直到数据传输完成。
由于系统忙着处理硬盘 I/O(读写),对键盘、鼠标的响应会变慢,让你感觉操作不跟手。
如果 Swap 在机械硬盘上,你会听到硬盘疯狂转动的声音,电脑也会因此变热。
由于系统资源紧张,音频处理能力下降,可能会导致声音断断续续或爆音。
| 使用场景 | HDD (机械硬盘) | SATA SSD (固态硬盘) | NVMe SSD (高速固态) |
|---|---|---|---|
| Swap 体验 | 极差。游戏基本不可玩,会有明显的卡顿和加载延迟。 | 一般。比 HDD 好很多,但在内存满载时仍有可感知的延迟。 | 尚可。延迟较低,但在高负载下仍不如纯 RAM。 |
| 建议 | 尽量不要在 HDD 上运行内存需求大的游戏,或者给游戏机加内存。 | 可以接受,但最好保证内存够用。 | 性能瓶颈不明显,但依然建议监控内存。 |
即使你的内存还没完全用完,Linux 系统(包括 Ubuntu)也可能使用 Swap。这是因为 Linux 有一个内核参数叫 swappiness。
如果你发现玩游戏时很卡,可以通过以下步骤排查和优化:
打开终端,输入 htop 或 free -h。如果 Swap 那一行的 used 数值在不断变化或很大,说明正在使用 Swap。
让系统更倾向于保留物理内存,不到万不得已不用 Swap。
sudo sysctl vm.swappiness=10
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
(可以将 10 改为 1,这样几乎只在内存耗尽时才用 Swap。)终极方案:关闭 Swap 如果你有足够的 RAM(例如 16GB 或更多),可以考虑在玩游戏时临时关闭 Swap。
sudo swapoff -a
警告:关闭 Swap 后,如果游戏内存溢出,系统可能会直接 OOM (Out Of Memory) 并杀掉游戏进程。请谨慎操作。
方案 B:升级硬件 这是最省钱且最有效的“升级”。对于现代 3A 游戏,16GB 是起步,32GB 会非常从容。
Ubuntu 现在默认可能使用 zRAM 而不是传统的 Swap 文件。zRAM 是在内存中划分一块区域进行压缩。
swappiness 为 10 或更低,避免系统过早使用 Swap。htop 监控,如果 Swap 在频繁读写,说明你需要关闭一些后台程序或者升级内存了。