![我可以在嵌入式 Linux 中使用 Nand 闪存作为交换内存吗?](https://linux22.com/image/1399138/%E6%88%91%E5%8F%AF%E4%BB%A5%E5%9C%A8%E5%B5%8C%E5%85%A5%E5%BC%8F%20Linux%20%E4%B8%AD%E4%BD%BF%E7%94%A8%20Nand%20%E9%97%AA%E5%AD%98%E4%BD%9C%E4%B8%BA%E4%BA%A4%E6%8D%A2%E5%86%85%E5%AD%98%E5%90%97%EF%BC%9F.png)
我的一款产品有 128 MB 的内存,当我们发布该产品的第一个版本时,这个内存足够了。但现在我们添加了一些额外的功能,所以这么多的内存可能会导致 OOM 问题。
我有 64 MB 的闪存,其中超过 50% 未使用,那么我可以将剩余内存用作交换内存吗?
我们在该产品中使用Linux内核版本3.4.56。
提前感谢您的建议。
答案1
如果闪光灯支持磨损均衡(将视情况而定)那么交换可能是可行的,这取决于您希望这些设备持续多长时间。还有其他因素 - 闪存的写入额定值、到目前为止使用了多长时间、写入活跃程度如何。
磨损均衡是一个过程,其中控制器不断计算每个单元被写入的次数,并尝试保持所有单元都有相同的写入次数。
假设该设备运行正常,额定写入次数为 100,000 次(举例来说),通过粗略计算,我们可以得出,在完美磨损和 10MB/s 的情况下,其使用寿命可以达到 2.5 年多一点。实际上,您可能看不到完美磨损,但也可能看不到这种持续写入的水平。
如果没有磨损均衡,那么所有的赌注都会失效,您将不知道一段数据可能会被覆盖的频率,并且如果没有东西将数据分散到闪存单元,您可能会根据您的使用情况在几小时/几天/几周内开始杀死单元。
因此,您可以使用闪存设备进行交换,但是否应该这样做取决于上述因素以及您希望设备可使用多长时间。
另外需要注意的是:此设备上的随机写入速度通常很慢,因此在配置闪存交换时,您将看到巨大的性能损失。您将避免 OOM 情况,但如果一切都慢得像爬行一样,情况可能同样糟糕,因此绝对需要进行一些测试,看看是否值得。
答案2
Linux 并不关心交换位于哪个块设备上。使用swapon
shell 中的命令,您可以将其放置在任何您想要的位置。
它可以是硬盘分区sda1
、sda2
等、iSCSI 设备、中的加密或 LVM 设备/dev/mapper
,或者mtdblock
设备。
如果您的闪存已经格式化,您可能需要使用交换文件而不是块设备。