Cela est probablement dû à votre /proc/mount
fichier contenant une ligne supérieure à 512 caractères, ce qui empêche le module hwloc d'OpenMPI de l'analyser correctement. Docker a tendance à mettre de très longues lignes dans /proc/mounts
. Vous pouvez voir le bogue dans 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;
Cela peut être corrigé en augmentant la valeur de PROC_MOUNT_LINE_LEN
, bien que cela doive être considéré comme une solution de contournement temporaire.
Ce problème devrait être résolu dans hwloc depuis la version 1.11.3 (publiée il y a 2 ans). Vous pouvez soit mettre à niveau vers OpenMPI 3.0 qui contient un hwloc 1.11.7>=1.11.3. Ou recompilez OpenMPI pour utiliser un hwloc externe au lieu de l'ancien intégré.