交换时系统冻结

交换时系统冻结

我有一个树莓派,它通过 CIFS 交换到外部 NAS(请不要评判我:))(链接是直接 100Mbit 全双工以太网连接)。交换工作正常,直到达到某个阈值(大约 100MB)。然后系统冻结并且与 NAS 的网络连接停止。 Samba 共享通过 automount 进行挂载。如果我想找出 Pi 停止使用交换文件的原因,我应该从哪里开始?我不介意速度减慢,因为我只是在编译繁重的程序,但当它冻结时,我被迫重新启动。

答案1

仅查看内核代码,这甚至不应该让您交换 CIFS 挂载上的文件,因此我对它的工作原理感到非常惊讶。网络文件系统上的交换存在两个常见问题:

  1. Linux 上的交换需要静态块映射。这就是为什么交换文件不能稀疏,除非它们使用未写入的范围,以及为什么需要循环设备将交换文件放在写时复制或日志结构化文件系统上。理论上,您可以使用循环设备来解决此问题,但这应该是最后的手段。
  2. 某些协议或身份验证设置需要用户空间组件,如果这些组件没有 mlock() 其整个地址空间,您最终可能会遇到无法交换任何内容的情况,因为您无法运行用户空间代码,因为您没有将其加载到内存中。

CIFS 会遇到第一个问题,如果您使用身份验证并且系统不保持持续连接,也会遇到第二个问题。

您提到您正在使用 Pi,我建议您考虑使用 ZRAM,以及可能的本地交换文件(像样的 SD 卡很便宜)。如果需要,您甚至可以使用 USB 闪存驱动器代替 SD 卡。

或者,更一般地说,如果您有一个合理的 NAS 系统,您可以考虑通过(按一般优先顺序)NBD、以太网上的 ATA 或 iSCSI 进行交换(这取决于它在 Pi 上的设置方式,也可能会受到上面列出的第二个限制)。

相关内容