分配最大缓冲区而不使用交换

2023-12-19

在Linux下的C/C++中,我需要分配一个大的(几GB)内存块,以便存储来自连接到以太网端口的传感器的实时数据以及约110MB/s的流数据。我想分配尽可能多的内存,以最大化我可以存储的数据序列的长度。但是,我还需要确保不会发生磁盘交换,因为由此产生的延迟和磁盘访问的有限带宽会导致传感器(非常有限)的缓冲区溢出。

确定分配多少内存的最佳方法是什么?我是否只能分配比报告的可用内存稍小的块,或者我可以更直接地与 Linux 虚拟内存管理器交互吗?


那么,在Linux下,您可以使用mlock()/mlockall()在物理内存中保留一个地址范围并防止其被换出。使用 mlock 的进程需要一些权限才能执行此操作,“man mlock”有详细信息。我不确定最大的 mlock'able 块(它可能与看起来“免费”的块不同),所以二分搜索可能会有所帮助(锁定一个范围,如果失败会减少区域的大小等......)

另一方面,110MB/s 对于固态硬盘来说并不是真正的问题。写入速度为 280MB/s 的 60GB SSD 售价约为 200 美元。只需将传感器数据复制到小型写入缓冲区并将其流式传输到 SSD。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分配最大缓冲区而不使用交换 的相关文章

随机推荐