我们正在建立一个基于Linux的基准测试集群。每个节点都将是一台无头、无盘的机器,通过tftp引导,将操作系统复制到本地RAM驱动器,并由基准测试应用程序使用相同的same驱动器作为本地驱动器。我的问题是:
这些机器有2个CPU,每个CPU都有自己的内存库,并有4个到这些存储器组的内存通道(因此,为了获得最大的内存吞吐量,这些存储器组被填充了4个内存芯片的倍数)。如果我无法控制使用哪个内存区域来处理内存,那么就有可能在一个单一通道上的区域中创建它,并使用该芯片上的所有内存。这意味着当我的应用程序运行时,运行在内存库内存库上的线程对“本地”内存的内存带宽将比另一个cpu上的线程少25%。那就不好了。因此,需要控制由ramdisk使用的内存区域。
或者这不是一个问题,我可以信任内存控制器在4个通道上的芯片中以一种大幅度的方式排列连续的内存地址?这将是有意义的,因为这将最大限度地扩大内存带宽时,将大量内存块进入缓存。
我只是不知道这些东西是如何运作的,我希望能得到一些启发.
发布于 2017-05-23 11:29:08
您是否使用tmpfs作为对ramdisk的支持?
如果是这样的话,您可以使用参数mpol为特定的NUMA节点分配(请注意内核需要启用CONFIG_NUMA )。
mount -t tmpfs -o size=32g,mpol=prefer:0 tmpfs /mnt/ramdisk将创建一个32 at的内存磁盘,首选安装在/mnt/ramdisk上的NUMA 0。
tmpfs的文档非常好:https://www.kernel.org/doc/Documentation/filesystems/tmpfs.txt
https://unix.stackexchange.com/questions/290175
复制相似问题