我可以在嵌入式 Linux 中使用 Nand 闪存作为交换内存吗?

我可以在嵌入式 Linux 中使用 Nand 闪存作为交换内存吗?

我的一款产品有 128 MB 的内存,当我们发布该产品的第一个版本时,这个内存足够了。但现在我们添加了一些额外的功能,所以这么多的内存可能会导致 OOM 问题。

我有 64 MB 的闪存,其中超过 50% 未使用,那么我可以将剩余内存用作交换内存吗?

我们在该产品中使用Linux内核版本3.4.56。

提前感谢您的建议。

答案1

如果闪光灯支持磨损均衡(将视情况而定)那么交换可能是可行的,这取决于您希望这些设备持续多长时间。还有其他因素 - 闪存的写入额定值、到目前为止使用了多长时间、写入活跃程度如何。

磨损均衡是一个过程,其中控制器不断计算每个单元被写入的次数,并尝试保持所有单元都有相同的写入次数。

假设该设备运行正常,额定写入次数为 100,000 次(举例来说),通过粗略计算,我们可以得出,在完美磨损和 10MB/s 的情况下,其使用寿命可以达到 2.5 年多一点。实际上,您可能看不到完美磨损,但也可能看不到这种持续写入的水平。

如果没有磨损均衡,那么所有的赌注都会失效,您将不知道一段数据可能会被覆盖的频率,并且如果没有东西将数据分散到闪存单元,您可能会根据您的使用情况在几小时/几天/几周内开始杀死单元。

因此,您可以使用闪存设备进行交换,但是否应该这样做取决于上述因素以及您希望设备可使用多长时间。

另外需要注意的是:此设备上的随机写入速度通常很慢,因此在配置闪存交换时,您将看到巨大的性能损失。您将避免 OOM 情况,但如果一切都慢得像爬行一样,情况可能同样糟糕,因此绝对需要进行一些测试,看看是否值得。

答案2

Linux 并不关心交换位于哪个块设备上。使用swaponshell 中的命令,您可以将其放置在任何您想要的位置。

它可以是硬盘分区sda1sda2等、iSCSI 设备、中的加密或 LVM 设备/dev/mapper,或者mtdblock设备。

如果您的闪存已经格式化,您可能需要使用交换文件而不是块设备。

相关内容