我知道使用C malloc和posix_memalign可以从进程的虚拟地址空间中分配连续的内存。然而,我想知道是否有一种方法可以分配物理上连续的内存缓冲区?我正在研究利用L2高速缓存的侧信道攻击,所以我想确保我能够访问正确的高速缓存行。
我知道使用C malloc和posix_memalign可以从进程的虚拟地址空间中分配连续的内存。然而,我想知道是否有一种方法可以分配物理上连续的内存缓冲区?我正在研究利用L2高速缓存的侧信道攻击,所以我想确保我能够访问正确的高速缓存行。
/proc/meminfo
中检查Hugepagesize
字段以获取设置中巨大页面的大小。通过向 mmap()
传递 MAP_HUGETLB
标志,可以确保“巨大”虚拟页面对应于连续的物理内存范围。不幸的是,内核能否为您提供“巨大”页面取决于许多因素(当前内存利用布局、内核选项等 - 还请参见 hugepages
内核引导参数)。
通过从专用 HugeTLB 文件系统映射文件(请参见此处:http://lwn.net/Articles/375096/)。使用 HugeTLB 文件系统,您可以预先配置可用的巨大页面数,以确保必要数量的巨大页面可用。