Pravděpodobně je to způsobeno vaším /proc/mount
soubor, který má v sobě řádek delší než 512 znaků, což způsobuje, že modul hwloc OpenMPI jej nedokáže správně analyzovat. Docker má tendenci vkládat velmi dlouhé řádky do /proc/mounts
. Chybu můžete vidět v openmpi-1.10.7/opal/mca/hwloc/hwloc191/hwloc/src/topology-linux.c:1677
:
static void
hwloc_find_linux_cpuset_mntpnt(char **cgroup_mntpnt, char **cpuset_mntpnt, int fsroot_fd)
{
#define PROC_MOUNT_LINE_LEN 512
char line[PROC_MOUNT_LINE_LEN];
FILE *fd;
*cgroup_mntpnt = NULL;
*cpuset_mntpnt = NULL;
/* ideally we should use setmntent, getmntent, hasmntopt and endmntent,
* but they do not support fsroot_fd.
*/
fd = hwloc_fopen("/proc/mounts", "r", fsroot_fd);
if (!fd)
return;
To lze opravit zvýšením hodnoty PROC_MOUNT_LINE_LEN
, ačkoli by to mělo být považováno za dočasné řešení.
Tento problém by měl být opraven v hwloc od 1.11.3 (vydáno před 2 lety). Můžete buď upgradovat na OpenMPI 3.0, který obsahuje hwloc 1.11.7>=1.11.3. Nebo znovu zkompilujte OpenMPI tak, aby místo starého vloženého hwloc používal externí hwloc.