更好地解决使用Intel® Xeon Phi™时可能的内存空间不足的问题

  1.超出内存空间

Intel® Xeon Phi™协处理器上的Linux操作系统跟其它任何Linux*操作系统一样,会允许用户分配大于物理可用的内存空间,在很多系统中这是由交换一些内存页到磁盘的方式来实现,并且当可用的物理内存加上交换空间的总量大于一个上限值时,操作系统将会开始关掉某些进程。

Intel® Xeon Phi™协处理器上由于缺少直接相连的磁盘使得这种换页机制较难实现,并且:

  • 协处理器上有最大8GB的物理内存可用;
  • 其中一些内存被缺省用来存放协处理器的文件系统;
  • 没有交换空间可供协处理器来换页

  2.限制虚拟内存盘的内存使用

由于协处理器上没有直接可存取的磁盘,所以协处理器上缺省的根文件系统存放在虚拟内存盘中,这导致不仅减少了文件的存储空间也降低了可供程序运行时使用的内存空间。

根文件系统可通过裁剪而变得较小,如使用BusyBox来取代很多常用的Linux命令比如sh,cp及ls等以及通过限制拷贝到文件系统中的共享库数量来控制文件系统整体的占用空间,一般来说,裁剪后的可供Intel® Xeon Phi™协处理器使用的根文件系统至少要占用10MB的运行时内存。

许多用户程序,不管是运行于offload模式或native模式,都需要将需要的共享库拷贝到协处理器上的根文件系统中,从而导致消耗更多的内存空间及减少了其它用户程序可用的内存空间。并且,native模式的程序还将需要存取data和临时文件,导致其占用更多的空间。

df命令可以帮助查看有多少空间正被用于文件存放

$ df -h
Filesystem                Size      Used Available Use% Mounted on
none                      7.6G         0      7.6G   0% /dev
none                     12.9G     77.1M     12.8G   1% /
none                      7.6G         0      7.6G   0% /dev
none                      7.6G         0      7.6G   0% /dev/shm
可以通过网络文件系统NFS来降低因文件存储而占用的内存大小,除了在标准Linux发行版中的NFS,Lustre及Panasas等网络文件系统也都提供了此类实现,用户可以在http://software.intel.com/en-us/mic-developer找到更多信息。

适合于以网络文件系统存放的内容比如:

  • home目录
  • 专用的data存储
  • 编译器及其它工具的关联共享库如MPI等

NFS也可能被用于根分区,这将要求用户在host机上为每一个协处理器卡设置一个文件目录且将这些目录填充为对应的每个协处理器上的根文件内容。

当使用以NFS方式挂载root时,协处理器将先以一个内存中可最初始root的方式boot,这个初始root会将NFS文件系统挂载好且使用Linux命令switch_root将此文件系统设置为新的root,最初始的内存也将被释放从而可被其他程序继续使用。

使用NFS的一个不足之处就是读取文件时会有较大的延时,在存取大的数据文件时用户可以选择使用针对大文件存取优化过的Lustre文件系统,对于使用NFS作为根文件系统的情况来说,缩短host上的物理磁盘与协处理器之间的距离会有效地降低访存的延时,尽管如此,对于需要频繁被读写的文件来说,将其放置于协处理器上的虚拟内存盘可能是更好的选择。

在Intel® Xeon Phi™协处理器上设置并使用NFS的详细步骤可以在Manycore Platform Software Stack (MPSS) Boot Configuration Guide中找到。

  3.添加文件交换空间

由于协处理器没有直接相连的磁盘,所以没有可供存放从运行时进程中的内存页交换出的空间,这里介绍一种通过使用host上的虚拟块设备的方式来作为网络交换空间的方法来实现存放coprocessor上交换页的方法。

首先需要在host上创建交换空间,在MPSS的readme文件中可找到用于设置协处理器交换页实现的方法,以下是一个设置4GB交换空间的例子:

sudo service mpss start  
dd bs=1G if=/dev/zero of=/tmp/VirtblkSwap count=4  
sudo bash  
echo /tmp/VirtblkSwap >/sys/devices/virtual/mic/mic0/virtblk_file  
exit  
ssh root@mic0 modprobe mic_virtblk  
ssh root@mic0 mkswap /dev/vda  
ssh root@mic0 swapon /dev/vda  
ssh root@mic0 cat /proc/swaps

虽然添加交换空间将提升协处理上能运行的程序的size,这也将会使在使用swap方式时引起性能损失,所以用户应仅在需要的时候使用这一方法。

程序的数据访问方式将有助于决定是否需要设置交换空间,比起使用交换空间来存放过多的内存页,将程序的work划分以使在运行时work所需要的在内存中的data低于当前可用的物理内存的方法会更好。并且,如果同时使用的进程的数目过多导致内存被过度占用的话,此时采取限制在协处理器上同时运行的进程数目的方式要更好于使用交换空间的方法。

最后应注意的是,由于host与协处理器之间需要地址的映射,offload模式时的计算任务将无法使用交换空间。

 

Para obter informações mais completas sobre otimizações do compilador, consulte nosso aviso de otimização.