[英]Large physically contiguous memory area
对于我的硕士 论文中,我必须对Intel内部在CPU中使用的哈希函数进行反向工程,以在Sandy Bridge和更新一代中的Last Level Cache片之间分配数据。 为此,我正在Linux中开发一个应用程序,该应用程序需要一个物理上连续的内存区域才能进行测试。 想法是从该区域读取数据,以便对其进行缓存,探查是否已清除较旧的数据(通过延迟措施或LLC未命中计数器),以查找冲突的内存地址,并最终通过比较这些冲突的地址来发现哈希函数。 研究人员已经在Windows中使用了相同的步骤,并且证明该步骤有效。
为此,我需要分配一个必须大(64 MB或更大)且完全可缓存的区域,因此在TLB中没有DMA友好选项。 如何执行此分配?
为了完全控制分配(即,它实际上在物理上是连续的),我的想法是编写一个Linux模块,从用户空间中导出设备并mmap(),但是我不知道如何分配这么多内核中的连续内存。 我听说过Linux连续内存分配器(CMA),但是我不知道它是如何工作的
有关内核新手的页面,有关内存分配的一些想法。 但是get_free_pages的最大值看起来像8MiB。 (也许这是编译时的约束?)
由于这是完全自定义的,因此您可以探索linux内核的mem=
boot参数。 这将限制使用的内存量,并且您可以在没有任何人知道的情况下共享剩余的所有内存。 哎呀,如果您启动一个busybox系统,您可能可以执行mem=32M
,但是如果您不启动GUI,那么即使mem=256M
应该可以工作。
您还将需要查看Offline Scheduler (和此处 )。 它可以从Linux中“拔出” CPU,因此您可以完全控制在其上运行的所有代码。 (其中的某些部分已经在主线内核中,也许全部都在。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.